Édition de profil en PHP

TitouanPrs Messages postés 49 Statut Membre -  
TitouanPrs Messages postés 49 Statut Membre -
Bonjour, je suis entrain de créer une page d'édition de profil utilisateur, mais lorsque j'exécute le code, j'ai plusieurs erreurs :
- Notice: Undefined index: username in C:\wamp64\www\projet\dashboard\settings.php on line 7
- Notice: Undefined index: username_confirm in C:\wamp64\www\projet\dashboard\settings.php on line 7
- Notice: Undefined index: password in C:\wamp64\www\BurgerQuiz\projet\settings.php on line 16
- Notice: Undefined index: password_confirm in C:\wamp64\www\projet\dashboard\settings.php on line 16
- Notice: Undefined index: password in C:\wamp64\www\projet\dashboard\settings.php on line 20

Mon code :
<?php
  session_start();
  require_once('../includes/functions.php');
  require_once('../includes/database.php');
 
  if(!empty($_POST['username']) || $_POST['username'] != $_POST['username_confirm']) {
    $_SESSION['flash']['danger'] = "Les noms d'utilisateur que vous avez indiqué ne correspondent pas.";
  } else {
    $user_id = $_SESSION['auth']->id;
    $username = $_SESSION['auth']->username;
    $pdo->prepare('UPDATE users SET username = ? WHERE id = ?')->execute([$username, $user_id]);
    $_SESSION['flash']['success'] = "Votre nom d'utilisateur a bien été mis à jour.";
  }
 
  if(!empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']) {
    $_SESSION['flash']['danger'] = "Les mots de passe que vous avez indiqué ne correspondent pas.";
  } else {
    $user_id = $_SESSION['auth']->id;
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
    $pdo->prepare('UPDATE users SET password = ? WHERE id = ?')->execute([$password, $user_id]);
    $_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour.";
  }
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
    <meta name="description" content="Burger Quiz"/>
    <meta name="author" content="Titouan Paris"/>
    <link rel="stylesheet" href="style.css"/>
    <link rel="icon" href="img/icon.png"/>
    <title>Burger Quiz - Mon compte</title>
  </head>
  <body>
    <?php
      include_once('../includes/header.php');
      access_denied_dashboard();
    ?>
      <h1>Mon compte Burger Quiz</h1>
    <?php
      include_once('../includes/header_dashboard.php');
    ?>
      <h2>Mes paramètres :</h2>
 
      <p>Nom d'utilisateur :</p>
      <form class="settings_username" action="" method="post">
        <table>
          <tr>
            <td>
              <label for="username_now">Pseudonyme actuel</label>
            </td>
            <td>
              <input type="text" name="username_now" id="username_now" value="<?= $_SESSION['auth']->username ?>" disabled>
            </td>
          </tr>
          <tr>
            <td>
              <label for="username">Nouveau nom d'utilisateur</label>
            </td>
            <td>
              <input type="text" name="username" id="username" placeholder="Nouveau pseudonyme">
            </td>
          </tr>
          <tr>
            <td>
              <label for="username_confirm">Confirmer nouveau nom d'utilisateur</label>
            </td>
            <td>
              <input type="text" name="username_confirm" id="username_confirm" placeholder="Nouveau pseudonyme">
            </td>
          </tr>
          <tr>
            <td></td>
            <td>
              <input type="submit" name="submit" value="Modifier">
            </td>
          </tr>
        </table>
      </form>
 
      <p>Adresse email :</p>
      <form class="settings_email" action="" method="post">
        <table>
          <tr>
            <td>
              <label for="email_now">Adresse email actuelle</label>
            </td>
            <td>
              <input type="email" name="email_now" id="email_now" value="<?= $_SESSION['auth']->email ?>" disabled>
            </td>
          </tr>
          <tr>
            <td>
              <label for="email">Nouvelle adresse email</label>
            </td>
            <td>
              <input type="email" name="email" id="email" placeholder="Nouvelle adresse email">
            </td>
          </tr>
          <tr>
            <td>
              <label for="email_confirm">Confirmer nouvelle adresse email</label>
            </td>
            <td>
              <input type="email" name="email_confirm" id="email_confirm" placeholder="Nouvelle adresse email">
            </td>
          </tr>
          <tr>
            <td></td>
            <td>
              <input type="submit" name="submit" value="Modifier">
            </td>
          </tr>
        </table>
      </form>
 
      <p>Mot de passe :</p>
      <form class="settings_password" action="" method="post">
        <table>
          <tr>
            <td>
              <label for="password">Nouveau mot de passe</label>
            </td>
            <td>
              <input type="password" name="password" id="password" placeholder="Nouveau mot de passe">
            </td>
          </tr>
          <tr>
            <td>
              <label for="password_confirm">Confirmer nouveau mot de passe</label>
            </td>
            <td>
              <input type="password" name="password_confirm" id="password_confirm" placeholder="Nouveau mot de passe">
            </td>
          </tr>
          <tr>
            <td></td>
            <td>
              <input type="submit" name="submit" value="Modifier">
            </td>
          </tr>
        </table>
      </form>
 
    <?php
      include_once('../includes/footer.php');
    ?>
  </body>
</html>


Pouvez-vous m'aider svp :) ?

2 réponses

  1. TitouanPrs Messages postés 49 Statut Membre
     
    Merci :)

    J'ai réussi à le faire mais il m'affiche l'ID avant le username :
    https://drive.google.com/file/d/1b3sRH5tS8O0wjB2bEV2nYs-_sp3k5NhW/view?usp=drive_open
    Je souhaiterais enlever cet ID d'avant le username, afin que seul le username soit affiché.

    Si vous voulez le code complet :
    https://drive.google.com/drive/folders/1VlDVjcJNI0quzW6xBivs9Q0QNKbS87cu?usp=drive_open

    Merci d'avance :)
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Merci de poster ton code directement sur le forum ( en utilisant les balises de code : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code )

      De plus, seul le code qui correspond à ton image nous interesse pour l'instant.

      AU passage, avant de voir si le souci d'affichage ( de ce "1") vient du code... as tu vérifié directement dans ta BDD ce que contiennent tes champs ?
      0
    2. TitouanPrs Messages postés 49 Statut Membre > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Voici le code correspondant à l'image :
      <?php
        session_start();
        require_once('includes/functions.php');
        require_once('includes/database.php');
      
        // Modification Pseudonyme
        if(isset($_POST['username']) && $_POST['username_confirm']) {
          if(empty($_POST['username'] || $_POST['username_confirm'])) {
            $_SESSION['flash']['danger'] = "Vous n'avez pas rempli tous les champs.";
          } elseif($_POST['username'] != $_POST['username_confirm']) {
            $_SESSION['flash']['danger'] = "Les pseudonymes que vous avez indiqué sont différents.";
          } elseif(!preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])) {
            $_SESSION['flash']['danger'] = "Le pseudonyme que vous avez indiqué n'est pas valide.";
          } else {
            $user_id = $_SESSION['auth']->id;
            $username = $_POST['username'];
            $pdo->prepare('UPDATE users SET username = ? WHERE id = ?')->execute([$username, $user_id]);
            header('Location: settings.php');
            $_SESSION['flash']['success'] = "Votre nom d'utilisateur a bien été mis à jour.";
            exit();
          }
      
        // Modification Adresse email
        } elseif(isset($_POST['email']) && $_POST['email_confirm']) {
          if(empty($_POST['email'] || $_POST['email_confirm'])) {
            $_SESSION['flash']['danger'] = "Vous n'avez pas rempli tous les champs.";
          } elseif($_POST['email'] != $_POST['email_confirm']) {
            $_SESSION['flash']['danger'] = "Les adresses email que vous avez indiqué sont différents.";
          } elseif(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $_SESSION['flash']['danger'] = "L'adresse email que vous avez indiqué n'est pas valide.";
          } else {
            $user_id = $_SESSION['auth']->id;
            $email = $_POST['email'];
            $pdo->prepare('UPDATE users SET email = ? WHERE id = ?')->execute([$email, $user_id]);
            header('Location: settings.php');
            $_SESSION['flash']['success'] = "Votre adresse email a bien été mise à jour.";
            exit();
          }
      
        // Modification Mot de passe
        } elseif(isset($_POST['password']) && $_POST['password_confirm']) {
          if(empty($_POST['password'] || $_POST['password_confirm'])) {
            $_SESSION['flash']['danger'] = "Vous n'avez pas rempli tous les champs.";
          } elseif($_POST['password'] != $_POST['password_confirm']) {
            $_SESSION['flash']['danger'] = "Les mots de passe que vous avez indiqué sont différents.";
          } else {
            $user_id = $_SESSION['auth']->id;
            $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
            $pdo->prepare('UPDATE users SET password = ? WHERE id = ?')->execute([$password, $user_id]);
            header('Location: settings.php');
            $_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour.";
            exit();
          }
        }
      ?>
      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
          <meta name="description" content="Burger Quiz"/>
          <meta name="author" content="Titouan Paris"/>
          <link rel="stylesheet" href="style.css"/>
          <link rel="icon" href="img/icon.png"/>
          <title>Burger Quiz - Mon compte</title>
        </head>
        <body>
          <?php
            include_once('includes/header.php');
            access_denied_dashboard();
          ?>
            <h1>Mon compte Burger Quiz</h1>
          <?php
            include_once('includes/header_dashboard.php');
          ?>
            <h2>Mes paramètres :</h2>
      
            <p>Nom d'utilisateur :</p>
            <form class="settings_username" action="" method="post">
              <table>
                <tr>
                  <td>
                    <label for="username_now">Pseudonyme actuel</label>
                  </td>
                  <td>
                    <input type="text" name="username_now" id="username_now" value="<?=
                      $user_id = $_SESSION['auth']->id;
                      $req = $pdo->prepare('SELECT username FROM users WHERE id = ?');
                      $req->execute([$user_id]);
                      $username_db = $req->fetch();
                      echo($username_db->username);
                    ?>" disabled>
                  </td>
                </tr>
                <tr>
                  <td>
                    <label for="username">Nouveau nom d'utilisateur</label>
                  </td>
                  <td>
                    <input type="password" name="username" id="username" placeholder="Nouveau pseudonyme">
                  </td>
                </tr>
                <tr>
                  <td>
                    <label for="username_confirm">Confirmer nouveau nom d'utilisateur</label>
                  </td>
                  <td>
                    <input type="text" name="username_confirm" id="username_confirm" placeholder="Nouveau pseudonyme">
                  </td>
                </tr>
                <tr>
                  <td></td>
                  <td>
                    <input type="submit" name="submit" value="Modifier">
                  </td>
                </tr>
              </table>
            </form>
      
            <p>Adresse email :</p>
            <form class="settings_email" action="" method="post">
              <table>
                <tr>
                  <td>
                    <label for="email_now">Adresse email actuelle</label>
                  </td>
                  <td>
                    <input type="email" name="email_now" id="email_now" value="<?=
                      $user_id = $_SESSION['auth']->id;
                      $req = $pdo->prepare('SELECT email FROM users WHERE id = ?');
                      $req->execute([$user_id]);
                      $email_db = $req->fetch();
                      echo($email_db->email);
                    ?>" disabled>
                  </td>
                </tr>
                <tr>
                  <td>
                    <label for="email">Nouvelle adresse email</label>
                  </td>
                  <td>
                    <input type="email" name="email" id="email" placeholder="Nouvelle adresse email">
                  </td>
                </tr>
                <tr>
                  <td>
                    <label for="email_confirm">Confirmer nouvelle adresse email</label>
                  </td>
                  <td>
                    <input type="email" name="email_confirm" id="email_confirm" placeholder="Nouvelle adresse email">
                  </td>
                </tr>
                <tr>
                  <td></td>
                  <td>
                    <input type="submit" name="submit" value="Modifier">
                  </td>
                </tr>
              </table>
            </form>
      
            <p>Mot de passe :</p>
            <form class="settings_password" action="" method="post">
              <table>
                <tr>
                  <td>
                    <label for="password">Nouveau mot de passe</label>
                  </td>
                  <td>
                    <input type="password" name="password" id="password" placeholder="Nouveau mot de passe">
                  </td>
                </tr>
                <tr>
                  <td>
                    <label for="password_confirm">Confirmer nouveau mot de passe</label>
                  </td>
                  <td>
                    <input type="password" name="password_confirm" id="password_confirm" placeholder="Nouveau mot de passe">
                  </td>
                </tr>
                <tr>
                  <td></td>
                  <td>
                    <input type="submit" name="submit" value="Modifier">
                  </td>
                </tr>
              </table>
            </form>
      
          <?php
            include_once('includes/footer.php');
          ?>
        </body>
      </html>
      


      Le "1" correspond à l'ID de l'utilisateur.
      Oui j'ai bien vérifié ma base de données.

      Voici son contenu si vous souhaitez :
      https://drive.google.com/file/d/1okkUOnn1uIx4sgX2MxtuvtYRCDVQ1Zk6/view?usp=drive_open
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Commence par remplacer les
       <?= 

      par
       <?php 
      0
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Je t'invite également à gérer correctement les erreurs PDO
      https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

      Et sinon...
      pourquoi faire plusieurs requêtes alors qu'une seule suffirait ??
       $req = $pdo->prepare('SELECT username FROM users WHERE id = ?');
      
      
        $req = $pdo->prepare('SELECT email FROM users WHERE id = ?');
      


      $sql = "SELECT username, email 
                  FROM users 
                 WHERE id = ?"
      
      try{
        $req = $pdo->prepare($sql);
        $req->execute([$user_id]);
        $user = $req->fetch();
      }catch(Exception $e){
         echo " Erreur : ".$e->getMessage();
      }
      
      0