Update BDD avec variable

Petit nouveau ! | 2 Messages

18 sept. 2016, 11:46

Bonjour à tous,

J'ai tenté de nombreuses syntaxes en cherchant sur différents forums mais sans succès...

MON PROBLEME :

j ai un formulaire avec des données utilisateurs (nom, prenom...).

Je n'arrive pas à les modifier par les valeurs entrées par l'utilisateur

Mon code pour le formulaire :
<section id="content">
 
        <?php
     $ServerConn = mysqli_connect("localhost","root","","bdd");
  
    
   if  (!$ServerConn) {
    echo ('La Connexion au serveur impossible !!!! non execute-->');
    exit;
   }
         
 
   $Requete='SELECT * FROM membres WHERE email="'.$_SESSION['email'].'" ';
 
 
 
  $Result = $ServerConn->query($Requete);
 
 
     if  (!$Result) {
     echo ('Requete Invalide!!');
       exit ;
   }
 
    while ($data = mysqli_fetch_array($Result)) {
    
      $id=$data['id'];
      $nom=$data['nom'];
      $prenom=$data['prenom'];
      $telephone=$data['telephone'];
      $email=$data['email'];
      $mdp=$data['mdp'];
      $date_de_naissance=$data['date_de_naissance'];
      $adresse_principale=$data['adresse_principale'];       
    }
 
 
 
?>
 
 
<FORM method="POST" action="modifier_mon_profil.php" enctype="multipart/form-data">
 
<div class="table-wrapper">
                  <table class="alt">
 
                    <tbody>
                      <tr>
                        <td>Nom</td>
                        <td> <input type="text" name="nom" id="nom" <?php echo 'value ="'.$nom.'"'; ?> placeholder="Nom"   /> </td>
                       
                      </tr>
                      <tr>
                        <td>Prénom</td>
                        <td> <input type="text" name="prenom" id="prenom" <?php echo 'value ="'.$prenom.'"'; ?> placeholder="Prenom" /></td>
                        
                      </tr>
                      <tr>
                        <td>Téléphone</td>
                        <td> <input type="text" name="tel" id="tel" <?php echo 'value ="'.$telephone.'"'; ?> placeholder="tel" /> </td>
                        <tr>
                        <td>Email</td>
                        <td> <input type="email" name="email" id="email" <?php echo 'value ="'.$email.'"'; ?> placeholder="Email" /> </td>
                       
                      </tr>
                      <tr>
                        <td>Mot de Passe</td>
                        <td> <input type="text" name="mdp" id="mdp" <?php echo 'value ="'.$mdp.'"'; ?> placeholder="mdp" /></td>
                        
                      </tr>
                      <tr>
                        <td>Date de Naissance</td>
                        <td> <input type="text" name="date_de_naissance" id="date_de_naissance" <?php echo 'value ="'.$date_de_naissance.'"'; ?> placeholder="date de naissance" /> </td>
                        <tr>
                        <td>Adresse</td>
                        <td>   <input type="text" name="adresse_principale" id="searchTextField" <?php echo 'value ="'.$adresse_principale.'"'; ?> placeholder="adresse principale" /> </td>
                       
                      </tr>
                      
                      
                      
                    </tbody>
     
                  </table>
 </div>
 
 
  <ul class="actions">
                        <li><input type="submit" value="Modifier" class="special" /></li>
                      </ul>
 
            </form>     
 
 
      
                </section>
A partir de ce formulaire, l'utilisateur peut modifier les données puis cliquer sur le bouton "Modifier" pour mettre à jour les données.

Le bouton "Modifier" reconduit vers ce code :
$ServerConn = mysqli_connect("localhost","root","","bdd");
    
   if  (!$ServerConn) {
    echo ('La Connexion au serveur impossible !!!! non execute-->');
    exit;
   }
//Recuperer les données de la  BDD ? Get.. pour pouvoir les exploiter ?
 
 
 $Requete='SELECT * FROM membres WHERE email="'.$_SESSION['email'].'" ';
 $Result = $ServerConn->query($Requete);
 
     if  (!$Result) {
     echo ('Requete Invalide!!');
       exit ;
   }
 
    while ($data = mysqli_fetch_array($Result)) {
    
      $id=$data['id'];
      $nom=$data['nom'];
      $prenom=$data['prenom'];
      $telephone=$data['telephone'];
      $email=$data['email'];
      $mdp=$data['mdp'];
      $date_de_naissance=$data['date_de_naissance'];
      $adresse_principale=$data['adresse_principale'];       
    }
 
 
//$requete = mysql_query('UPDATE membres SET nom ="' . $nom . '" WHERE email="'.$_SESSION['email'].'"') or die(mysql_error());
 
 
$sql = "UPDATE membres SET nom = 'Nom modifié par l'utilisateur, prenom = 'prenom modifié par l'utilisateur WHERE id = '$id' ";
 
 
 
if ($ServerConn->query($sql) === TRUE) {
    echo "Record updated successfully";
    header ('Location: mon_profil.php');
} else {
    echo "Error updating record: " . $ServerConn->error;
}
 
$ServerConn->close();
C'est à ce niveau que je bloque :

1
$sql = "UPDATE membres SET nom = 'Nom modifié par l'utilisateur', prenom = 'prenom modifié par l'utilisateur' WHERE id = '$id' ";
Au lieu de 'Nom modifié par l'utilisateur' je voudrais mettre ce qu'a entré l'utilisateur dans le formulaire ;-)



Comme je l'ai dit, j ai utilisé de nombreuses syntaxes (par ex : nom ="'. $nom. '" ...) mais sans jamais y parvenir

Si vous avez possibilité de m'aiguiller ce serait top (je suis dessus depuis plus d'une semaine j'avoue que j'aimerais passer à autre chose ;-) )

Bon dimanche !

PS : Je me demande s'il faudrait pas que je crée des nouvelle variable après le formulaire du genre :

$nouveaunom = $nom ;

où $nom serait la valeur écrite par l'utilisateur et du coup récupérer "$nouveaunom" pour update ma bdd.

cela vous semble t il correct ?

par dans la maniere de l'ecrire, je n'ai pas trop d'idée :-/

Mammouth du PHP | 2703 Messages

18 sept. 2016, 12:36

$sql = "UPDATE membres SET nom = '".$_POST['nom']."' WHERE id = '$id' ";
qui ne fonctionnera pas si la personne s'apellera O'hara.

Petit nouveau ! | 2 Messages

18 sept. 2016, 13:07

Bonjour Or1

cette ligne est grisée parce que j'avais fait un test mais celle que je tente en ce moment c'est celle du dessus :
$sql = "UPDATE membres SET nom = 'Nom modifié par l'utilisateur, prenom = 'prenom modifié par l'utilisateur WHERE id = '$id' ";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 sept. 2016, 09:31

salut,

il faut tester tes requêtes dans un client SQL (phpmyadmin, heidiSQL etc.) lorsque qu'elle te pose problème.
UPDATE membres SET nom = 'Nom modifié par l'utilisateur, prenom = 'prenom modifié par l'utilisateur WHERE id = '$id'
Dans ton cas tu ne fermes pas les chaines de caractères.

sinon la réponse de or1 est correct il faut utiliser les variables dans le tableau $_POST.
Ce qu'il indique, maladroitement, c'est que ton code est sensible aux injections SQL (volontaire ou non) et que c'est pour cela qu'il ne faut jamais utiliser directement une données fournit par l'utilisateur dans une requête SQL.
Il faut faire une "action de protection" sur les données.
deux solutions s'offre à toi :
- mysqli_real_escape_string
- une requête préparée souvent détournée pour cela.

je penche pour la première solution ;)


@+
Il en faut peu pour être heureux ......