Probléme avec mysql_affected_rows

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
Configuration: Windows XP
Firefox 3.0.11

8 réponses

  1. 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';
    }
    
    ?>
    1. enfin j'ai pas compris ou est le probléme
      et comment procéder pour avoir un message pour confirmer l'insertion .
      1. 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.
        1. if ($res) tout court fait la même chose avec 1 qu'avec -1,

          $res renvoi bien false si ça marche pas non ?
          1. 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
            1. 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");
              
              1. 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"