Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Debutant, voire neuneu] - Formulaires, session...

13 réponses
Avatar
Pascale
Bonjour à tous,

Je tiens d'abord à demander votre indulgence si j'emploie des termes
impropres ou approximatifs, mais bon, je débute...
Je suis en train (d'essayer) de programmer un site qui comporte la
possiblité de saisir des informations (textes et photos) via un formulaire
html tout ce qu'il y a de classique. Une fois le formulaire rempli,
l'utilisateur clique sur VISUALISER et peut voir l'ensemble de ce qu'il a
saisi photo(s) comprise(s). À ce moment là, un certain nombre de contrôles
sur les données saisies sont effectués : si quelque chose ne va pas, on ne
visualise pas la demande, l'utilisateur retourne automatiquement au
formulaire (avec un message d'erreur qui explique ce qui ne convient pas).
Lorsqu'il visualise ce qu'il a saisi (ce qui signifie qu'il n'y a pas
d'anomalie), il peut soit valider sa demande, soit la corriger (retour au
formulaire), soit abandonner.
Lorsque les personnes reviennent au formulaire, quelle qu'en soit la
raison, je souhaite qu'elles retrouvent ce qu'elles ont saisi (afin de
n'avoir pas tout à retaper). À noter que, par souci de simplicité, je leur
permets d'uploader une deuxième photo si elles n'en ont chargé qu'une, mais
je ne leur laisse pas la possiblité de modifier la ou les photos déjà
chargées, je me contente de les afficher en petit, juste comme un rappel.
Lorsque l'utilisateur clique sur Valider, après avoir visualisé sa demande,
un certain nombre de traitements sont effectués dont l'entrée des données
dans des tables (MySQL).
En un mot, il y a des informations qui circulent, qu'on doit pouvoir passer
d'un programme à l'autre (saisie initiale, saisie de correction,
visualisation, validation).
Ayant jusque là un hébergeur qui fonctionnait avec register_globals sur ON,
j'utilisais le peu que je savais utiliser, à savoir les commandes
session_register, session_unregister, session_is_registered... et autres
commandes qui ne marchent que lorsque register_globals est à ON. Tout
allait bien...
MAIS, comme c'était prévisible, mon hébergeur bien aimé va passer à
register_globals OFF d'ici quelques semaines. Je peux certes forcer cela et
rester à ON, mais je sais que c'est mal (:

J'ai lu partout qu'il vaut mieux travailler avec des variables
$_SESSION['machin'] (de même que j'utilise $_POST['machin']... mais j'ai
essayé, je n'y arrive tout bonnement pas, alors que mes programmes
marchaient très bien « à l'ancienne mode ». Je me pose des zillions de
questions : je déclare déjà $machin=$_POST['machin'], qu'est-ce que je mets
comme nom de variable (la même chose ? une autre ?) avec
$_SESSION['machin']... Bref  J'EN FAIS QUOI, DE CES TRUCS ? et comment je
trouve l'équivalent de session_unregister('machin') qui me permet de
déverrouiller la variable $machin et d'enregistrer éventuellement autre
chose à la place, mais sans l'effacer si ce n'est pas nécessaire...? Bref,
des questions de neuneu, sûrement mal posées, mais bon, j'ai beau éplucher
http://fr3.php.net/manual/fr/ref.session.php et autres sites instructifs,
j'ai l'impression d'errer dans un maquis sans fin et plein de
traquenards...

Mais je me dis qu'au fond, je n'ai peut-être pas besoin d'utiliser des
sessions pour faire ce que je veux faire (à noter que ces données n'ont
rien de secret-défense), après tout, les sessions ne sont pas faites
VRAIMENT pour ça ? Si ? Et si non, comment faire les choses, disons, le
plus proprement possible, mais sans bâtir une usine à gaz ?

--
Pascale

10 réponses

1 2
Avatar
Pascale
Je me réponds à moi-même pour apporter quelques précisions : j'ai enfin
compris que je pouvais écrire :
$_SESSION['truc']=$_POST['truc'];
et, si besoin :
$truc=$_SESSION['truc']

au lieu de
$truc=$_POST['truc'];
session_register('truc');

dans mon programme qui visualise les données saisies et contrôle leur
validité...
Mais ce fichu $_SESSION ne fonctionne toujours pas : lorsque je reviens au
formulaire de départ, pour une modification/correction, et que je demande
l'affiche de $_SESSION['truc'], j'ai un beau rien tout neuf, alors que dans
le programme de visualisation/contrôle des données, $_SESSION['truc']
contenait bien la valeur souhaitée !

Pire encore, une partie du programme qui contrôle les données entrées ne
fonctionne plus... Il s'agit du contrôle de la validité de l'adresse
courriel entrée par l'utilisateur.
L'ancienne version :

// Teste la présence de l'adresse courriel
if (empty($_POST['courriel']))
{echo 'Votre adresse courriel est manquante !<br>';
$errtxt=1;}
// Teste la validité de l'adresse courriel
elseif (!ereg("([A-Za-z0-9]|-|_|.)*@([A-Za-z0-9]|-|_|.)*.([A-
Za-z0-9]|-|_|.)*",$courriel))
{$errtxt=1;
echo '<p align="center"><font color="red">'.$courriel.' n'est
pas une adresse courriel valide</font></p>';
$courriel="";}
// Adresse courriel présente et valide
else
{$courriel=$_POST['courriel'];
session_register('courriel');}

La nouvelle version :

// Teste la présence de l'adresse courriel
// idem version précédente
// Teste la validité de l'adresse courriel
// idem version précédente
// Adresse courriel présente et valide
else
{$courriel=$_POST['courriel'];
$_SESSION['courriel']=$courriel;}

Avec cette version, j'ai dans TOUS LES CAS une erreur, car l'adresse
courriel existe, mais est vide (alors que je suis bien sûre d'avoir entré
une adresse courriel valide).

Ce register_globals à off est en train de me faire tourner en bourrique !

--
Pascale
Avatar
Pascale
Pascale <chaton.tigre+ écrivait
news::

Ce register_globals à off est en train de me faire tourner en bourrique !


J'ai trouvé la solution au problème posé dans mon deuxième message, mais
celui du premier message persiste. Et un autre s'ajoute : avec
register_global à off, je ne peux visiblement pas passer une valeur dans
une URL du type
http://www.mondomaineamoiquejai.net/monbeauprogramme.php?numero=$numero car
$numero n'est tout bonnement pas récupéré.
Avec register_global à on, tout marche bien, je pense que je vais donc
mettre un .htaccess me permettant de conserver ce paramètre, car je ne
trouve rien qui réponde à mes questions, ni dans la documentation php, ni
sur le ouaibe... ni sur ce forum.
--
Pascale

Avatar
Florian Sinatra
*Pascale* @ 03/11/2006 10:52 :
J'ai trouvé la solution au problème posé dans mon deuxième message, mais
celui du premier message persiste. Et un autre s'ajoute : avec
register_global à off, je ne peux visiblement pas passer une valeur dans
une URL du type
http://www.mondomaineamoiquejai.net/monbeauprogramme.php?numero=$numero car
$numero n'est tout bonnement pas récupéré.


Et avec $_GET["numero"] ?

Avec register_global à on, tout marche bien, je pense que je vais donc
mettre un .htaccess me permettant de conserver ce paramètre, car je ne
trouve rien qui réponde à mes questions, ni dans la documentation php, ni
sur le ouaibe... ni sur ce forum.


Essaie par là :
* http://phpdebutant.org/article69.php
* http://phpdebutant.org/article113.php

Avatar
Christophe Meresse

Et un autre s'ajoute : avec
register_global à off, je ne peux visiblement pas passer une valeur dans
une URL du type
http://www.mondomaineamoiquejai.net/monbeauprogramme.php?numero=$numero car
$numero n'est tout bonnement pas récupéré.


Normal que $numero ne contienne rien avec register_global à off. As-tu
regardé le contenu de $_GET['numero'] ?

Christophe

Avatar
Olivier Miakinen

*Pascale* @ 03/11/2006 10:52 :
J'ai trouvé la solution au problème posé dans mon deuxième message, mais
celui du premier message persiste. Et un autre s'ajoute : avec
register_global à off, je ne peux visiblement pas passer une valeur dans
une URL du type
http://www.mondomaineamoiquejai.net/monbeauprogramme.php?numero=$numero car
$numero n'est tout bonnement pas récupéré.


Et avec $_GET["numero"] ?


Voire avec $_REQUEST["numero"] afin que ça fonctionne aussi bien par GET
que par POST.

Avec register_global à on, tout marche bien, je pense que je vais donc
mettre un .htaccess me permettant de conserver ce paramètre, car je ne
trouve rien qui réponde à mes questions, ni dans la documentation php, ni
sur le ouaibe... ni sur ce forum.



Et sur la FAQ dudit forum <http://faqfclphp.free.fr/#rub2.7> ?


Avatar
Pascale
Olivier Miakinen <om+ écrivait
news:454b7575$:

Et sur la FAQ dudit forum <http://faqfclphp.free.fr/#rub2.7> ?


Je vais étudier ça, j'avais vu la charte, mais pas la FAQ... (chuis peut-
être myro, finalement...)

--
Pascale

Avatar
Pascale
[Ciel ! des réponses ! J'y croyais plus (o; ]

Florian Sinatra écrivait
news::

Et avec $_GET["numero"] ?


Ben... euh... c'est que je ne comprends pas trop ce que GET, POST ou autre
viennent faire ici ? Je peux mettre ça dans une URL ??? J'explique, peut-
être plus clairement, ce que je veux faire : j'ai une liste de fiches à
l'écran (récupérée par une requête MySQL, rien d'extraordinaire) et je veux
que lorsqu'une personne clique sur le numéro d'une fiche, elle puisse
accéder au détail de cette fiche (et faire certaines actions). Pour moi,
GET et POST, cela ne concerne que les formulaires, donc je ne comprends pas
comment les utiliser dans ce contexte (ben oui, j'avais prévenu, niveau
neuneu...).

Essaie par là :
* http://phpdebutant.org/article69.php
* http://phpdebutant.org/article113.php


Je connais ce site, que je trouve très bon, et j'étais bien allée voir ces
pages là, mais il ne m'avait pas semblé qu'elles répondaient à mon problème
(mais j'ai peut-être tort)...

--
Pascale
qui se demande toujours pourquoi une variable enregistrée par $_SESSION est
perdue corps et biens...

Avatar
Florian Sinatra
*Pascale* @ 03/11/2006 23:04 :
[Ciel ! des réponses ! J'y croyais plus (o; ]


Disons pour être franc que le dernier problème que tu évoques est
suffisamment restreint pour qu'on (je) puisse y répondre. Ton premier
message était plutôt décourageant.

Ben... euh... c'est que je ne comprends pas trop ce que GET, POST ou autre
viennent faire ici ? Je peux mettre ça dans une URL ??? J'explique, peut-
être plus clairement, ce que je veux faire : j'ai une liste de fiches à
l'écran (récupérée par une requête MySQL, rien d'extraordinaire) et je veux
que lorsqu'une personne clique sur le numéro d'une fiche, elle puisse
accéder au détail de cette fiche (et faire certaines actions).


Pour résumer, tu veux récupérer un paramètre envoyé dans l'URL.

Pour moi,
GET et POST, cela ne concerne que les formulaires, donc je ne comprends pas
comment les utiliser dans ce contexte (ben oui, j'avais prévenu, niveau
neuneu...).


Je sais pas comment tu as pu penser ca en ayant lu tout ce que tu as lu.
Ca m'a pourtant l'air clair
(http://ch2.php.net/manual/fr/language.variables.predefined.php) :

«
$_GET
Les variables fournies au script via la chaîne de requête URL. [...]

$_POST
Les variables fournies par le protocole HTTP en méthode POST. [...]
»

Un lien provoque une requête GET (c'est ce dont tu as besoin) et un
formulaire provoque une requête GET ou POST, suivant la valeur de son
attribut method.
Et pourtant, tu le sais déjà, si tu extrais des variables depuis l'URL
en register_globals. Avant, tu utilisais les variables dont le nom
correspond au paramètre de l'URL, maintenant, tu dois les prendre dans
le tableau correspondant. Qu'y a-t-il à ajouter ?

Essaie par là :
* http://phpdebutant.org/article69.php
* http://phpdebutant.org/article113.php


Je connais ce site, que je trouve très bon, et j'étais bien allée voir ces
pages là, mais il ne m'avait pas semblé qu'elles répondaient à mon problème
(mais j'ai peut-être tort)...


Ben si celles-ci y répondent pas... enfin peut-être que le problème
n'est pas encore cerné ?


Avatar
Pascale
Florian Sinatra écrivait
news::

Disons pour être franc que le dernier problème que tu évoques est
suffisamment restreint pour qu'on (je) puisse y répondre. Ton premier
message était plutôt décourageant.


Par rapport à mon niveau intellectuel ? /-:
Ou alors c'est simplement parce que je suis un peu découragée, à cause de
ces fichues $_SESSION .

Pour résumer, tu veux récupérer un paramètre envoyé dans l'URL.


'bsolument.

Je sais pas comment tu as pu penser ca en ayant lu tout ce que tu as
lu. Ca m'a pourtant l'air clair [...]


Quand j'ai eu ce problème d'URL, je n'ai pas eu l'idée de revenir vers ce
que j'avais lu au sujet du passage de données via un formulaire.
D'une manière générale, pour quelqu'un comme moi qui n'a jamais programmé,
comprendre que telle fonction correspond à tel besoin n'est pas la moindre
des difficultés. Le degré complètement ésotérique de certaines définitions
n'est peut-être pas perçu par les personnes expérimentées, mais, vu « de
l'extérieur » certaines définitions/explications semblent être une
application directe de l'adage « pourquoi faire simple quand on peut faire
compliqué ? », et en on arrive même à des degrés d'ésotérisme et
d'hermétisme qui renferment, finalement, quelque mystérieuse mais
décourageante poésie aux yeux de l'humble non-initiée aux mystères que je
suis.

Un lien provoque une requête GET (c'est ce dont tu as besoin) et un
formulaire provoque une requête GET ou POST, suivant la valeur de son
attribut method.
Et pourtant, tu le sais déjà, si tu extrais des variables depuis l'URL
en register_globals. Avant, tu utilisais les variables dont le nom
correspond au paramètre de l'URL, maintenant, tu dois les prendre dans
le tableau correspondant. Qu'y a-t-il à ajouter ?


Maintenant, rien.

Ben si celles-ci y répondent pas... enfin peut-être que le problème
n'est pas encore cerné ?


Sûr que l'interface chaise-clavier est consciente de ses limites, mais le
problème est plutôt bien cerné, vu qu'il s'agit de faire marcher, avec
register_globals à off ce qui marchait très bien avec on. Pour l'instant,
les $_SESSION résistent toujours, et j'attends toujours de trouver un
exemple ou une explication qui ressemble, même de loin, à ce que je veux
obtenir.

--
Pascale

Avatar
Florian Sinatra
*Pascale* @ 05/11/2006 01:16 :
Florian Sinatra écrivait
news::

Disons pour être franc que le dernier problème que tu évoques est
suffisamment restreint pour qu'on (je) puisse y répondre. Ton premier
message était plutôt décourageant.


Par rapport à mon niveau intellectuel ? /-:


Non, pas du tout. Mais il semblait que tu n'avais strictement rien
compris, que tu paniquais, que tout était sans-dessus-dessous, et que
tout était à faire. Ce n'est plus le cas.

Quand j'ai eu ce problème d'URL, je n'ai pas eu l'idée de revenir vers ce
que j'avais lu au sujet du passage de données via un formulaire.
D'une manière générale, pour quelqu'un comme moi qui n'a jamais programmé,
comprendre que telle fonction correspond à tel besoin n'est pas la moindre
des difficultés. Le degré complètement ésotérique de certaines définitions
n'est peut-être pas perçu par les personnes expérimentées, mais, vu « de
l'extérieur » certaines définitions/explications semblent être une
application directe de l'adage « pourquoi faire simple quand on peut faire
compliqué ? », et en on arrive même à des degrés d'ésotérisme et
d'hermétisme qui renferment, finalement, quelque mystérieuse mais
décourageante poésie aux yeux de l'humble non-initiée aux mystères que je
suis.


Avant PHP, je ne programmais quasiment pas. Je n'ai aucune formation
dans ce domaine, si ce n'est en autodidacte. Mais je trouve le manuel
plutôt clair... enfin je te comprends. Mais inutile de t'inquiéter à
propos de tes connaissances. Elles ne peuvent que croître, et elles le
feront.

Sûr que l'interface chaise-clavier est consciente de ses limites,
mais le

problème est plutôt bien cerné, vu qu'il s'agit de faire marcher, avec
register_globals à off ce qui marchait très bien avec on. Pour l'instant,
les $_SESSION résistent toujours, et j'attends toujours de trouver un
exemple ou une explication qui ressemble, même de loin, à ce que je veux
obtenir.


Donc si le seul problème tient aux sessions, il n'a *absolument* aucun
rapport (à ma connaissance) avec register_globals. Peut-être que ton
nouvel hébergement est plus restrictif, ou que sais-je. Mais les
sessions sont indépendantes de register_globals (quel lien pourrait-il y
avoir ?). Normalement, le seul changement à faire à ton script est
d'aller chercher tes variables venant de l'extérieur dans $_GET ou $_POST.
Quels sont les changements que l'hébergeur a apporté ? A-t-il changé de
version de PHP ? Si oui, de laquelle pour laquelle ?


1 2