Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 12/02/2011, 10h53   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 206
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 206
Points : 52
Points : 52
Par défaut Vérifications validité d'un formulaire et insertion dans une bdd

Bonjour,

Avant l'insertion de données dans une base Mysql, je vérifie qu'un champ input :

1) ne contient pas une saisie qui correspond à un enregistrement déjà présent dans la base (via une requête SELECT et la fonction mysql_num_rows)

2) n'est pas vide pour éviter l'insertion des données vides dans la base (via la fonction empty)

3) contient une saisie dont le formatage est conforme à celui attendu : en l'occurrence saisie du nom et prénom d'un contributeur sous la forme nom, prénom (délimitateur virgule + espace : utilisation d'explode et de la fonction count)

Si les 3 conditions sont remplies, j'insère dans ma base la donnée saisie dans le champ imput. Le code que j'utilise :

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
57
58
59
60
61
62
63
64
65
66
67
68
69
 
 
<form action="" method="POST" onsubmit="valid5();" >
 
<p>
 
<br />
<input type="text" name="text5" id="text5" />
<br />
 
<?php
 
if(isSet($_POST["ajouter"])) {
 
 $text5=trim(mysql_real_escape_string($_POST['text5']));				
 $text5 = explode(", ", $text5); 
 
 if(is_array($text5) && isset($text5[1])) {// sinon affiche l'erreur Undefined offset: 1
 $sql = mysql_query("SELECT nom_contributeur,prenom_contributeur  FROM contributeurs WHERE nom_contributeur ='$text5[0]'and prenom_contributeur='$text5[1]' ");
 
if(mysql_num_rows($sql) >=1)
{
echo 'le contributeur existe déjà <br/>';
 
 
}
}
 
elseif  (empty ($_POST['text5'])) {			
	echo "Le champ nouveau contributeur est obligatoire <br/>";  
 	} 
 
 
elseif 	(count($text5)<2) {// le format attendu de la saisie suppose 2 éléments : nom et prénom. Donc si moins de 2 éléments : saisie incorrecte
 
	echo"format saisie incorrecte";
	}
 
 
 
else {
// requete pour chercher le prochain identifiant contributeur => utile pour traitement javascript
$requete="SELECT MAX(id_contributeur) AS nb5 FROM contributeurs WHERE id_contributeur IN (SELECT id_contributeur FROM contributeurs) ;";
			$result=mysql_query($requete,$db);
			$ligne=mysql_fetch_array($result);
			$value5 = $ligne['nb5'];
			$value5 = $value5 + 1;
 
	echo '<input type="hidden" name="value5" id="value5" value="'.$value5.'"  />';		
 
echo $value5;//debug : ne s'affiche pas
 
    $add5 = sprintf('INSERT INTO contributeurs (nom_contributeur,prenom_contributeur) VALUES ("'.ucfirst($text5[0]).'", "'.ucfirst($text5[1]).'")'); 
 // requête ne se s'effectue pas
    $result = mysql_query($add5, $db) or die(mysql_error());
 
?>
<script type="text/javascript">
 self.close(); 
</script>
<?php
}
 
} 
 
?>
<input type="submit" name="ajouter" value="Ajouter" />			
</p>
</form>
Ce code fonctionne partiellement : j'ai bien l'affichage de l'un des 3 messages d'erreur si la condition correspondante n'est pas remplie.
Mais si la saisie est correcte (ne correspond pas à un enregistrement existant, non vide et correctement formatée), ma requête ne s'effectue pas ni d'ailleurs l'envoi du champ input type="hidden" "value5".
Voyez-vous comment modifier mon code pour y arriver ? Merci.
almoha est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 11h47   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Il faut que tu debug.
Par exemple tu dis que le champs hidden n'est pas envoyé, mais est-ce qu'il est bien mis ? est-ce que tu rentres dans ton else ? est-ce que ta requête retourne des erreurs ? etc.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h01   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 206
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 206
Points : 52
Points : 52
J'ai testé en faisant un echo $value5 pour voir si la value du champ caché s'affichait après avoir soumis le formulaire : rien ne s'affiche (d'ailleurs en consultant le code source généré, je ne vois pas le champ hidden).
J'ai testé en faisant un echo de la requête $add5 : rien ne s'affiche non plus (pas d'erreur retournée non plus).

Je ne semble donc pas rentrer dans le else... mais je ne vois comment modifier mon code pour y parvenir. Je suis preneur d'une aide supplémentaire. Merci.
almoha est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h39   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Revoit la logique de ton code : ton premier if teste si le champ est correctement rempli ; donc si c'est le cas, tu n'iras jamais dans le else ou est l'insertion.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h56   #5
Membre du Club
 
Sebastien
Inscription : janvier 2011
Messages : 76
Détails du profil
Informations personnelles :
Nom : Sebastien

Informations forums :
Inscription : janvier 2011
Messages : 76
Points : 50
Points : 50
Bonjour,

Mettre un code javascript pour vérifier que chaques champs ne serai pas plus judicieux ?
kirua99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 15h57   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
L'un n'empêche pas l'autre et utiliser uniquement du javascript c'est un peu léger.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 17h58   #7
Invité régulier
 
Inscription : juin 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 9
Points : 6
Points : 6
Bonjour,
Je ne sais pas pour le moment si ce que je viens de voir dans ton code est en rapport avec la solution recherchée, mais la ligne n° 11 me paraît suspecte : tu y écris les variables par leur nom au lieu de leur valeur. Celle-ci devrait être concaténée dans ta requête SELECT mais pas intégrée dedans :

[B]ta phrase :
Code :
$sql = mysql_query("SELECT nom_contributeur,prenom_contributeur  FROM contributeurs WHERE nom_contributeur ='$text5[0]'and prenom_contributeur='$text5[1]' ");
ma proposition :
Code :
1
2
$sql = mysql_query("SELECT nom_contributeur,prenom_contributeur  FROM contributeurs WHERE nom_contributeur ='".$text5[0]."'
and prenom_contributeur='".$text5[1]."'");
J'espère que cette réponse t'aidera.
kiza44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h59.


 
 
 
 
Partenaires

Hébergement Web