Problème "UPDATE" SQL

Problème "UPDATE" SQL - SQL/NoSQL - Programmation

Marsh Posté le 05-06-2017 à 15:09:26    

Bonjour à tous, pour mon projet de fin d'année qui consiste à réaliser un site internet et une base de donnée pour la création d'un système de télépéage, je viens demander un peu d'aide sur un problème que je rencontre avec le SQL.  
 
Je veux en fait, faire une MàJ des infos personnelles d'un client. Le client connecté à son compte, doit pouvoir modifier ses infos à tout moment.
 
Voici donc le formulaire qui permet de rentrer les infos dans la base :  
 

Code :
  1. <div class="container">
  2.                 <form action="/edsa-Péage/ihm/fonction_modif.php">
  3.                     <label for="nom">Nom</label>
  4.                     <input type="text" id="nom" name="nom" placeholder="Nom...">
  5.                     <label for="prenom">Prenom</label>
  6.                     <input type="text" id="prenom" name="prenom" placeholder="Prenom...">
  7.                  
  8.                     <label for="tel">Numéro de téléphone</label>
  9.                     <input type="text" id="tel" name="tel" placeholder="Numéro de téléphone...">
  10.                    
  11.                     <label for="mail">Mail</label>
  12.                     <input type="text" id="mail" name="mail" placeholder="Mail...">
  13.                    
  14.                     <label for="pass">Mot de passe</label>
  15.                     <input type="password" id="pass" name="pass" placeholder="Mot de passe...">
  16.                     ____________________________________________________________________________________________________________________________________
  17.                     <br/><br/>
  18.                    
  19.                     <label for="cb">Carte bleu</label>
  20.                     <input type="text" id="cb" name="cb" placeholder="Carte bleue...">
  21.                     <label for="crypto">Cryptogramme</label>
  22.                     <input type="text" id="crypto" name="crypto" placeholder="Cryptogramme...">
  23.                    
  24.                     <label for="expi">Date d'expiration</label>
  25.                     <input type="date" id="expi" name="expi" placeholder="Date d'expiration...">
  26.                     ____________________________________________________________________________________________________________________________________
  27.                     <br/><br/>
  28.                    
  29.                     <label for="ville">Ville</label>
  30.                     <input type="text" id="vile" name="ville" placeholder="Ville...">
  31.                    
  32.                     <label for="adress">Adresse</label>
  33.                     <input type="text" id="adress" name="adress" placeholder="Adresse...">
  34.                     <label for="cp">Code postal</label>
  35.                     <input type="text" id="cp" name="cp" placeholder="Code postal...">
  36.                    
  37.                     <label for="cp">Formule choisie</label>
  38.                     <input type="text" id="abo" name="abo" placeholder="Forme choisie...">
  39.                
  40.                     <input type="submit" value="Envoyer">
  41.                 </form>
  42.             </div>


 
Et ici, les requêtes SQL en PHP :
 

Code :
  1. <?php
  2.     include 'connexion.php';
  3.    
  4.     $nom = $_POST['nom'];
  5.     $prenom = $_POST['prenom'];
  6.     $tel = $_POST['tel'];
  7.     $mail = $_POST['mail'];
  8.     $pass = sha1($_POST['pass']);
  9.     $cb = $_POST['cb'];
  10.     $crypto = $_POST['crypto'];
  11.     $expi = $_POST['expi'];
  12.     $ville = $_POST['ville'];
  13.     $adress = $_POST['adress'];
  14.     $cp = $_POST['cp'];
  15.     $abo = $_POST['abo'];
  16.    
  17.     $req = $bdd->prepare('UPDATE adresse SET ville=?, adress=?, `code postal`=? WHERE ID_adresse=?)');
  18.     $req->execute(array(
  19.         $ville,
  20.         $adress,
  21.         $cp));
  22.    
  23.     $id=$bdd->lastinsertid();
  24.     $req = $bdd->prepare('UPDATE client SET Nom=?, Prenom=?, Téléphone=?, `E-mail`=?, Mot_de_passe=?, ID_adresse=?, abo=? WHERE ID_client=?');
  25.     $req->execute(array(
  26.         $nom,
  27.         $prenom,
  28.         $tel,
  29.         $mail,
  30.         $pass,
  31.         $id,
  32.         $abo));
  33.        
  34.     $id=$bdd->lastinsertid();
  35.     $req = $bdd->prepare('UPDATE coordonnes SET CB=?, crypto=?, expiration=?, ID_client WHERE ID_client=?');
  36.     $req->execute(array(
  37.         $cb,
  38.         $crypto,
  39.         $expi,
  40.         $id));
  41.        
  42.     $resultat = $req->fetch();
  43.     // Redirection du visiteur vers la page du formulaire
  44.     header('location: Espace_membre2.php');
  45. ?>


 
Le problème c'est que ça ne fonctionne pas, j'ai le même formulaire pour l'inscription mais avec des "INSERT" à la place des "UPDATE" dans le fichier en PHP et tout fonctionne très bien, j'ai aussi un fichier similaire avec un "SELECT" pour afficher le profil de l'utilisateur et pareille, pas de problème, juste un problème avec "UPDATE".
 
D'après mon prof, les requêtes sont bonnes donc si quelqu'un a un indice sur ce qui ne va pas, je suis preneur.
 
Merci d'avance :)


Message édité par Adamentys le 05-06-2017 à 15:09:54

---------------
Topal Achat/Vente | 1° Mod : [Workblog] Pendemic Mod | 2° Mod : [Workblog] Purple Evolution
Reply

Marsh Posté le 05-06-2017 à 15:09:26   

Reply

Marsh Posté le 05-06-2017 à 15:33:10    

Bonjour,

 

Plusieurs choses apparaissent, dans le code fourni rien ne vérifie si le formulaire est correctement rempli, ainsi les variables POST peuvent être vides. Bon je suppose que cette partie du code n'a pas été transmise.

 

Secundo je ne vois pas trop ce que viennent faire les :

 
Code :
  1. $id=$bdd->lastinsertid();
 

Probablement des restes de copier/coller.

 

Tertio, et je pense que c'est là que réside le problème, les variables précisant les valeurs de l'instruction WHERE ne sont pas ajoutées au tableau lors de l’exécution des requêtes.

 

Les erreurs sont-elles affichées? Parce que ça aiderait un peu plus et je trouve ça bizarre que par exemple :

 
Code :
  1. $req = $bdd->prepare('UPDATE coordonnes SET CB=?, crypto=?, expiration=?, ID_client WHERE ID_client=?');
  2.     $req->execute(array(
  3.         $cb,
  4.         $crypto,
  5.         $expi,
  6.         $id));
 

Ne renvoie aucune erreur puisque là la requête n'est même pas correctement formulée pour le paramétrage de ID_client. Au passage ça n'a m'étonnerait que tu veuilles updater la valeur de ID_client.

Message cité 1 fois
Message édité par MaybeEijOrNot le 05-06-2017 à 15:34:28

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 08-06-2017 à 13:35:40    

:hello:

 

Rien ne vérifie si le formulaire est correctement rempli simplement car l'utilisateur n'a pas forcément besoin de modifier toutes ses infos en même temps. Un changement de numéro n'arrive pas forcément en même temps qu'un changement d'adresse.

 

Pour les "lastinsertid" c'était bien un reste de copier/coller.

 

L'erreur dans la quête a été corrigée.

 

Sinon, pour l'affichage des erreurs, je ne sais pas faire dans ce cas là.
Dois-je simplement faire un echo avec ma variable de session en récupérant un champ en particulier pour voir s'il y a une erreur ?

 

Par ex :

Code :
  1. <?php echo $_SESSION['ville']; ?>
 

C'est du PHP que j'utilise pour afficher les infos de mes clients, quand la requête lié n'était pas bonne, j'avais une erreur.
Je ne sais pas si ça fonctionne pareil pour le UPDATE.

 

Merci pour la réponse en tout cas :)

 

Edit : même après correction de la requête, ça ne fonctionne pas


Message édité par Adamentys le 08-06-2017 à 13:39:09

---------------
Topal Achat/Vente | 1° Mod : [Workblog] Pendemic Mod | 2° Mod : [Workblog] Purple Evolution
Reply

Marsh Posté le 08-06-2017 à 17:49:30    

C'est à toi d'adapter la vérification en fonction de ce que l'utilisateur veut faire.
 
Dans le code actuel, les formats de données ne sont même pas vérifiés. Le code que tu donnes ne fait pas apparaître un remplissage des champs par les anciennes données, etc. Enfin c'est un autre point.
 
 
Peut-on voir le nouveau code corrigé?
Les affichages d'erreurs PHP sont à configurer dans le php.ini :
- error_reporting
- display_errors


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 08-06-2017 à 19:32:43    

En gros, je veux mettre à jour n'importe quelle information concernant un client.
 
Pour le format des données, c'est pas le plus important, j'ai commencé ce projet avec 0 connaissances en PHP, CSS, HTML et SQL avec un temps assez limité donc c'est pas ma priorité. J'ai un cahier des charges à respecter avec des fonctionnalités à implémenter, je le fais mais le de façon basique pour que ça fonctionne.
 
J'ai aussi ajouté dans le code de quoi donner les erreurs liées aux dernières requêtes.  

Code :
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <link href="css/modele08.css" rel="stylesheet">
  6.         <link href="css/Contact_form.css" rel="stylesheet"> 
  7. <?php
  8.     include 'connexion.php';
  9.    
  10.     $nom = $_POST['nom'];
  11.     $prenom = $_POST['prenom'];
  12.     $tel = $_POST['tel'];
  13.     $mail = $_POST['mail'];
  14.     $pass = sha1($_POST['pass']);
  15.     $cb = $_POST['cb'];
  16.     $crypto = $_POST['crypto'];
  17.     $expi = $_POST['expi'];
  18.     $ville = $_POST['ville'];
  19.     $adress = $_POST['adress'];
  20.     $cp = $_POST['cp'];
  21.     $abo = $_POST['abo'];
  22.    
  23.     $req = $bdd->prepare('UPDATE adresse SET ville=?, adress=?, `code postal`=? WHERE ID_adresse=?)');
  24.     $req->execute(array(
  25.         $ville,
  26.         $adress,
  27.         $cp));
  28.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
  29.    
  30.     $req = $bdd->prepare('UPDATE client SET Nom=?, Prenom=?, Téléphone=?, `E-mail`=?, Mot_de_passe=?, ID_adresse=?, abo=? WHERE ID_client=?');
  31.     $req->execute(array(
  32.         $nom,
  33.         $prenom,
  34.         $tel,
  35.         $mail,
  36.         $pass,
  37.         $id,
  38.         $abo));
  39.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n";   
  40.    
  41.     $req = $bdd->prepare('UPDATE coordonnes SET CB=?, crypto=?, expiration=? WHERE ID_client=?');
  42.     $req->execute(array(
  43.         $cb,
  44.         $crypto,
  45.         $expi,
  46.         $id));
  47.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 
  48.    
  49.     $resultat = $req->fetch();
  50.     // Redirection du visiteur vers la page du formulaire
  51.     header('location: Espace_membre2.php');
  52. ?>


 
Du coup, j'ai un gros paquet d’erreur :

Code :
  1. Notice: Undefined index: nom in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 4
  2. Notice: Undefined index: prenom in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 5
  3. Notice: Undefined index: tel in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 6
  4. Notice: Undefined index: mail in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 7
  5. Notice: Undefined index: pass in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 8
  6. Notice: Undefined index: cb in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 9
  7. Notice: Undefined index: crypto in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 10
  8. Notice: Undefined index: expi in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 11
  9. Notice: Undefined index: ville in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 12
  10. Notice: Undefined index: adress in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 13
  11. Notice: Undefined index: cp in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 14
  12. Notice: Undefined index: abo in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 15
  13. Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 21
  14. Notice: Undefined variable: link in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 22
  15. Warning: mysql_errno() expects parameter 1 to be resource, null given in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 22
  16. Notice: Undefined variable: link in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 22
  17. Warning: mysql_error() expects parameter 1 to be resource, null given in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 22
  18. :
  19. Notice: Undefined variable: id in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 31
  20. Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 32
  21. Notice: Undefined variable: link in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 33
  22. Warning: mysql_errno() expects parameter 1 to be resource, null given in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 33
  23. Notice: Undefined variable: link in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 33
  24. Warning: mysql_error() expects parameter 1 to be resource, null given in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 33
  25. :
  26. Notice: Undefined variable: id in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 40
  27. Notice: Undefined variable: link in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 41
  28. Warning: mysql_errno() expects parameter 1 to be resource, null given in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 41
  29. Notice: Undefined variable: link in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 41
  30. Warning: mysql_error() expects parameter 1 to be resource, null given in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 41
  31. :
  32. Warning: Cannot modify header information - headers already sent by (output started at C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php:41) in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 46


 
Voici aussi le code du formulaire, au cas ou :

Code :
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <link href="css/modele08.css" rel="stylesheet">
  6.         <link href="css/Contact_form.css" rel="stylesheet"> 
  7.         <title>Modification</title>
  8.     </head>
  9.    
  10.     <body>
  11.         <div id="global">
  12.             <div id="entete">
  13.                 <img id="baniere" src="images/header.png" alt="Image_entête">
  14.                 <?php include 'menu.php'; ?>
  15.             </div>
  16.            
  17.              <div id="contenu">
  18.                 <h1>Ici, vous pouvez modifier vos informations personnelles</h1>
  19.                
  20.             </div>
  21.            
  22.             <div class="container">
  23.                 <form action="/edsa-Péage/ihm/fonction_modif.php">
  24.                     <label for="nom">Nom</label>
  25.                     <input type="text" id="nom" name="nom" placeholder="Nom...">
  26.                     <label for="prenom">Prenom</label>
  27.                     <input type="text" id="prenom" name="prenom" placeholder="Prenom...">
  28.                  
  29.                     <label for="tel">Numéro de téléphone</label>
  30.                     <input type="text" id="tel" name="tel" placeholder="Numéro de téléphone...">
  31.                    
  32.                     <label for="mail">Mail</label>
  33.                     <input type="text" id="mail" name="mail" placeholder="Mail...">
  34.                    
  35.                     <label for="pass">Mot de passe</label>
  36.                     <input type="password" id="pass" name="pass" placeholder="Mot de passe...">
  37.                     ____________________________________________________________________________________________________________________________________
  38.                     <br/><br/>
  39.                    
  40.                     <label for="cb">Carte bleu</label>
  41.                     <input type="text" id="cb" name="cb" placeholder="Carte bleue...">
  42.                     <label for="crypto">Cryptogramme</label>
  43.                     <input type="text" id="crypto" name="crypto" placeholder="Cryptogramme...">
  44.                    
  45.                     <label for="expi">Date d'expiration</label>
  46.                     <input type="date" id="expi" name="expi" placeholder="Date d'expiration...">
  47.                     ____________________________________________________________________________________________________________________________________
  48.                     <br/><br/>
  49.                    
  50.                     <label for="ville">Ville</label>
  51.                     <input type="text" id="vile" name="ville" placeholder="Ville...">
  52.                    
  53.                     <label for="adress">Adresse</label>
  54.                     <input type="text" id="adress" name="adress" placeholder="Adresse...">
  55.                     <label for="cp">Code postal</label>
  56.                     <input type="text" id="cp" name="cp" placeholder="Code postal...">
  57.                    
  58.                     <label for="cp">Formule choisie</label>
  59.                     <input type="text" id="abo" name="abo" placeholder="Forme choisie...">
  60.                
  61.                     <input type="submit" value="Envoyer">
  62.                 </form>
  63.             </div>
  64.            
  65.         </div>   
  66.     </body>
  67. </html>


 
Voilà, merci de m'aider en tout cas :)


---------------
Topal Achat/Vente | 1° Mod : [Workblog] Pendemic Mod | 2° Mod : [Workblog] Purple Evolution
Reply

Marsh Posté le 08-06-2017 à 20:57:04    

MaybeEijOrNot a écrit :

Tertio, et je pense que c'est là que réside le problème, les variables précisant les valeurs de l'instruction WHERE ne sont pas ajoutées au tableau lors de l’exécution des requêtes.

 

Tu n'as rien corrigé à ce niveau et c'est d'ailleurs ce qui ressort dans les erreurs affichées :

 
Code :
  1. Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\Users\maxen\Documents\NetBeansProjects\Peage\ihm\fonction_modif.php on line 21
 

Dans la préparation de tes requêtes tu fais apparaître un certain nombre de variables via les points d'interrogation et quand tu exécutes les requêtes tu passes en paramètres un tableau de variables qui en contient moins. Ce qui fait que comme je te l'ai précisé, aucune valeur ne ressort pour l'instruction WHERE. Sauf pour ta dernière requête qui est bien construite.

 

Et je ne sais pas à quoi servent tes :

 
Code :
  1. echo mysql_errno($link) . ": " . mysql_error($link) . "\n";


Aucune variable $link existe, et tu utilises PDO donc tu ne "catch" rien avec ça.


Message édité par MaybeEijOrNot le 08-06-2017 à 21:00:59

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 08-06-2017 à 22:16:55    

My bad, j'avais pas fait attention au nombre de variable, c'est corrigé, j'ai pris exemple sur la dernière requêtes et ça a l'air bon cette fois-ci :

Code :
  1. <?php
  2.     include 'connexion.php';
  3.    
  4.     $nom = $_POST['nom'];
  5.     $prenom = $_POST['prenom'];
  6.     $tel = $_POST['tel'];
  7.     $mail = $_POST['mail'];
  8.     $pass = sha1($_POST['pass']);
  9.     $abo = $_POST['abo'];
  10.     $cb = $_POST['cb'];
  11.     $crypto = $_POST['crypto'];
  12.     $expi = $_POST['expi'];
  13.     $ville = $_POST['ville'];
  14.     $adress = $_POST['adress'];
  15.     $cp = $_POST['cp'];
  16.    
  17.     $req = $bdd->prepare('UPDATE adresse SET ville=?, adress=?, `code postal`=? WHERE ID_adresse=?)');
  18.     $req->execute(array(
  19.         $ville,
  20.         $adress,
  21.         $cp));
  22.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
  23.    
  24.     $req = $bdd->prepare('UPDATE client SET Nom=?, Prenom=?, Téléphone=?, `E-mail`=?, Mot_de_passe=?, abo=? WHERE ID_client=?');
  25.     $req->execute(array(
  26.         $nom,
  27.         $prenom,
  28.         $tel,
  29.         $mail,
  30.         $pass,
  31.         $abo));
  32.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n";   
  33.    
  34.     $req = $bdd->prepare('UPDATE coordonnes SET CB=?, crypto=?, expiration=? WHERE ID_client=?');
  35.     $req->execute(array(
  36.         $cb,
  37.         $crypto,
  38.         $expi));
  39.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 
  40.    
  41.     $resultat = $req->fetch();
  42.     // Redirection du visiteur vers la page du formulaire
  43.     header('location: Espace_membre2.php');
  44. ?>


Problème, toujours la même erreur  
 
Cette histoire d'update est la dernière barrière avant d'avoir mon projet complètement fonctionnel, ça m'embête...
 
Les :

Code :
  1. echo mysql_errno($link) . ": " . mysql_error($link) . "\n";


Servent à afficher les erreurs, sans les variables link, rien ne s'affiche et sans la ligne complète, même chose, pas d'erreurs affichées.
Cette ligne en soit n'est pas bonne mais elle fait quand même ce que je lui demande, c'est le principal :lol:
En fait, grâce aux erreurs générées par cette ligne, toutes les autres sont visibles.


---------------
Topal Achat/Vente | 1° Mod : [Workblog] Pendemic Mod | 2° Mod : [Workblog] Purple Evolution
Reply

Marsh Posté le 08-06-2017 à 22:44:26    

Adamentys a écrit :

My bad, j'avais pas fait attention au nombre de variable, c'est corrigé, j'ai pris exemple sur la dernière requêtes et ça a l'air bon cette fois-ci :

Code :
  1. <?php
  2.     include 'connexion.php';
  3.    
  4.     $nom = $_POST['nom'];
  5.     $prenom = $_POST['prenom'];
  6.     $tel = $_POST['tel'];
  7.     $mail = $_POST['mail'];
  8.     $pass = sha1($_POST['pass']);
  9.     $abo = $_POST['abo'];
  10.     $cb = $_POST['cb'];
  11.     $crypto = $_POST['crypto'];
  12.     $expi = $_POST['expi'];
  13.     $ville = $_POST['ville'];
  14.     $adress = $_POST['adress'];
  15.     $cp = $_POST['cp'];
  16.    
  17.     $req = $bdd->prepare('UPDATE adresse SET ville=?, adress=?, `code postal`=? WHERE ID_adresse=?)');
  18.     $req->execute(array(
  19.         $ville,
  20.         $adress,
  21.         $cp));
  22.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
  23.    
  24.     $req = $bdd->prepare('UPDATE client SET Nom=?, Prenom=?, Téléphone=?, `E-mail`=?, Mot_de_passe=?, abo=? WHERE ID_client=?');
  25.     $req->execute(array(
  26.         $nom,
  27.         $prenom,
  28.         $tel,
  29.         $mail,
  30.         $pass,
  31.         $abo));
  32.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n";   
  33.    
  34.     $req = $bdd->prepare('UPDATE coordonnes SET CB=?, crypto=?, expiration=? WHERE ID_client=?');
  35.     $req->execute(array(
  36.         $cb,
  37.         $crypto,
  38.         $expi));
  39.     echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 
  40.    
  41.     $resultat = $req->fetch();
  42.     // Redirection du visiteur vers la page du formulaire
  43.     header('location: Espace_membre2.php');
  44. ?>



 
Euh non...
 

Code :
  1. $req = $bdd->prepare('UPDATE adresse SET ville=?, adress=?, `code postal`=? WHERE ID_adresse=?)');
  2.     $req->execute(array(
  3.         $ville,
  4.         $adress,
  5.         $cp));



---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 08-06-2017 à 23:01:57    

Bah c'est la même chose pour la dernière requête dans ce cas là, non ? Parce que l'erreur pour le nombre de variable, j'ai la même pour cette requête que tu dis pourtant bonne.
Je ne comprends pas...  

Code :
  1. $req = $bdd->prepare('UPDATE coordonnes SET CB=?, crypto=?, expiration=? WHERE ID_client=?');
  2.     $req->execute(array(
  3.         $cb,
  4.         $crypto,
  5.         $expi));


Je ne peux pas ajouter le ID_client dans les champs à modifier étant donné que c'est grâce à lui que je sais où je vais insérer mes nouvelles infos.
 
Je viens aussi de voir qu'il y avait une parenthèse de trop dans la première requête, je sais pas si ça a vraiment un quelconque effet, est-ce que c'est ça que tu essayes de me faire voir depuis le début ?


---------------
Topal Achat/Vente | 1° Mod : [Workblog] Pendemic Mod | 2° Mod : [Workblog] Purple Evolution
Reply

Marsh Posté le 09-06-2017 à 18:00:28    

Dans la préparation de ta requête tu mets 4 points d'interrogation pour dire que la requête devra recevoir 4 paramètres.
Quand tu l’exécutes tu ne passes que 3 variables dans ton tableau de paramètres.
Il faut que lors de l’exécution le tableau de paramètres ait la même taille que le nombre de points d'interrogations.
 
Franchement je ne vois pas comment être plus clair. :/


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 09-06-2017 à 18:00:28   

Reply

Marsh Posté le 09-06-2017 à 21:19:55    

Oui, en fait, j'avais compris, j'ai juste pas réussi à m'exprimer.
 
Mais y'a un truc que je comprends pas, pourquoi est-ce que je dois ajouter une variable qui est celle de mon id alors que je ne veux pas le modifier ? C'est juste pour indiquer où doivent aller les nouvelles infos.
 
Donc en gros, pour que ça fonctionne, faut que j'ajoute ça à la suite de la liste de variable :
 

Code :
  1. $id_a = $_POST['id_a'];
  2. $id_c = $_POST['id_c'];


 
Puis ça :  

Code :
  1. $id_a


A la suite des variables de la première requête
 
Et enfin ça :  

Code :
  1. $id_c


A la suite des variables des deux autres requêtes ?


---------------
Topal Achat/Vente | 1° Mod : [Workblog] Pendemic Mod | 2° Mod : [Workblog] Purple Evolution
Reply

Marsh Posté le 09-06-2017 à 21:34:19    

Je ne sais pas comment est structurée ta bdd. Et je ne sais pas comment ta page de formulaire est gérée.
 
Dans la plupart des cas, les utilisateurs doivent être connectés pour pouvoir mettre à jour leurs informations. Quand un utilisateur se connecte on crée une variable de session qui stocke l'id de l'utilisateur. Ainsi quand il envoi ses nouvelles informations on cherche la bonne ligne à modifier dans la bdd grâce à l'id de l'utilisateur stocké dans la variable session.
 
Pour la mise à jour des informations, le plus simple (mais pas la meilleure solution) c'est de proposer un formulaire vide et de faire une requête d'update pour chaque champ rempli.
Après pour améliorer un peu, tu peux faire une requête qui interroge la bdd pour récupérer les données de l'utilisateur. Si une variable $_POST est alors vide, on remplace sa valeur par celle récupérée dans la bdd. Cela permet en suite de ne faire qu'une requête d'update avec toutes les infos dedans.
Tu peux aussi faire une gestion par blocs, etc. Il existe plusieurs solutions en fonction de la structure de ta bdd, de la structure des données, des attentes en terme de requêtes à effectuer, etc.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

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