Requête Sql avec variable PHP

Requête Sql avec variable PHP - PHP - Programmation

Marsh Posté le 17-06-2008 à 12:54:36    

Bonjours j'ai un souci que je n'arrive pas à déterminé, voilà le code php la ligne 79 pose probléme :

Code :
  1. <html>
  2. <body>
  3. <?php
  4.  //Connexion au serveur MySQL
  5.   $db=mysql_connect("localhost","root" ) or die("erreur de connexion".msql_error());
  6.   //Ouverture de la base microrezo
  7.   mysql_select_db("microrezo",$db) or die("erreur de connexion à la base microrezo" );
  8.  $msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis : <br/><br/>";
  9.  $msg_ok = "L'enregistrement à bien été effectué.";
  10.  $message = $msg_erreur;
  11.  // Interdiction des champs vide
  12.  if (empty($_POST['nomclient']))
  13.      $message .= "Le nom client<br/>";
  14.  if (empty($_POST['telclient']))
  15.   $message .= "Le numéro de téléphone<br/>";
  16.  if (empty($_POST['type']))
  17.   $message .= "Le type d'ordinateur<br/>";
  18.  if (empty($_POST['test']))
  19.   $message .="Les tests prévu pour la machine<br/>";
  20.  if (empty($_POST['descpanne']))
  21.   $message .="La description du/des probléme<br/>";
  22.  // Mise en place du message d'erreur
  23.  if (strlen($message) > strlen($msg_erreur)) {
  24.   echo $message;
  25.      $code_erreur = 1;
  26.  }
  27.  $nomclient = $_POST['nomclient'];
  28.  $telclient = $_POST['telclient'];
  29.  $type = $_POST['type'];
  30.  $date_entree = date("d-m-y" );
  31.  $descpanne = $_POST['descpanne'];
  32.  $test = $_POST['test'];
  33.  $sqltest = '' ;
  34.  for ($i=0; $i<count($test); $i++) {
  35.  $sqltest .= $test[$i];
  36.  $sqltest .= ', ';
  37.  }
  38.  //Je met une virgule en chaque valeur.
  39.  $access =$_POST['access'];
  40.  $sqlaccess = '';
  41.  for ($u=0; $u<count($access); $u++) {
  42.  $sqlaccess .= $access[$u];
  43.  $sqlaccess .= ', ';
  44.  }
  45.  $tache_prevu = $sqltest ;
  46.  $tache_effectue = "Aucune" ;
  47.  //Mise en place de limite de caractére  sur les champs 'nomclient','telclient','test'
  48.  $msg_longueur = "Erreur les champs suivants contiennent pose probléme : <br/><br>";
  49.  $msg = $msg_longueur;
  50.  if (strlen($nomclient) > 15 )
  51.   $msg .= "Le nom client ne doit pas contenir plus de 15 caractéres<br/>";
  52.  if (strlen($telclient) < 10)
  53.      $msg .= "Le numéro de téléphone doit contenir au minimum 10 chiffres.<br/>";
  54.  if (strlen($telclient) > 10)
  55.      $msg .= "Le numéro de téléphone doit contenir au maximum 10 chiffres.<br/>";
  56.  if (is_numeric($teclient) == "false" )
  57.      $msg .= "Le numéro de téléphone ne dois contenir que des chiffres.<br/>";
  58.  if (strlen($descpanne) > 500)
  59.   $msg .= "La description de la panne ne doit pas contenir plus de 500 caractéres.<br/>";
  60.  if (strlen($tache_prevu) > 600)
  61.   $msg .= "La description de la réparation ne doit pas excédé 500 caractéres.<br/>";
  62.  //Mise en place du message d'erreur pour la limite de caractére et de type de contenu.
  63.  if (strlen($msg) > strlen($msg_longueur)) {
  64.   echo $msg;
  65.   $code_erreur = 1;}
  66.  if ($code_erreur == 1) {
  67.  echo "Enregistrement non effectué car une erreur à été détecté";
  68.  }
  69.  else {
  70.  $sql = " INSERT INTO clients VALUES('idclient','$nomclient','$telclient')";
  71.  mysql_query($sql) or die ("erreur".mysql_error());
  72.  $idclient = mysql_query("SELECT idclient FROM clients WHERE nomclient = '$nomclient' AND telclient = '$telclient'" );
  73.  $sql = "INSERT INTO machine VALUES('$idmachine','$type', '$sqlaccess', '$descpanne','$date_entree','$tache_prevu','$tache_effectue','$idclient')";
  74.  mysql_query($sql) or die ("erreur".mysql_error());
  75.  echo  $sqlaccess ;
  76.  }
  77.  ?>


En faite je veux pouvoir sauvegarder l'idclient créer automatiquement par la requête précédente dans ma table machine tout simplement.


Message édité par Bilbo248 le 17-06-2008 à 23:38:32

---------------
Photographie d'amateur |--| Stats BDPV - Photovoltaique
Reply

Marsh Posté le 17-06-2008 à 12:54:36   

Reply

Marsh Posté le 17-06-2008 à 13:16:03    

ligne 77 : $sql = " INSERT INTO clients VALUES('','$nomclient','$telclient')";
> si ton champ id_client est bien 'auto-increment' ça devrait fonctionner
 
et ensuite ligne 79 tu faire plus simple et utiliser 'mysql_insert_id()'

Reply

Marsh Posté le 17-06-2008 à 20:51:00    

ma ligne 77 ne me pose aucun problème et fonctionne très bien comme celà, je vais par contre regardé ce que tu m'a conseillez pour la ligne 79,
quel différence entre ce que j'ai mis et simplement mysql_insert_id() ?!
EDIT : çà fonctionne parfaitement avec mysql_insert_id() , cependant si l'on veut faire comme ma première solution comment faire ?!


Message édité par Bilbo248 le 17-06-2008 à 21:22:00

---------------
Photographie d'amateur |--| Stats BDPV - Photovoltaique
Reply

Marsh Posté le 17-06-2008 à 22:17:00    

Salut !
 
T'as fortement besoin de passer par la documentation de base de php ! (tu connais depuis quelques heures ?)
 
la premiere idée qui me passe par la tete : "encore un qui n'a pas lu la doc, RTFM"

Citation :

"Bonjours j'ai un souci que je n'arrive pas à déterminé,"


---> http://fr2.php.net/mysql_query
 
ne dis surtout pas que tu a cherché, pour 2 secondes !
 
 
- mysql_query ne te retourne non pas une valeur mais une ressource
il faut utiliser les fonctions mysql_fetch_* suite à cela
 
- contrairement à ce que te dis PunkRod, le champ de la clé primaire n'as pas a etre spécifié :
déclare ton insertion de tout autre champs ainsi :
INSERT INTO ta_table(tes,champs,a,affecter) VALUES('de','ces','valeurs','la');
 
- ton $idmachine tu l'inventes d'où ?
- des requetes avec des quotes doublés... jamais vu ca en mysql
- mysql_insert_id() pour obtenir l'id dernierement inseré (a faire pour $idclient et $idmachine)
- si une variable passé en post contient des caractères douteux... tes requetes explosent ! ---> regarde mysql_real_escape_string pour protéger efficacement
- ta ligne 77 fonctionne très bien ??? mais bien sur il est vachement numérique ton idclient
 
 
Corriges cela et tout ira mieux

Message cité 1 fois
Message édité par Profil supprimé le 17-06-2008 à 22:18:10
Reply

Marsh Posté le 17-06-2008 à 23:43:03    


---> http://fr2.php.net/mysql_query
 
ne dis surtout pas que tu a cherché, pour 2 secondes ! J'ai cherchez, mais pas ce qu'il fallait, nuance ;)
 
 
- mysql_query ne te retourne non pas une valeur mais une ressource La différence entre ressource et valeur c'est quoi ?!
il faut utiliser les fonctions mysql_fetch_* suite à cela Ceci pour affiché le résultat à l'écran ?! Mais pour l'insérer dans une variable ?!
 
- contrairement à ce que te dis PunkRod, le champ de la clé primaire n'as pas a etre spécifié :
déclare ton insertion de tout autre champs ainsi :
INSERT INTO ta_table(tes,champs,a,affecter) VALUES('de','ces','valeurs','la');
 
- ton $idmachine tu l'inventes d'où ? Auto incrémentation dans mes table
- des requetes avec des quotes doublés... jamais vu ca en mysql Une erreur quand j'ai copié le code.
- mysql_insert_id() pour obtenir l'id dernierement inseré (a faire pour $idclient et $idmachine) Pas la peine pour id machine, étant donné que mon idclient ne dépend pas de mon idmachine
- si une variable passé en post contient des caractères douteux... tes requetes explosent ! ---> regarde mysql_real_escape_string pour protéger efficacement J'avais vu quelque chose en rapport avec celà, donc à reregardé.
- ta ligne 77 fonctionne très bien ??? mais bien sur il est vachement numérique ton idclient Cet ligne fonctionne bien malgrés mon erreur, merci l'autoincrémentation ;)
 
 
Corriges cela et tout ira mieux[/quotemsg]


Message édité par Bilbo248 le 17-06-2008 à 23:48:10

---------------
Photographie d'amateur |--| Stats BDPV - Photovoltaique
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed