Partage
  • Partager sur Facebook
  • Partager sur Twitter

Edition du profil: les doublons

    22 mars 2019 à 14:29:21

    Bonjour, j'ai suivi un tuto pour faire un espace membre avec un panel d'edition du profil pour chaque utilisateur mais malheureusement il n'y a pas eu de démonstration comment bloquer la création de doublons pour les noms d'utilisateurs ainsi que leur adresses emails. Est-ce que quelqu'un aurait la gentillesse de me l'expliquer ou rajouter dans le code? J'en serrait reconnaissant

    Voici le code php: 


    <?php
    session_start();
    
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=espace_membre;charset=utf8", "root", "");
    
    if(isset($_SESSION['id'])) {
       $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
       $requser->execute(array($_SESSION['id']));
       $user = $requser->fetch();
       if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
          $newpseudo = htmlspecialchars($_POST['newpseudo']);
          $insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id = ?");
          $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
          header('Location: profil.php?id='.$_SESSION['id']);
       }
       if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail']) {
          $newmail = htmlspecialchars($_POST['newmail']);
          $insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id = ?");
          $insertmail->execute(array($newmail, $_SESSION['id']));
          header('Location: profil.php?id='.$_SESSION['id']);
       } 
       if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2'])) {
          $mdp1 = sha1($_POST['newmdp1']);
          $mdp2 = sha1($_POST['newmdp2']);
          if($mdp1 == $mdp2) {
             $insertmdp = $bdd->prepare("UPDATE membres SET motdepasse = ? WHERE id = ?");
             $insertmdp->execute(array($mdp1, $_SESSION['id']));
             header('Location: profil.php?id='.$_SESSION['id']);
          } else {
             $msg = "Vos deux mdp ne correspondent pas !";
          }
       }
    
       if(isset($_POST['newpseudo']) AND $_POST['newpseudo'] == $user['pseudo'])
       {
        header('Location: profil.php?id='.$_SESSION['id']);
       }
    ?>
    • Partager sur Facebook
    • Partager sur Twitter

    Je recherche un mentor afin de mieux progresser dans l'apprentissage du PHP et JS. Je suis pas trop chiant :D

      22 mars 2019 à 14:33:13

      Au niveau SQL, tu dois passer une contrainte UNIQUE sur le champ name, email etc.

      https://www.w3schools.com/sql/sql_unique.asp
      • Partager sur Facebook
      • Partager sur Twitter
        22 mars 2019 à 14:38:03

        Mais si je le fais uniquement au niveau du SQL, l'utilisateur n'aura aucun message préventif lors du changement si ce dernier est un doublon, je me trompe?

        @Edit, en effet je viens de tester, ta solution marche mais l'utilisateur reçoit une action nulle quand il essaye de mettre un doublon. J'aurai aimé qu'il ait connaissance du problème 

        -
        Edité par KubaKosior 22 mars 2019 à 14:40:43

        • Partager sur Facebook
        • Partager sur Twitter

        Je recherche un mentor afin de mieux progresser dans l'apprentissage du PHP et JS. Je suis pas trop chiant :D

          22 mars 2019 à 14:42:13

          Lors de la soumission de ton formulaire et du traitement des données tu fais une condition avec dedans une requête SQL (SELECT) qui vérifie si le nom de l'utilisateur ou autre est déjà dans la BDD alors tu passe une erreur que tu affiche au niveau formulaire si tu souhaite prévenir l'utilisateur que le pseudo ou email est déjà utilisé.

          -
          Edité par Sony2K 22 mars 2019 à 14:43:01

          • Partager sur Facebook
          • Partager sur Twitter
            22 mars 2019 à 15:45:54

            Je vois mal le code sur le portable, mais déjà tu ne vérifie pas que le formulaire est bien envoyé (if(isset($_POST['nomduboutonsubmit'])) après je vois mal le reste pour le moment.

            Après on sécurise toujours au maximum (PHP, JS, SQL)

            Exemple :

            Tu vérifie qu'un mot de passe est identique en JS, l'utilisateur désactive JS, si tu fait bien le boulot tu vérifie aussi via PHP. Autre exemple aussi, avec l'adresse mail, tu vérifie en JS que c'est le bon format, en php aussi de plus tu souhaite qu'il soit unique alors tu vérifie en et aussi en SQL.
            • Partager sur Facebook
            • Partager sur Twitter
              22 mars 2019 à 15:48:44

              Très bien merci pour tes explications Sony. J'ai réussi à arranger le code pour que le cœur du système fonctionne mais j'ai un problème avec les messages d'erreurs. J'ai du ouvrir un nouveau topic car ici je ne pouvais pas poster le message y'a eu un bug.

              Le topic peut être fermé merci.

              • Partager sur Facebook
              • Partager sur Twitter

              Je recherche un mentor afin de mieux progresser dans l'apprentissage du PHP et JS. Je suis pas trop chiant :D

              Edition du profil: les doublons

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown