Probleme de requete d'insertion php

Résolu
Bonjour,
j'ai ce code en php
<?php
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$fonction=$_POST['fonction'];
$mail=$_POST['adresse_email'];
$tel=$_POST['tel'];
$pw=$_POST['pw'];
$c=mysql_pconnect("localhost","root","");
$db=mysql_select_db("info leader");
$rsql="select max(num) from client";
$res=mysql_query($rsql);
$cod=mysql_fetch_object($res);
$cod++;
settype($nom,"string");
settype($prenom,"string");
//settype($fonction,"string");
settype($mail,"string");
settype($tel,"string");
settype($pw,"string");
$rsql="INSERT INTO client (num, nom, prenom, mail, tel, password, fonction) VALUES ($cod, $nom, $prenom, s$mail, $tel, $pw, $fonction)";
$res=mysql_query($rsql);

?>

il m'indique qu'il y a une erreur dans la requete d'insertion
Configuration: Windows XP
Firefox 3.0.3

20 réponses

Résumé de la discussion

Problème central : un script PHP tente d'insérer des données dans une table MySQL mais la requête échoue à cause d'un assemblage des valeurs et d'un traitement des résultats inadapté. Plusieurs réponses pointent des erreurs de récupération du dernier identifiant et de l'assemblage des variables dans la requête, préconisant une récupération fiable du numéro et des quotes adéquates. D'autres propositions suggèrent d'utiliser une requête INSERT avec des guillemets et des valeurs entre apostrophes, ou d'ajuster le champ mot de passe et les envois du formulaire. En pratique, les échanges montrent aussi l'importance de vérifier que les données envoyées correspondent bien à la structure attendue et de valider les noms de champs côté client et serveur.

Bobot (l’IA à votre service)
  1. Sur tes POST mets des addslashes déjà ca peut aider.
    Puis sinon bin fais un echo de ta requete et exécute la dans phpMyAdmin, t'aura un message + explicite.
    1. $rsql="INSERT INTO client (num, nom, prenom, mail, tel, password, fonction) VALUES ($cod, $nom, $prenom, s$mail, $tel, $pw, $fonction)";

      il y a pas un petit s en trop ici juste avant le $mail?? ;)
      1. ben plutot remplace ta ligne de mysql_query par

        $res=mysql_query($rsql) or die(mysql_error());
        1. Bonjour,

          Essai avec des guillemets autour des variables dans VALUE( ), enlève le S devant $Mail
          1. "Essai avec des guillemets autour des variables dans VALUE( ), enlève le S devant $Mail"

            Pas des guillemets, mais des apostrophes
        2. voici l'erreur qu'il m'affiche
          Catchable fatal error: Object of class stdClass could not be converted to string et il m'indique au requete d'insertion c'est vrai j'ai ajouter un s devant $mail mais le même erreur est afficher
          1. c vrmt inormal j'ai utiliser wamp au début il m'a afficher l'erreur que j'ai indiquer au début mais mnt j'ai changer easyphp et il m'a afficher sa

            Notice: Undefined index: nom in C:\Program Files\EasyPHP 2.0b1\www\info leader\verif.php on line 10

            Notice: Undefined index: prenom in C:\Program Files\EasyPHP 2.0b1\www\info leader\verif.php on line 11

            Notice: Undefined index: fonction in C:\Program Files\EasyPHP 2.0b1\www\info leader\verif.php on line 12

            Notice: Undefined index: adresse_email in C:\Program Files\EasyPHP 2.0b1\www\info leader\verif.php on line 13

            Notice: Undefined index: tel in C:\Program Files\EasyPHP 2.0b1\www\info leader\verif.php on line 14

            Notice: Undefined index: pw in C:\Program Files\EasyPHP 2.0b1\www\info leader\verif.php on line 15

            Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\info leader\verif.php on line 20
            Erreur de syntaxe pr�s de ''info leader'.'client' (num, nom, prenom, mail, tel, password, f' � la ligne 1
            1. Ben oui si tes POST n'existent pas ca parait logique que ca marche pas ....
              1. A tu essayer de mettre des echo pour voir si tes variable était iniatiliser correctement ou si elle renvoyait une valeur vide??
                1. il m'affiche rien avec echo
              2. Est ce qu'on pourrait avoir la page qui appelle celle-ci ?
                si les POST n'existent pas ca doit venir de la page précédente
                1. voila le html:
                  <html>
                  <head>
                  <title> inscription </title>

                  <link rel=stylesheet href="css/nivsecmp.css" type="text/css" media=screen>
                  <script src="js/js.js" type="text/javascript"></script>

                  <script>
                  function evalPwd(s)
                  {
                  var cmpx = 0;

                  if (s.length >= 6)
                  {
                  cmpx++;

                  if (s.search("[A-Z]") != -1)
                  {
                  cmpx++;
                  }

                  if (s.search("[0-9]") != -1)
                  {
                  cmpx++;
                  }

                  if (s.length >= 8 || s.search("[\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]") != -1)
                  {
                  cmpx++;
                  }
                  }

                  if (cmpx == 0)
                  {
                  document.getElementById("weak").className = "nrm";
                  document.getElementById("medium").className = "nrm";
                  document.getElementById("strong").className = "nrm";
                  }
                  else if (cmpx == 1)
                  {
                  document.getElementById("weak").className = "red";
                  document.getElementById("medium").className = "nrm";
                  document.getElementById("strong").className = "nrm";
                  }
                  else if (cmpx == 2)
                  {
                  document.getElementById("weak").className = "yellow";
                  document.getElementById("medium").className = "yellow";
                  document.getElementById("strong").className = "nrm";
                  }
                  else
                  {
                  document.getElementById("weak").className = "green";
                  document.getElementById("medium").className = "green";
                  document.getElementById("strong").className = "green";
                  }
                  }
                  //fonction pour vérifier si le numero de teléphone possède des caractère alphabétique
                  function numerique(x)
                  {
                  if(isNaN(x)==true)
                  {
                  alert('Numero de Tel doit etre numérique')

                  }
                  }

                  //fonction d'obliger l'utilisateur à cocher une case de formulaire avant de continuer son inscription

                  function ChangeStatut(inscri)
                  {
                  if(window.document.inscri.terme.checked == true)

                  window.document.inscri.submit.disabled = false

                  else

                  window.document.inscri.submit.disabled = true

                  }

                  //vérification mail
                  function VerifForm(formulaire)
                  {
                  adresse = formulaire.adresse_email.value;
                  var place = adresse.indexOf("@",1);
                  var point = adresse.indexOf(".",place+1);
                  if ((place > -1)&&(adresse.length >2)&&(point > 1))
                  {
                  formulaire.submit();
                  return(true);
                  }
                  else
                  {
                  alert('Entrez une adresse e-mail valide!!');
                  return(false);
                  }
                  }

                  </script>
                  </head>

                  <body background="fond inscription.jpg" leftmargin="50" >

                  <div align="center">
                  <blockquote>  </blockquote>
                  </div>
                  <blockquote><p align="center"><br>
                  <br>
                  </p>
                  </blockquote>
                  <form name="inscri" action="verif.php" methed="get" onSubmit="return(VerifForm(this))">

                  <p align="center"><b><i>Nom * : </i></b>
                  <input name="nom" size=10>
                  <br>
                  <br>
                  <b><b><i>Prénom * : </i></b>
                  <input name="prenom" size=10>
                  <br>
                  <br>
                  <b><i>Fonction :</i></b>
                  <select name="fonction">
                  <option value=0> </option>
                  <option value=1>Etudiant </option>
                  <option value=2>Employé </option>
                  </select>
                  </b></p>
                  <p align="center"><b>e-mail:
                  <label>
                  <input type="text" name="adresse_email" id="mail" >
                  </label>
                  <label></label>
                  <br>
                  <br>
                  <b><i>Téléphone : </i></b>
                  <label>
                  <input type="text" name="tel" id="tel" onBlur="numerique(this.value)">
                  </label>
                  <br>
                  <br>
                  <i>Mot de passe * :</i></b>
                  <input name="pw" type=password onKeyUp="evalPwd(pw.value);" size=10 maxlength=8>
                  </p>
                  <p align="left"> Niveau de sécurité de votre mot de passe : </p>
                  <div id="sm">

                  <div align="center">
                  <ul>
                  <li id="weak" class="nrm">Faible</li>
                  <li id="medium" class="nrm">Moyen</li>
                  <li id="strong" class="nrm">Fort</li>
                  </ul>
                  </div>
                  </div>
                  <div align="center"><br>
                  <br>
                  <b><i>Lire cela !!!</i></b>
                  <textarea name=motivation cols=100 rows="6" row=100 >
                  La validation de ce formulaire emporte consentement aux Conditions d’Utilisation du Service ainsi qu’à notre centre!
                  Données personnelles, qui précise les modalités du droit d’accès et de rectification dont vous bénéficiez.
                  La validation de ce formulaire emporte également consentement à la collecte, au stockage et à l’utilisation des informations figurant sur ce formulaire.
                  </textarea>
                  <br>
                  <br>
                  <input type="checkbox" name="terme" value="confirm" onClick="ChangeStatut(inscri)" >
                  <i>J’ai lu et approuvé les Conditions d’utilisation de ce Compte</i>

                  <br>
                  <br>
                  <input type=submit name="submit" value=Envoyer disabled />
                  <input type=reset name="reset" value=Effacer>
                  <br>
                  </div>
                  </form>
                  </body>
                  </html>
                2. @houba80et voici le php:

                  <?php
                  $nom=$_GET['nom'];
                  $prenom=$_GET['prenom'];
                  $fonction=$_GET['fonction'];
                  $mail=$_GET['adresse_email'];
                  $tel=$_GET['tel'];
                  $pw=$_GET['pw'];
                  //echo $nom. "<br>";
                  //echo $prenom. "<br>";
                  //echo $fonction. "<br>";
                  //echo $mail. "<br>";
                  //echo $tem. "<br>";
                  //echo $pw. "<br>";
                  $c=mysql_pconnect("localhost","root","");
                  $db=mysql_select_db("info leader");
                  $rsql="select max(num) from client";
                  $res=mysql_query($rsql);
                  $cod=mysql_fetch_object($res);
                  $cod++;
                  settype($nom,"string");
                  settype($prenom,"string");
                  settype($fonction,"string");
                  settype($mail,"string");
                  settype($tel,"string");
                  settype($pw,"string");
                  $rsql = "insert into client values($cod,$nom,$prenom,$mail,$tel,$password,$fonction)";
                  $res=mysql_query($rsql) or die(mysql_error());
                  if($res)
                  echo "bravo";
                  else
                  echo "pas encore";
                  ?>
              3. <form name="inscri" action="verif.php" methed="get" onSubmit="return(VerifForm(this))">

                Ici ce n'est pas methed mais method

                essaye pour voir ;)

                1. le même probleme REQUETE D'INSERTION
              4. method="post" pas get !

                ha non dsl javais pas vu que tavais modifier ta page de traitement aussi XD
                1. "Le même probleme REQUETE D'INSERTION"

                  Heu ca taffiche une erreur ?
                  laquelle ?
                  1. Catchable fatal error: Object of class stdClass could not be converted to string
                2. Heu tes erreurs viennent de tes settype

                  ils ne servent à rien, par contre il faut que tu mettes des ' autour des tes values lors de l'insert :

                  $rsql = "insert into client values('$cod','$nom','$prenom','$mail','$tel','$password','$fonction')";
                  1. même probleme
                3. Ha je viens de voir ca :

                  $res=mysql_query($rsql);
                  $cod=mysql_fetch_object($res);
                  $cod++;

                  remplace plutot par

                  $res=mysql_query($rsql);
                  $ligne=mysql_fetch_array($res);
                  $cod=$ligne[0];
                  $cod++;
                  1. wé c cool merci amigo
                  2. mais il me reste le champ pw c toujours vide
                4. Tout les donnee a ajouter sont elle de type texte??? sa pourrait être une des erreurs

                  essaye ta formule comme ceci:

                  $rsql = "insert into client values('" . $cod . "','" . $nom . "','" . $prenom . "','" . $mail . "','" . $tel . "','" . $password . "','" . $fonction . "')";
                  1. oui ils sont tout de type texte
                    j'ai essayer ta requete mais sa va pas marcher
                5. Pourquoi tjrs le même message d'erreur??

                  fait un echo de ta requète et copie nous ce qu'il en ressort svp sa sera plus simple pour voir le problème
                  1. $rsql = "insert into client values('$cod','$nom','$prenom','$mail','$tel','$pw','$fonction')";
                    1. wé c vrai je l'ai nommé $pw
                    2. j'ai une autre chose si sa te dérange pas
                      je veu afficher le contenu de mon listbox pas le numero de l'index
                  2. Alors faut que tu modifies les "value" des options de ton select dans ton formulaire, parce que cest ca qui est envoyé, et pas le texte qui est compris entre les balises "<option>" et "</option>"