Corriger erreur php: modification de base données

Corriger erreur php: modification de base données - PHP - Programmation

Marsh Posté le 01-03-2013 à 11:19:40    

salam tout le monde:
 
brabi svp j'ai un problem:
 
j'ai crée une base données contenant table "cr". j'ai hébergé mon site & ça fonctionne bien...
je veux par PHP modifier le contenu de la table "cr"
 
alors voici les 3 pages php que j'ai crée:
 
crmodification.php :

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>crmodification3</title>
  6. </head>
  7. <body>
  8. <?php
  9. // Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1)
  10. header('Content-type: text/html; charset=UTF-8');
  11.   //connection au serveur:
  12.     $cnx = mysql_connect( "host", "user", "xxx" ) ;
  13.     //sélection de la base de données:
  14.     $db = mysql_select_db( "AAAAA" ) ;
  15.     // Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1)
  16.          mysql_query("SET NAMES 'utf8'" );
  17. //requête SQL:
  18.     $sql = "SELECT *
  19.       FROM cr
  20.       ORDER BY no" ;
  21.     //exécution de la requête:
  22.     $requete = mysql_query( $sql, $cnx ) ;
  23.     //affichage des données:
  24.     while( $result = mysql_fetch_object( $requete ) )
  25.     {
  26.        echo(
  27.            "<div align=\"center\">"
  28.            .$result->no." ".$result->nom." ".$result->cin."<a href=\"crmodification2.php?idPersonne=".$result->no."\">modifier</a></div>\n"
  29.        ) ;
  30.     }
  31.   ?>
  32. </body>
  33. </html>


puis page2: crmodification2.php

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>crmodification3</title>
  6. </head>
  7. <body>
  8. <?php
  9. // Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1)
  10. header('Content-type: text/html; charset=UTF-8');
  11.   //connection au serveur:
  12.     $cnx = mysql_connect( "host", "user", "xxx" ) ;
  13.     //sélection de la base de données:
  14.     $db = mysql_select_db( "AAAAA" ) ;
  15.     // Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1)
  16.          mysql_query("SET NAMES 'utf8'" );
  17. //récupération de la variable d'URL,
  18.   //qui va nous permettre de savoir quel enregistrement modifier
  19.   $id  = $_GET["idPersonne"] ;
  20.   //requéte SQL:
  21.   $sql = "SELECT *
  22.             FROM cr
  23.     WHERE no = ".$id ;
  24.   //exécution de la requéte:
  25.   $requete = mysql_query( $sql, $cnx ) ;
  26.   //affichage des données:
  27.   if( $result = mysql_fetch_object( $requete ) )
  28.   {
  29.   ?>
  30.  
  31.   <form name="insertion" action="crmodification3.php" method="POST">
  32.   <input type="hidden" name="no" value="<?php echo($id) ;?>">
  33.   <table border="0" align="center" cellspacing="2" cellpadding="2">
  34.    <tr align="center">
  35.       <td>no</td>
  36.       <td><input type="text" name="no" value="<?php echo($result->no) ;?>"></td>
  37.     </tr>
  38. <tr align="center">
  39.       <td>nom</td>
  40.       <td><input type="text" name="nom" value="<?php echo($result->nom) ;?>"></td>
  41.     </tr>
  42. <tr align="center">
  43.       <td>cin</td>
  44.       <td><input type="text" name="cin" value="<?php echo($result->cin) ;?>"></td>
  45.     </tr>
  46.     <tr align="center">
  47.       <td>identifiant unique</td>
  48.       <td><input type="text" name="identifiantunique" value="<?php echo($result->identifiantunique) ;?>"></td>
  49.     </tr>
  50.     <tr align="center">
  51.       <td>date naissance</td>
  52.       <td><input type="text" name="datenaissance" value="<?php echo($result->datenaissance) ;?>"></td>
  53.     </tr>
  54.     <tr align="center">
  55.       <td>lieu naissance</td>
  56.       <td><input type="text" name="lieunaissance" value="<?php echo($result->lieunaissance) ;?>"></td>
  57.     </tr>
  58.     <tr align="center">
  59.       <td>etat civil</td>
  60.       <td><input type="text" name="etatcivil" value="<?php echo($result->etatcivil) ;?>"></td>
  61.     </tr>
  62. <tr align="center">
  63.       <td>enfants</td>
  64.       <td><input type="text" name="enfants" value="<?php echo($result->enfants) ;?>"></td>
  65.     </tr>
  66. <tr align="center">
  67.       <td>grade actuel</td>
  68.       <td><input type="text" name="gradeactuel" value="<?php echo($result->gradeactuel) ;?>"></td>
  69.     </tr>
  70. <tr align="center">
  71.       <td>grade entree</td>
  72.       <td><input type="text" name="gradeentree" value="<?php echo($result->gradeentree) ;?>"></td>
  73.     </tr>
  74. <tr align="center">
  75.       <td>date entree</td>
  76.       <td><input type="text" name="dateentree" value="<?php echo($result->dateentree) ;?>"></td>
  77.     </tr>
  78. <tr align="center">
  79.       <td>grade obtention</td>
  80.       <td><input type="text" name="gradeobtention" value="<?php echo($result->gradeobtention) ;?>"></td>
  81.     </tr>
  82. <tr align="center">
  83.       <td>fonction</td>
  84.       <td><input type="text" name="fonction" value="<?php echo($result->fonction) ;?>"></td>
  85.     </tr>
  86. <tr align="center">
  87.       <td>diplomes</td>
  88.       <td><input type="text" name="diplomes" value="<?php echo($result->diplomes) ;?>"></td>
  89.     </tr>
  90. <tr align="center">
  91.       <td>intirimes</td>
  92.       <td><input type="text" name="intirimes" value="<?php echo($result->intirimes) ;?>"></td>
  93.     </tr>
  94. <tr align="center">
  95.       <td>stages & formations</td>
  96.       <td><input type="text" name="stagesformations" value="<?php echo($result->stagesformations) ;?>"></td>
  97.     </tr>
  98. <tr align="center">
  99.       <td>tel</td>
  100.       <td><input type="text" name="tel" value="<?php echo($result->tel) ;?>"></td>
  101.     </tr>
  102. <tr align="center">
  103.       <td>adresse</td>
  104.       <td><input type="text" name="adresse" value="<?php echo($result->adresse) ;?>"></td>
  105.     </tr>
  106. <tr align="center">
  107.       <td>domiciliation salaire</td>
  108.       <td><input type="text" name="domiciliationsalaire" value="<?php echo($result->domiciliationsalaire) ;?>"></td>
  109.     </tr>
  110. <tr align="center">
  111.       <td>no compte</td>
  112.       <td><input type="text" name="nocompte" value="<?php echo($result->nocompte) ;?>"></td>
  113.     </tr>
  114. <tr align="center">
  115.       <td>postes anterieurs</td>
  116.       <td><input type="text" name="postesanterieurs" value="<?php echo($result->postesanterieurs) ;?>"></td>
  117.     </tr>
  118.     <tr align="center">
  119.       <td colspan="2"><input type="submit" value="modifier"></td>
  120.     </tr>
  121.   </table>
  122. </form>
  123. <?php
  124.   }//fin if  
  125.   ?>
  126. </body>
  127. </html>


et finallement la page3: crmodification3.php

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>crmodification3</title>
  6. </head>
  7. <body>
  8. <?php
  9. // Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1)
  10. header('Content-type: text/html; charset=UTF-8');
  11.   //connection au serveur:
  12.     $cnx = mysql_connect( "host", "user", "xxx" ) ;
  13.     //sélection de la base de données:
  14.     $db = mysql_select_db( "AAAAA" ) ;
  15.     // Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1)
  16.          mysql_query("SET NAMES 'utf8'" );
  17. //récupération des valeurs des champs:
  18.   //nom:
  19.   $nom     = $_POST["nom"] ;
  20.   //prenom:
  21.   $cin = $_POST["cin"] ;
  22.     //identifiantunique:
  23.   $identifiantunique = $_POST["identifiantunique"] ;
  24.   //datenaissance:
  25.   $datenaissance        = $_POST["datenaissance"] ;
  26.   //lieunaissance:
  27.   $lieunaissance       = $_POST["lieunaissance"] ;
  28. //etatcivil:
  29.   $etatcivil       = $_POST["etatcivil"] ;
  30.   //enfants:
  31.   $enfants       = $_POST["enfants"] ;
  32.    //gradeactuel:
  33.   $gradeactuel       = $_POST["gradeactuel"] ;
  34.     //gradeentree:
  35.   $gradeentree       = $_POST["gradeentree"] ;
  36.     //dateentree:
  37.   $dateentree       = $_POST["dateentree"] ;
  38.     //gradeobtention:
  39.   $gradeobtention       = $_POST["gradeobtention"] ;
  40.     //fonction:
  41.   $fonction       = $_POST["fonction"] ;
  42.     //diplomes:
  43.   $diplomes       = $_POST["diplomes"] ;
  44.     //intirimes:
  45.   $intirimes       = $_POST["intirimes"] ;
  46.     //stagesformations:
  47.   $stagesformations       = $_POST["stagesformations"] ; 
  48.     //tel:
  49.   $tel       = $_POST["tel"] ;
  50.     //adresse:
  51.   $adresse       = $_POST["adresse"] ;
  52.     //domiciliationsalaire:
  53.   $domiciliationsalaire       = $_POST["domiciliationsalaire"] ;
  54.     //nocompte:
  55.   $nocompte       = $_POST["nocompte"] ;
  56.     //postesanterieurs:
  57.   $postesanterieurs       = $_POST["postesanterieurs"] ;
  58.  
  59.    //récupération de l'identifiant de la personne:
  60.   $id         = $_POST["no"] ;
  61.  
  62.   //création de la requéte SQL:
  63.   $sql = "UPDATE cr
  64.             SET nom         = '$nom',
  65.       cin         = '$cin',
  66.       identifiantunique         = '$identifiantunique',
  67.       datenaissance         = '$datenaissance',
  68.       lieunaissance         = '$lieunaissance',
  69.       etatcivil         = '$etatcivil',
  70.       enfants         = '$enfants',
  71.       gradeactuel         = '$gradeactuel',
  72.       gradeentree         = '$gradeentree',
  73.       dateentree         = '$dateentree',
  74.       gradeobtention         = '$gradeobtention',
  75.             fonction     = '$fonction',
  76.          diplomes    = '$diplomes',
  77.          intirimes           = '$intirimes',
  78.          stagesformations = '$stagesformations',
  79.    tel           = '$tel',
  80.    adresse       = '$adresse',
  81.    domiciliationsalaire       = '$domiciliationsalaire',
  82.    nocompte       = '$nocompte',
  83.    postesanterieurs = '$postesanterieurs',
  84.            WHERE no = '$id' " ;
  85.   //exécution de la requéte SQL:
  86.   $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
  87.   //affichage des résultats, pour savoir si la modification a marchée:
  88.   if($requete)
  89.   {
  90.     echo("La modification a été correctement effectuée" ) ;
  91.   }
  92.   else
  93.   {
  94.     echo("La modification a échoué" ) ;
  95.   }
  96. ?>
  97. </body>
  98. </html>


...
le probleme : il ya erreur qui s'affiche lors de la modification:
je reçois ce message "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE no = '17'' at line 22"
merci pour votre aide :)  

Reply

Marsh Posté le 01-03-2013 à 11:19:40   

Reply

Marsh Posté le 01-03-2013 à 11:36:11    

Une virgule de trop avant le WHERE.
Les messages d'erreur ce n'est pas fait pour être ignoré.


---------------
Main/Alt1/Alt2/Alt3
Reply

Marsh Posté le 01-03-2013 à 11:37:22    

Affiche la requête générée et cherche l'erreur de syntaxe.
 
Au passage tu devrais te pencher sur les requêtes préparées : en l'état le premier hacker venu te vide la base de données sans le moindre effort.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 01-03-2013 à 12:29:47    

Volkhen a écrit :

Une virgule de trop avant le WHERE.
Les messages d'erreur ce n'est pas fait pour être ignoré.


 
allah yarhem waldik  
(dieu te recompense en protégeant tes parents)
merci infiniment... ça marche bien maintenant

Reply

Marsh Posté le 01-03-2013 à 12:30:21    

skeye a écrit :

Affiche la requête générée et cherche l'erreur de syntaxe.
 
Au passage tu devrais te pencher sur les requêtes préparées : en l'état le premier hacker venu te vide la base de données sans le moindre effort.


: allah yarhem waldik  
(dieu te recompense en protégeant tes parents)
merci infiniment... ça marche bien maintenant

Reply

Marsh Posté le 01-03-2013 à 13:13:33    

skeye veut parler des hack par SQL injection. D'où l'utilité des requêtes préparées (prepared statement) qu'on trouve, par ex avec PDO.
 
Par ailleurs, faudra penser à "épurer" le contenu saisi dans les champs pour gérer les pbs de caractères pouvant poser des pbs lors de l'insertion comme l'apostrophe ou le guillemet.
 
Pareil à l'affichage dans tes champs HTML. Tu auras un pb si une valeur contient un guillemet (voir du côté de la fonction htmlspecialchars()).
 
De même, pour te protéger des failles XSS, il faudra retirer les codes html ou javascript mis dans tes champs. strip_tags() pourra t'aider en partie ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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