Probleme Formulaire PHP/HTML important SVP
Résolu/Fermé
BoyDkr81
Messages postés
32
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
7 août 2008
-
5 mai 2008 à 11:45
BoyDkr81 Messages postés 32 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 7 août 2008 - 6 mai 2008 à 10:35
BoyDkr81 Messages postés 32 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 7 août 2008 - 6 mai 2008 à 10:35
A voir également:
- Probleme Formulaire PHP/HTML important SVP
- Formulaire de réclamation facebook - Guide
- Editeur html - Télécharger - HTML
- Easy php - Télécharger - Divers Web & Internet
- Espace en html - Astuces et Solutions
- &Nbsp html ✓ - Forum Webmastering
2 réponses
Tiller
Messages postés
781
Date d'inscription
mercredi 4 juillet 2007
Statut
Membre
Dernière intervention
14 septembre 2008
211
5 mai 2008 à 12:56
5 mai 2008 à 12:56
$NombreEnregistrement = mysql_numrows($resultat); if ($Nombre_Enregistrement
Il manque un "_" à la variable.
Kcazer
Messages postés
26
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
13 août 2008
21
5 mai 2008 à 14:44
5 mai 2008 à 14:44
Salut,
Le fait d'utiliser SELECT COUNT(*) dans ta requete lui fait retourner le nombre d'enregistrement correspondant, seulement quand tu utilises mysql_numrows($resultat); ça te retourne le nombre de resultats de la requete.
Or ici, il y a et n'y aura toujours qu'un seul et unique resultat : le nombre de ligne correspondante, ce qui explique pourquoi tu obtiens toujours 1.
Deux solutions sont possible:
_ Utiliser * a la place de COUNT(*), afin d'obtenir tous les resultats et de pouvoir les compter avec mysql_num_row.
_ Conserver COUNT(*), et recuperer le resultat à l'aide de mysql_fetch_row($resultat).
La seconde solution est la meilleure dans le cas ou tu as juste besoin de verifier la presence du nom dans la bdd, par contre si tu as besoin de recuperer d'autres infos sur l'utilisateur, mieux vaut utiliser la 1ere.
Et un petit qque chose pour la securité de la requete, histoire d'eviter les injections sql ;)
Le fait d'utiliser SELECT COUNT(*) dans ta requete lui fait retourner le nombre d'enregistrement correspondant, seulement quand tu utilises mysql_numrows($resultat); ça te retourne le nombre de resultats de la requete.
Or ici, il y a et n'y aura toujours qu'un seul et unique resultat : le nombre de ligne correspondante, ce qui explique pourquoi tu obtiens toujours 1.
Deux solutions sont possible:
_ Utiliser * a la place de COUNT(*), afin d'obtenir tous les resultats et de pouvoir les compter avec mysql_num_row.
_ Conserver COUNT(*), et recuperer le resultat à l'aide de mysql_fetch_row($resultat).
La seconde solution est la meilleure dans le cas ou tu as juste besoin de verifier la presence du nom dans la bdd, par contre si tu as besoin de recuperer d'autres infos sur l'utilisateur, mieux vaut utiliser la 1ere.
Et un petit qque chose pour la securité de la requete, histoire d'eviter les injections sql ;)
$req = sprintf('SELECT COUNT(*) ID_Salarie FROM salarie WHERE Nom_Salarie = '%s' AND Prenom_Salarie = '%s', mysql_real_escape_string($Nom_salarie),mysql_real_escape_string($Prenom_salarie)); $resultat = mysql_query($req)
BoyDkr81
Messages postés
32
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
7 août 2008
5 mai 2008 à 15:04
5 mai 2008 à 15:04
J'ai donc testé les deux solutions:
-avec COUNT(*) et mysql_fetch_row() si je fais un echo($NombreEnregistrement) il m'affiche "Array" et j'ai toujours le meme probleme c-a-d qu'il m'affiche que le salarié existe même s'il n'est pas dans la base.
-avec * et mysql_num_row() il m'affiche "Cannot run query" (qui doit s'afficher si la requete ne s'effectue pas if(!$resultat) echo etc...) et ce dans les deux cas si le salarié existe dans la base et s'il n'existe pas.
Alors je n'y comprend plus rien.
Je n'ai pas trop compris ta requete concernant les injections sql. Je l'ai testé quand même, mais cela me renvoi "Warning: sprintf(): Too few arguments...".
Merci pour ton aide.
-avec COUNT(*) et mysql_fetch_row() si je fais un echo($NombreEnregistrement) il m'affiche "Array" et j'ai toujours le meme probleme c-a-d qu'il m'affiche que le salarié existe même s'il n'est pas dans la base.
-avec * et mysql_num_row() il m'affiche "Cannot run query" (qui doit s'afficher si la requete ne s'effectue pas if(!$resultat) echo etc...) et ce dans les deux cas si le salarié existe dans la base et s'il n'existe pas.
Alors je n'y comprend plus rien.
Je n'ai pas trop compris ta requete concernant les injections sql. Je l'ai testé quand même, mais cela me renvoi "Warning: sprintf(): Too few arguments...".
Merci pour ton aide.
Kcazer
Messages postés
26
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
13 août 2008
21
>
BoyDkr81
Messages postés
32
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
7 août 2008
5 mai 2008 à 15:26
5 mai 2008 à 15:26
Pour la premiere solution, $NombreEnregistrement contient un tableau qui contient lui meme le nombre d'enregistrement, donc il faut utiliser $NombreEnregistrement[0] pour avoir la valeur correcte.
Pour la seconde solution, je ne vois pas trop d'ou peux provenir l'erreur, sans doute une erreur dans la requete elle meme ( 'SELECT * FROM ....' ), essaie de changer ton code de verification de la requete (juste pour le debugage) par ce qui suit, histoire de detecter d'ou vient l'erreur.
Enfin pour le petit bonus sur les injections sql, c'est juste une mesure de securité pour eviter que les personnes utilisant le formulaire ne puisse detourner des informations, en entrant des données erronées dans la recherche.
Pour la seconde solution, je ne vois pas trop d'ou peux provenir l'erreur, sans doute une erreur dans la requete elle meme ( 'SELECT * FROM ....' ), essaie de changer ton code de verification de la requete (juste pour le debugage) par ce qui suit, histoire de detecter d'ou vient l'erreur.
if(!$resultat) { echo '<CENTER><B>Cannot run query:</B>'.mysql_error().'</CENTER>'; exit(); }
Enfin pour le petit bonus sur les injections sql, c'est juste une mesure de securité pour eviter que les personnes utilisant le formulaire ne puisse detourner des informations, en entrant des données erronées dans la recherche.
BoyDkr81
Messages postés
32
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
7 août 2008
>
Kcazer
Messages postés
26
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
13 août 2008
5 mai 2008 à 15:46
5 mai 2008 à 15:46
J'ai testé avec le debuggage et cela m'affiche
Cannot run query:Erreur de syntaxe près de 'ID_Salarie FROM salarie WHERE Nom_Sa' à la ligne 1
Concernant $NombreEnregistrement[0] tu le mets à quel niveau?
-Je l'ai testé en le mettant dans la boucle if:
if ($NombreEnregistrement[0] > 0) ce qui me donne le salarié n'existe pas dans tous les cas.
-Dans le echo($NombreEnregistrement[0]) ce qui me donne 0 pour tous les cas aussi
_Si je le met dans $NombreEnregistrement[0] = mysql_fetch_row($resultat); et je fais un echo il me renvoi 0 aussi pour tous les cas.
Cannot run query:Erreur de syntaxe près de 'ID_Salarie FROM salarie WHERE Nom_Sa' à la ligne 1
Concernant $NombreEnregistrement[0] tu le mets à quel niveau?
-Je l'ai testé en le mettant dans la boucle if:
if ($NombreEnregistrement[0] > 0) ce qui me donne le salarié n'existe pas dans tous les cas.
-Dans le echo($NombreEnregistrement[0]) ce qui me donne 0 pour tous les cas aussi
_Si je le met dans $NombreEnregistrement[0] = mysql_fetch_row($resultat); et je fais un echo il me renvoi 0 aussi pour tous les cas.
BoyDkr81
Messages postés
32
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
7 août 2008
>
Kcazer
Messages postés
26
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
13 août 2008
5 mai 2008 à 15:54
5 mai 2008 à 15:54
Est ce que le problème ne viendrait pas du fait que dans la page de suppression.html j'ai forcé l'écriture en majuscule du Nom "<INPUT type="text" name="Nom_Salarie" style="text-transform: uppercase">" car lorsqu'un salarié est enregistré à partir du formulaire, la saisie du nom est aussi forcé en majuscule donc son nom est en majuscule dans la base. Or dans mon script php de vérification si le salarié existe je ne le précise nulle part.
Kcazer
Messages postés
26
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
13 août 2008
21
>
BoyDkr81
Messages postés
32
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
7 août 2008
5 mai 2008 à 16:07
5 mai 2008 à 16:07
Non normalement aucun probleme, le style est juste visuel, aucune transformation n'est normalement faite, de plus mysql ne devrait pas tenir compte de la casse.
Je viens de trouver d'ou vient le probleme, c'est la requete sql elle meme, utilise ce code et tout devrait fonctionner (aux fautes de frappe prés)
Tu avais utilisé "SELECT COUNT(*) ID_Salarie FROM...." ce qui n'est pas valide, il aurait fallu utiliser "SELECT COUNT(*) FROM ..." ou "SELECT COUNT(ID_Salarie) FROM ...."
Maintenant ça devrait etre bon ;)
Je viens de trouver d'ou vient le probleme, c'est la requete sql elle meme, utilise ce code et tout devrait fonctionner (aux fautes de frappe prés)
<?php $Nom_Salarie=$_POST['Nom_Salarie']; $Prenom_Salarie=$_POST['Prenom_Salarie']; ?> <B><CENTER>Veuillez Identifier le Salarié à Supprimer.</CENTER></B><BR> <FORM action="suppression_salarie.php" method="post"> <TABLE border="1"align="center"> <tr> <th>Nom</th> <td> <INPUT type="text" name="Nom_Salarie" style="text-transform: uppercase"> <td> </tr> <tr> <th>Prénom</th> <td> <INPUT type="text" name="Prenom_Salarie"> </td> </tr> </TABLE><BR /><BR /> <CENTER><INPUT type=submit value="Valider"> </FORM> <?php $Nom_Salarie = trim($_POST['Nom_Salarie']); $Prenom_Salarie= trim($_POST['Prenom_Salarie']); if (!$Nom_Salarie || !$Prenom_Salarie) { echo'<CENTER><B>Vous n\'avez pas renseigné les champs</B></CENTER>'; exit; } //Connection a la BD mysql_connect("localhost","root") or die ("Impossible de se connecter à la base de données."); mysql_select_db("asm") or die("Impossible de se connecter à la base de données."); // creation de la requete $sql = sprintf("SELECT * FROM salarie WHERE Nom_Salarie = '%s' AND Prenom_Salarie = '%s'", mysql_real_escape_string($Nom_Salarie), mysql_real_escape_string($Prenom_Salarie)); $resultat = mysql_query($sql); // En cas d'erreur if ($resultat === false) { echo '<CENTER><B>Cannot run query:</B>'..mysql_error().'</CENTER>'; exit; } // Si pas d'erreur, on recup les données $NombreEnregistrement = mysql_num_rows($resultat); // Verification if ($Nombre_Enregistrement > 0) { echo '<CENTER><B>Il existe bien un tel salarié.</B><BR /><BR /> <B>Etes-vous sure de vouloir le supprimer?</B> </CENTER>'; } else { echo '<CENTER><B>Le Salarié n\'existe pas!</B></CENTER>'; } ?>
Tu avais utilisé "SELECT COUNT(*) ID_Salarie FROM...." ce qui n'est pas valide, il aurait fallu utiliser "SELECT COUNT(*) FROM ..." ou "SELECT COUNT(ID_Salarie) FROM ...."
Maintenant ça devrait etre bon ;)
5 mai 2008 à 14:19