Update mon profil

Résolu/Fermé
Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021 - 31 août 2021 à 13:10
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 1 sept. 2021 à 18:46
Bonjour,
j'ai un probleme pour modifier le profil dun utilisateur dans mon site web et je ne sais pas comment faire j'ai eesaye differentes methodes que j'ai vu sur le net ou a l;aide de d'un tutoriel mais rien ne fonctionne,pdans mon site il ya la page profil ou tous les infos de l'utilisateur son et au cas ou il voudreait modifier il ya un boutton (editer profil) et lorsque il clique dessus un formulaire modal apparait ou il remplit les element qu'ilsouhaite modifier,
voici mon code php pour modifier
   
<?php

//---------------------------------//
// Affichage des erreurs PHP
//---------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
session_start();
if(isset($_SESSION['id_utilisateur']))
$id_utilisateur =$_SESSION['id_utilisateur'];
if(!empty($id_utilisateur))
    {
          //---------------------------------//
          //connexion à la base avec activation des erreurs PDO
          //---------------------------------//
          try {
            $bdd = new PDO('mysql:host=localhost;dbname=afrijob', 'root', 'manuella2001');
          // Activation des erreurs PDO
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
            $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
          } catch (PDOException $e) {
            die('Erreur : ' . $e->getMessage());
          }
       $a = getPost('a');//pseudo//
          $b = getPost('b');//domaine//
          $c = getPost('c');//ville//
          $h = getPost('h');//email//
          $i = getPost('i');//site internet//
          $j = getPost('j');//numero de telephone//
          $l = getPost('l');//adresse//
          $req="(UPDATE `utilisateurs` SET site_web_pro='$i',pseudo='$a', telephone='$j',email='$h',
          domaine_pro= '$b',ville='$c',adresse_pro='$l id_utilisateur = '$id_utilisateur')";
          $req = $bdd->prepare($req);
          // $req = $bdd->execute($req);
            header('location:profil.php');
        }else{
          header('location:page de connexion/login.php');
        }
?>

et voici mon code html
                        <form action="profil_traitement.php" method="POST" enctype="multipart/form-data">
                            <div class="container my-4"  style=" text-align: center; ">
                                <div class="modal fade" id="modalSubscriptionForm" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
                                        aria-hidden="true">
                                <div class="modal-dialog" role="document">
                                    <div class="modal-content" style="overflow-y:scroll;">
                                        <div class="modal-header text-center">
                                        <h4 class="modal-title w-100 font-weight-bold">Editer votre profil</h4>
                                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                        <span aria-hidden="true">×</span>
                                        </button>
                                    </div>
                                    <div class="modal-body mx-3">
                                        <div class="md-form mb-5">
                                        <label for="text">pseudo</label>
                                        <input name="a" style=" border: 2px solid blue;" type="text" id="form3" class="form-control validate" placeholder="<?php  echo stripslashes($row["pseudo"]) ?>">
                                        </div>

                                        <div class="md-form mb-5">
                                        <label for="text">domaine</label>
                                        <input style=" border: 2px solid blue;" name="b" type="text" id="form3" class="form-control validate" placeholder="<?php  echo stripslashes($row["domaine_pro"]) ?>">
                                        </div>

                                        <div class="md-form mb-5">
                                        <label for="text">ville</label>
                                        <input name="c" style=" border: 2px solid blue;" type="text" id="form3" class="form-control validate" placeholder="<?php  echo stripslashes($row["ville"]) ?>">
                                        </div>

                                        <div class="md-form mb-5">
                                        <label for="text">ADRESSE</label>
                                        <input name="l" style=" border: 2px solid blue;" type="text" id="form3" class="form-control validate" placeholder="<?php  echo stripslashes($row["adresse_pro"]) ?>">
                                        </div>
                                        <div class="md-form mb-5">
                                        <label for="text">comment me contacter</label><br><br>
                                        <label for="text">email</label>
                                        <input name="h" style=" border: 2px solid blue;" type="email" id="form2" class="form-control validate" placeholder="<?php  echo stripslashes($row["email"]) ?>">

                                        <label for="text">site internet</label>
                                        <input name="i" style=" border: 2px solid blue;" type="url" id="form2" class="form-control validate" placeholder="<?php  echo stripslashes($row["site_web_pro"])?>">

                                        <label for="text">numerode telephone</label>
                                        <input name="j" style=" border: 2px solid blue;" type="tel" id="form2" class="form-control validate" placeholder="<?php  echo stripslashes($row["telephone"]) ?>">
                                        
                                        </div>
                                    </div>
                                    <div class="modal-footer d-flex justify-content-center">
                                        
                                        <input type="submit" name="submit" value="enregistrer"style=" background-color:blue;  border-radius: 10px;   width: 200px;  height: 50px; "> 
                                    </div>
                                </div>
                                </div>
                            </div>
                            <div class="text-center">
                                <a href="" class="btn btn-default btn-rounded mb-4" data-toggle="modal" data-target="#modalSubscriptionForm" style=" background-color: blue; border:black; color:white; border-radius: 15px;">Editer Profil</a>
                            </div>

                            </div>
                        </form> 




Configuration: Linux / Chrome 94.0.4606.20

8 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
31 août 2021 à 14:33
Bonjour,

Tu n'as pas mis en commentaire la bonne ligne ......
Tu as
    // $req = $bdd->execute($req);
            header('location:profil.php');


Alors que tu devrais avoir
    $req = $bdd->execute($req);
     //header('location:profil.php');


0
Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021
1 sept. 2021 à 12:11
bonjour,
j'ai essayer et sa ne foncyionne toujours pas.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
1 sept. 2021 à 12:34
Bonjour,

Suite aux modifications proposés par jordane45, quel est le message d'erreur qui s'affiche sur la page ?

Le problème vient surement de la requête sql utilisée dans la méthode prepare().
Il ne faut pas injecter directement les variables php $i, $a, $b, etc... dans la requête sql car celle-ci pourra planter si les variables php contiennent des caractères réservés en sql. C'est également une grosse faille de sécurité qui pourrait être exploitée pour consulter ou supprimer toutes les données de la base.

La bonne manière est d'utiliser des marqueurs dans la requête sql puis de substituer ces marqueurs par les valeurs des variables php via la méthode bindParam().
Un exemple sur la doc : https://www.php.net/manual/fr/pdo.prepared-statements.php
Tu pourras aussi trouver pleins de tuto à ce sujet sur le net en complément.
0
Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021
1 sept. 2021 à 12:47
j'ai essayer mais rien
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
1 sept. 2021 à 12:54
Pas très précis comme réponse.

Tu as essayés quoi ?
Qu'est-ce qui s'affiche sur la page ?
As tu modifié la requête avec des marqueurs ? Si oui, montre nous ton code modifié.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021
1 sept. 2021 à 13:34
ahh desolee ta repose a mit du temps a arriver chez moi
je vais donc tester ta methode merci
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 1 sept. 2021 à 13:41
Tu devrais avoir un message d'erreur.... lié à ta requête et à son execute...

ça devrait ressembler à un truc du genre :
$datas = [$i,$a,$j,$h,$b,$c,$l,$id_utilisateur];
 $sql =" UPDATE `utilisateurs` SET site_web_pro=?
                 ,pseudo=?
                  , telephone=? 
                  ,email= ? 
                 , domaine_pro= ? 
                 ,ville= ?
                 ,adresse_pro=? 
              WHERE id_utilisateur = ?  "; //Tu avais oublié un WHERE au passage ...

try{
  $prep = $bdd->prepare($sql);
  $req = $prep->execute($datas);
}catch(Exception $e){
  echo " Erreur : " . $e->getMessage();
}


0
Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021
1 sept. 2021 à 14:09
j'ai essaye ton code et j'ai comme erreur

Erreur : SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column `afrijob`.`utilisateurs`.`telephone` at row 1
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
1 sept. 2021 à 14:20
ça ne vient pas de mon code ... mais de la configuration de ta bdd et du format des données que tu essaies d'y insérer
0
Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021
1 sept. 2021 à 14:37
avec ca je na'ai aucune erreur mais pas de modification dans la base de donnee
    <?php
 
 //---------------------------------//
 // Affichage des erreurs PHP
 //---------------------------------//
 error_reporting(E_ALL);
 ini_set('display_errors', TRUE);
 ini_set('display_startup_errors', TRUE);
 
 if(isset($_POST['submit']))
            {
 
           //---------------------------------//
           //connexion à la base avec activation des erreurs PDO
           //---------------------------------//
           try {
             $bdd = new PDO('mysql:host=localhost;dbname=afrijob', 'root', 'manuella2001');
           // Activation des erreurs PDO
             $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
           // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
             $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
           } catch (PDOException $e) {
             die('Erreur : ' . $e->getMessage());
           }
           $id_utilisateur=$_SESSION['id_utilisateur'];
        $a = $_POST['a'];//pseudo//
           $b = $_POST['b'];//domaine//
           $c = $_POST['c'];//ville//
           $h = $_POST['h'];//email//
           $i = $_POST['i'];//site internet//
           $j = $_POST['j'];//numero de telephone//
           $l = $_POST['l'];//adresse//

           $re = [$i,$a,$j,$h,$b,$c,$l,$id_utilisateur];
 $datas = " UPDATE `utilisateurs` SET site_web_pro = ?
                 ,pseudo = ?
                  , telephone = ? 
                  ,email = ? 
                 , domaine_pro = ? 
                 ,ville = ?
                 ,adresse_pro = ? 
              WHERE id_utilisateur = ?  "; //Tu avais oublié un WHERE au passage ...

try{
  $prep = $bdd->prepare($sql);
  $req = $prep->execute(array($datas));
}catch(Exception $e){
  echo " Erreur : " . $e->getMessage();
}
            }
 ?>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
1 sept. 2021 à 14:49
Etrange que tu n'aies pas d'erreur...... tu sembles faire appel à une variable en session ... sans avoir l'instruction session_start au début de ton script...
Une fois cet oubli corrigé ... Fais donc un var_dump de $datas pour t'assurer que les variables à l'intérieur ( y compris l'id_utilisateur) sont bons...
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
1 sept. 2021 à 15:43
Attention aussi au nommage des variables (revoir l'exemple correct de jordane45) : $sql doit contenir la requête, $datas doit contenir le tableau des données, etc..
0
Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
1 sept. 2021 à 18:17
j'ai fais et j'ai fait un echo pour voir les variables
echo var_dump($datas) . "<br>";

voici le resultat
array(8) { [0]=> string(29) "https:///wwwpetersolution.com" [1]=> string(8) "daniella" [2]=> string(10) "0650214200" [3]=> string(15) "peter@gmail.com" [4]=> string(11) "agriculteur" [5]=> string(7) "foumbot" [6]=> string(7) "logpong" [7]=> string(1) "3" }
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524 > Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021
1 sept. 2021 à 18:42
A priori la colonne `telephone` en bdd est de type integer ("Incorrect integer value for column `utilisateurs`.`telephone`).
Mais le numéro de téléphone est enregistré dans une chaine de caractères (string(10) "0612345200"), d'où le message d'erreur.

Si tu enregistres le numéro de téléphone dans une colonne integer, tu vas en plus perdre le premier 0 non significatif pour un entier (le numéro 0612345200 sera enregistré sous la forme 612345200 si c'est un entier).
Tu pourras aussi avoir besoin d'enregistrer les numéros avec un indicatif plus tard (par exemple "+33612345200").

Le mieux serait donc changer le type de la colonne telephone en bdd pour utiliser un type de chaine de caractère (VARCHAR avec mysql par exemple).
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > Natha-2001 Messages postés 12 Date d'inscription jeudi 14 novembre 2019 Statut Membre Dernière intervention 15 septembre 2021
1 sept. 2021 à 18:46
Ca devrait être bon
Ajoutes ca après le execute
var_dump(['nbrows'=>$req->rowCount()]);

Et dis nous ce que ça te met.

Ps:ton id user est le 3 ... En bdd les valeurs ne changent pas ??

Au cas où, arrête et relance ton serveur php et mysql... Si tu bosses en local il y a parfois un "cache" qui fou le bordel...
0