Édition de profil en PHP

Fermé
TitouanPrs Messages postés 47 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 27 juin 2019 - Modifié le 22 juil. 2018 à 22:21
TitouanPrs Messages postés 47 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 27 juin 2019 - 24 juil. 2018 à 15:28
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 :) ?
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
23 juil. 2018 à 01:14
0
TitouanPrs Messages postés 47 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 27 juin 2019
Modifié le 24 juil. 2018 à 14:47
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 juil. 2018 à 14:59
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
TitouanPrs Messages postés 47 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 27 juin 2019 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
Modifié le 24 juil. 2018 à 15:14
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 juil. 2018 à 15:07
Commence par remplacer les
 <?= 

par
 <?php 
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 juil. 2018 à 15:11
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 juil. 2018 à 15:11
0