Probléme avec mysql_affected_rows

Fermé
Utilisateur anonyme - 15 juin 2009 à 15:02
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 16 juin 2009 à 10:31
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

8 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 juin 2009 à 15:43
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:

$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"
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 juin 2009 à 15:45
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");
0
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
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 juin 2009 à 16:19
if ($res) tout court fait la même chose avec 1 qu'avec -1,

$res renvoi bien false si ça marche pas non ?
0

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.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 juin 2009 à 17:23
pas de problème et salut à toi "le père"

@lain
0
Utilisateur anonyme
16 juin 2009 à 01:13
enfin j'ai pas compris ou est le probléme
et comment procéder pour avoir un message pour confirmer l'insertion .
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 juin 2009 à 10:31
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é:

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

?>
0