Probléme avec mysql_affected_rows
Utilisateur anonyme
-
Alain_42 Messages postés 5413 Statut Membre -
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,
voici mon code:
Code :
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
include("connexion.php");
$req="insert into client values('$nom','$prenom')" or die ("Select impossible");
mysql_query($req);
$res= mysql_affected_rows();
if($res==1)
{
echo 'enregistrement Ok';
} else {
echo 'pas d'enregistrement';
}
mon probléme c'est que mysql_affected_rows vaut toujours 1 même s'il n ya pas d'insertion
voici mon code:
Code :
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
include("connexion.php");
$req="insert into client values('$nom','$prenom')" or die ("Select impossible");
mysql_query($req);
$res= mysql_affected_rows();
if($res==1)
{
echo 'enregistrement Ok';
} else {
echo 'pas d'enregistrement';
}
mon probléme c'est que mysql_affected_rows vaut toujours 1 même s'il n ya pas d'insertion
8 réponses
mon probléme c'est que mysql_affected_rows vaut toujours 1 même s'il n ya pas d'insertion
il ne peut ne pas y avoir d'insertion que si la requette est fausse hors dans ton cas elle a l'air de fonctionner à tous les coups
il vaudrait mieux proceder ainsi:
De toute façon si ça marche pas tu auras aussi le message d'errerur de mysql "Select impossible"
il ne peut ne pas y avoir d'insertion que si la requette est fausse hors dans ton cas elle a l'air de fonctionner à tous les coups
il vaudrait mieux proceder ainsi:
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
include("connexion.php");
$req="insert into client values('$nom','$prenom')" or die ("Select impossible");
$res=mysql_query($req);
if($res){ //si $res est true
echo 'enregistrement Ok';
} else {
echo 'pas d'enregistrement';
}
De toute façon si ça marche pas tu auras aussi le message d'errerur de mysql "Select impossible"
houp j'ai envoyé trop vite il y a une erreur dans ton code le or die n'est pas au bon endroit il doit être au moment de l'exécution de la requette
$req="insert into client values('$nom','$prenom')" ;
$res=mysql_query($req) or die ("Select impossible");
Bonjour
De plus, il vaut mieux utilise or die (mysql_error()); qui indique la cause précise de l'erreur, alors que "Select impossible" ne veut pas dire grand chose, surtout sur un insert ;)
Re-de plus, il vaut mieux laisser if($res==1) car en cas d'échec, mysql_num_rows rend -1. et if ($res) tout court fait la même chose avec 1 qu'avec -1, ce qui serait dommage.
En fait, à partir du moment où il y a un "or die " sur la requête, ce test supplémentaire est inutile
De plus, il vaut mieux utilise or die (mysql_error()); qui indique la cause précise de l'erreur, alors que "Select impossible" ne veut pas dire grand chose, surtout sur un insert ;)
Re-de plus, il vaut mieux laisser if($res==1) car en cas d'échec, mysql_num_rows rend -1. et if ($res) tout court fait la même chose avec 1 qu'avec -1, ce qui serait dommage.
En fait, à partir du moment où il y a un "or die " sur la requête, ce test supplémentaire est inutile
if ($res) tout court fait la même chose avec 1 qu'avec -1,
$res renvoi bien false si ça marche pas non ?
$res renvoi bien false si ça marche pas non ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tout à fait, pardon. Je n'avais pas remarqué que tu avais fait sauter le mysql_num_rows, qui, lui, rend -1. Du coup, mes remarques (à part le mysql_error()) sont inutiles.
enfin j'ai pas compris ou est le probléme
et comment procéder pour avoir un message pour confirmer l'insertion .
et comment procéder pour avoir un message pour confirmer l'insertion .
le problème est que tel que tu as mis tu n'auras d'une part pas le message d'erreur de mysql en cas de problème avec la requette insertion (or die ...)
et d'autre part au lieu d'utiliser mysql_affected... il suffit d'utiliser le retour de la fonction mysql_query qui est true si la requette s'est passée normalement et false sinon
donc en résumé:
et d'autre part au lieu d'utiliser mysql_affected... il suffit d'utiliser le retour de la fonction mysql_query qui est true si la requette s'est passée normalement et false sinon
donc en résumé:
<?php
$nom=mysql_escape_string($_POST['nom']); //se proteger des attaques par injection mysql
$prenom=mysql_escape_string($_POST['prenom']);
include("connexion.php");
$req="INSERT INTO client VALUES('$nom','$prenom')" ; //les commandes mysql en majuscules c'est plus facile à lire
$res=mysql_query($req) or die ("Pb avec la requette d'insertion : ".mysql_error());//la tu vas avoir le message d'erreur eventuel de mysql avec le détail
if($res){ //si $res le retour de la fonction mysql_query() est true
echo 'enregistrement Ok';
} else {
echo 'pas d\'enregistrement';
}
?>