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
Bonjour,

J'ai un petit soucis concernant la gestion d'un formulaire d'inscription de salarié.
J'ai donc un formulaire d'inscription que l'on rempli et qui après validation permet l'enregistrement des données dans la base. Jusque la tout va bien.
Puis lorsque je dois faire une suppression d'un salarié on renseigne le nom et prénom du salarié dans suppression_salarie.html (voir le script)

<?
$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>

après avoir cliqué sur "Valider" on est renvoyé sur suppression_salarie.php.

<?
$Nom_Salarie=$_POST['Nom_Salarie'];
$Prenom_Salarie=$_POST['Prenom_Salarie'];

$Nom_Salarie = trim($Nom_Salarie);
$Prenom_Salarie = trim($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.");
$resultat = mysql_query("SELECT COUNT(*) ID_Salarie FROM salarie
WHERE Nom_Salarie = '$Nom_Salarie'
AND Prenom_Salarie = '$Prenom_Salarie'");

if(!$resultat)
{
echo '<CENTER><B>Cannot run query</B></CENTER>';
exit;
}

$NombreEnregistrement = mysql_numrows($resultat);

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>';
}
?>

Or le soucis que j'ai, c'est lorsque je renseigne un salarié il me renvoi bien "le salarié existe" mais dans le cas contraire c'est à dire que le salarié n'existe pas il me renvoi quand même "le salarié existe". Et si je fais un echo ($resultat);
j'ai tjs Ressource ID#3. Meme si je fais un echo($NombreEnregistrement); il me renvoi 1 si le salarié existe et s'il n'existe pas aussi. J'ai essayé toutes les methodes mysql_fetch_array, mysql_fetch_row, mysql_fetch_object rien ne fonctionne. Je suis vraiment bloqué merci de m'aider rapidement.
A voir également:

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
$NombreEnregistrement = mysql_numrows($resultat);
if ($Nombre_Enregistrement 


Il manque un "_" à la variable.
0
BoyDkr81 Messages postés 32 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 7 août 2008
5 mai 2008 à 14:19
Le problème ne vient pas de la, c'est juste une erreur de frappe.Je l'ai rectifié et malgré ça j'ai tjs le même message affiché comme quoi le salarié existe même si je tape un Nom et Prénom qui n'est pas dans la base.
0
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
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 ;)
$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)
0
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
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.
0
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
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.
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.
0
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
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.
0
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
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.
0
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
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)
<?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 ;)
0