Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/05/2011, 15h51   #1
Candidat au titre de Membre du Club
 
Homme Stéphane
Inscription : mars 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 39
Points : 13
Points : 13
Par défaut Vérification données saisie dans formulaire

Bonjour,

J'ai créé un formulaire pour stocker des infos dans une table.

Pour commencer, j'ai juste saisi ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php 
if (($_POST["nom"])&&($_POST["prenom"])&&($_POST["mail"]))
 
{ 
$vnom = $_POST["nom"]; 
$vprenom = $_POST["prenom"]; 
$vmail = $_POST["mail"]; 
}
 
else
 
{ 
 
} 
?>
 
 
<HTML>
<H2>M'inscrire</H2>
<HR>
<FORM action="ajouter.php" method="POST">
<TABLE align=center>
<TR>
<TD>Votre nom</TD>
<TD><input type="text" name="nom" size=25></TD>
</TR>
 
<TR>
<TD>Votre prénom</TD>
<TD><input type="text" name="prenom" size=25></TD>
</TR>
<TR>
<TD>Votre adresse mail</TR>
<TD><input type="text" name="mail" size=25></TD>
</TR>
<TR>
<TD>Pseudo</TR>
<TD><input type="text" name="pseudo" size=25></TD>
</TR>
<TR>
<TD>Mot de passe</TD>
<TD><input type="password" name="pass" size=25></TD>
</TR>
<TR>
<TD></TD>
<TD><input type="submit" value="m'inscrire"></TD>
</TR>
</TABLE>
</FORM>
</HTML>
Quand je lance, j'ai ce message d'erreur...

Undefined index: nom in C:\wamp\www\cours\ajouter.php on line 2

Avez vous svp une idée ?

Merci par avance.
smotte761 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 16h30   #2
Membre habitué
 
Avatar de Chen norris
 
Inscription : mai 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 124
Points : 101
Points : 101
Bonjour,

En regardant ton code, ligne 2, tu as ceci :

Code :
if (($_POST["nom"])&&($_POST["prenom"])&&($_POST["mail"]))
(petite note au passage : utilise la balise [ code ] si tu veux voir les numéros de ligne et même avoir la coloration syntaxique ).
Le message d'erreur t'indique un problème d'index. En effet, la première fois que tu affiches ta page, $_POST n'est pas rempli et donc ne contient ni $_POST["nom"], ni $_POST["prenom"], ni même $_POST["mail"]. Il faut donc que tu imbriques tes instructions PHP dans une clause qui vérifie l'existence de tes paramètres. La fonction isset est faite pour cela :

Code :
1
2
3
4
5
if (isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["mail"])) {
    $vnom = $_POST["nom"];
    $vprenom = $_POST["prenom"];
    $vmail = $_POST["mail"];
}
Pour faire encore plus propre et t'assurer d'avoir des variables initialisées, je te conseille cette syntaxe :

Code :
1
2
3
4
 
$vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
$vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
$vmail = isset($_POST["mail"]) ? $_POST["mail"] : "";
Ainsi, tu es sûr que tes variables sont bien initialisées.

En espérant répondre à ton problème.
__________________
Chen norris
C/C++, C#, Java, PHP & SQL coder
Web developer
Chen norris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 16h47   #3
Candidat au titre de Membre du Club
 
Homme Stéphane
Inscription : mars 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 39
Points : 13
Points : 13
Merci pour ta rapide réponse.

J'ai écrit ce code :

Citation:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 
if (isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["mail"]))
 
{
 
 
$vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
$vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
$vmail = isset($_POST["mail"]) ? $_POST["mail"] : "";
 
}
 
else 
 
{
 
	echo "Veuillez remplir tous les champs !";
}
?>
Finalement, je n'ai plus de message d'erreur mais il ne m'affiche pas le message "Veuillez remplir tous les champs" et il me vide tous les champs.

Si tu as une idée. Un grand merci.
smotte761 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 16h54   #4
Membre habitué
 
Avatar de Chen norris
 
Inscription : mai 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 124
Points : 101
Points : 101
Si je décompose ton code actuel :
  1. le programme regarde si $_POST["nom"], $_POST["prenom"] et $_POST["mail"] sont initialisés -> non
  2. il passe donc dans la condition else d'où ton message "Veuillez remplir tous les champs"

Si tu souhaites valider ton formulaire, il faut commencer par récupérer toutes les variables éventuelles initialisées en mettant ce code à part (et surtout pas dans ton if) :

Code :
1
2
3
$vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
$vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
$vmail = isset($_POST["mail"]) ? $_POST["mail"] : "";
Ensuite, si l'un des champs est vide, là tu affiches ton message :

Code :
1
2
3
if($vnom == "" || $vprenom == "" || $vmail == "") {
    echo "Veuillez remplir tous les champs !";
}
Enfin dernière étape : dans ta page, tu remets dans chaque input toutes les valeurs que tu as éventuellement saisies :

Code :
1
2
3
4
5
6
7
8
<TD>Votre nom</TD>
<TD><input type="text" name="nom" size=25 value="<?php echo $vnom;?>"></TD>
...
<TD>Votre nom</TD>
<TD><input type="text" name="prenom" size=25 value="<?php echo $vprenom;?>"></TD>
...
<TD>Votre nom</TD>
<TD><input type="text" name="mail" size=25 value="<?php echo $vmail;?>"></TD>
__________________
Chen norris
C/C++, C#, Java, PHP & SQL coder
Web developer
Chen norris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 17h06   #5
Candidat au titre de Membre du Club
 
Homme Stéphane
Inscription : mars 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 39
Points : 13
Points : 13
Un grand merci. Je galère depuis un bon moment et ca marche !
La seule chose c'est que lorsque je lance pour la première fois le formulaire, j'ai déjà le message qui affiche "Veuillez remplir tous les champs" mais le reste fonctionne... Merci.
smotte761 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 17h13   #6
Membre habitué
 
Avatar de Chen norris
 
Inscription : mai 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 124
Points : 101
Points : 101
Pour résoudre ce dernier souci, tu peux utiliser une variable cachée qui te permettra de savoir s'il s'agit de la première fois que tu lances ou non ton formulaire.
Dans ton code HTML, tu rajoutes une variable cachée :
Code :
<input type="hidden" name="premierChargement" value="<?php echo premierChargement; ?>" />
Et dans ton code PHP, tu rajoutes un test sur cette variable :
Code :
1
2
3
4
5
6
7
8
9
 
$premierChargement = (isset($_POST["premierChargement"]) ? $_POST["premierChargement"] : "");
 
...
 
if (!$premierChargement && ($vnom == "" || $vprenom == "" || $vmail == "")) {
    echo "Veuillez remplir tous les champs !";
}
$premierChargement = "une_valeur_bidon_tant_quelle_est_non_nulle";
(note : ligne 6 ci-dessus = la condition if que je t'avais déjà donnée avant, mais avec une vérification supplémentaire sur $premierChargement)

N'oublie pas le bouton Résolu une fois ton problème réglé
__________________
Chen norris
C/C++, C#, Java, PHP & SQL coder
Web developer
Chen norris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 17h30   #7
Candidat au titre de Membre du Club
 
Homme Stéphane
Inscription : mars 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 39
Points : 13
Points : 13
Merci pour l'info.

J'ai testé mais lorsque je lance la première fois le formulaire il me marque toujours le message et si je saisie par exemple que le nom le message "Tout les champs sont obligatoire" disparait...

En gros cela fait l'inverse de ce que je veux...

Je dois avoir une coquille quelque part...

Citation:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php 
 
$premierChargement = (isset($_POST["premierChargement"]) ? $_POST["premierChargement"] : "");
 
$vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
$vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
$vmail = isset($_POST["mail"]) ? $_POST["mail"] : ""; 
 
 
if  (!$premierChargement && ($vnom == "" || $vprenom == "" || $vmail == "")) {
    echo "Veuillez remplir tous les champs !";
}
 
 
$premierChargement = "test"; 
 
 
?>
 
 
<HTML>
<H2>M'inscrire</H2>
<HR>
<FORM action="ajouter.php" method="POST">
<TABLE align=center>
<TR>
<TD>Votre nom</TD>
<TD><input type="text" name="nom" size=25 value="<?php echo $vnom;?>"></TD>
</TR>
 
<TR>
<TD>Votre prénom</TD>
<TD><input type="text" name="prenom" size=25 value="<?php echo $vprenom;?>"></TD>
</TR>
<TR>
<TD>Votre adresse mail</TR>
<TD><input type="text" name="mail" size=25  value="<?php echo $vmail;?>"></TD>
</TR>
<TR>
<TD>Pseudo</TR>
<TD><input type="text" name="pseudo" size=25></TD>
</TR>
<TR>
<TD>Mot de passe</TD>
<TD><input type="password" name="pass" size=25></TD>
</TR>
<TR>
<input type="hidden" name="premierChargement" value="<?php echo $premierChargement; ?>" />
<TD></TD>
<TD><input type="submit" value="m'inscrire"></TD>
 
 
</TR>
</TABLE>
</FORM>
</HTML>
smotte761 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 17h34   #8
Membre habitué
 
Avatar de Chen norris
 
Inscription : mai 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 124
Points : 101
Points : 101
Oups, au temps pour moi, il s'agit d'une erreur sur le test de la variable $premierChargement. La bonne condition est :

Code :
1
2
3
if ($premierChargement != "" && ($vnom == "" || $vprenom == "" || $vmail == "")) {
    echo "Veuillez remplir tous les champs !";
}
Cette fois, ça devrait être bon.
__________________
Chen norris
C/C++, C#, Java, PHP & SQL coder
Web developer
Chen norris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 18h56   #9
Candidat au titre de Membre du Club
 
Homme Stéphane
Inscription : mars 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 39
Points : 13
Points : 13
Un grand merci. Tout fonctionne parfaitement bien.

Merci pour toutes tes explications précises et pro.
smotte761 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h21.


 
 
 
 
Partenaires

Hébergement Web