Probléme avec mysql_affected_rows

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

8 réponses

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  3. le père
     
    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
  4. Alain_42 Messages postés 5413 Statut Membre 904
     
    if ($res) tout court fait la même chose avec 1 qu'avec -1,

    $res renvoi bien false si ça marche pas non ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. le père
     
    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
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    pas de problème et salut à toi "le père"

    @lain
    0
  8. heeedi
     
    enfin j'ai pas compris ou est le probléme
    et comment procéder pour avoir un message pour confirmer l'insertion .
    0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    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