UPDATE PHP

Default
,

Bonjour,

Voila je rencontre un petit problème avec mon code.

Je veux mettre à jour mes informations mais j'ai des soucis d'affichage. Avec mon code je parviens à modifier les données dans la base de donnée mais il ne se passe rien à l'affichage, rien ne change et c'est toujours affiché les anciennes données, c'est embêtant...

<?php
session_start();
  require ('../inc/db.php');
  require('../inc/functions.php');
  if(!empty($_POST['mot_de_passe_restaurateur'])) {
    $id_restaurateur=$_SESSION['restaurateur']['id'];
    if($_POST['mot_de_passe_restaurateur'] == $_POST['mot_de_passe_confirm']){
        if(empty($_POST['mot_de_passe_restaurateur'] && $_POST['mot_de_passe_confirm'])){
          $variable_inutile = 0;
        }
        $mot_de_passe_restaurateur = hash('sha256',$_POST['mot_de_passe_restaurateur']);
        $pdo->prepare('UPDATE RESTAURATEUR SET mot_de_passe = ? WHERE id = ?')->execute([$mot_de_passe_restaurateur, $id_restaurateur]);
        $_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour";
      }else{
        $_SESSION['flash']['danger'] = "Veuillez resaisir votre mot de passe";
      }
  }
  if(!empty($_POST['mail_restaurateur']) && filter_var($_POST['mail_restaurateur'], FILTER_VALIDATE_EMAIL)){
    $mail_restaurateur=checkInput($_POST['mail_restaurateur']);
    $q = 'SELECT id FROM users WHERE mail_restaurateur = ?';
    $req = $pdo->prepare($q);
    $req->execute([$_POST['mail_restaurateur']]);
    $results = $req->fetchAll();
    if(count($results) > 0){
      $_SESSION['flash']['danger'] = "Votre mail est déjà pris";
    }else {
      $pdo->prepare('UPDATE RESTAURATEUR SET mail_restaurateur = ? WHERE id ?')-> execute([$mail_restaurateur, $id_restaurateur]);
      $_SESSION['flash']['success'] = "Votre mail a bien été mis à jour";
    }
  }
    if(!empty($_POST['prenom_restaurateur']) && !empty($_POST['nom_restaurateur']) && !empty($_POST['telephone_restaurateur'])){
      $success = true;
      $id_restaurateur = $_SESSION['restaurateur']['id'];
      $prenom_restaurateur = checkInput($_POST['prenom_restaurateur']);
      $nom_restaurateur = checkInput($_POST['nom_restaurateur']);
      $telephone_restaurateur = checkInput($_POST['telephone_restaurateur']);

      if(strlen($prenom_restaurateur)<2 || strlen($prenom_restaurateur)>35){
        $success=false;
      }
      if(strlen($nom_restaurateur)<2 || strlen($nom_restaurateur)>35){
        $success = false;
      }
      if(!ctype_digit($telephone_restaurateur)){
        $success=false;
      }
      if($success==true){
        $pdo->prepare('UPDATE RESTAURATEUR SET prenom_restaurateur = ?,nom_restaurateur = ?,telephone_restaurateur = ? WHERE id = ?')->execute([$prenom_restaurateur,$nom_restaurateur,$telephone_restaurateur, $id_restaurateur]);
        $_SESSION['flash']['success'] = "Vos informations ont bien été mis à jour";
      } else {
          $_SESSION['flash']['danger'] = "Veuillez saisir le formulaire correctement";
      }
    }

?>

<!DOCTYPE html>
<html lang ="en">
    <head>
      <title>Mon compte</title>
      <meta charset="utf-8">
        <script src="../Bootstrap/jQuery/jquery-3.4.1.min.js"></script>
      <script src="../Bootstrap/bootstrap-4.4.1-dist/js/bootstrap.min.js"></script>
        <link rel="stylesheet" type="text/css" href="../Bootstrap/bootstrap-4.4.1-dist/css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="../Bootstrap/style.css">
    </head>
    <body>
    <main>
      <header>
        <?php include ('inc_restaurateur/header_restaurateur.php'); ?>
      </header>
      <div class="container col">
        <div class = "row">
          <div class ="col align-self-center ">
              <h1 class="text-center section-title">Mes informations</h1>
          </div>
          <div class="col-md-7">
            <form action ="#" method="post">
              <h2>Bonjour <?php echo $_SESSION['restaurateur']['prenom_restaurateur'] . ' ' . $_SESSION['restaurateur']['nom_restaurateur']; ?> ! </h2> <br>
              <div class="form-row">
                <div class="form-group col-md-5">
                    <label >Prénom : </label>
                    <input type="name" name="prenom_restaurateur" class="form-control" value="<?php echo $_SESSION['restaurateur']['prenom_restaurateur'] ; ?> ">
                  </div>
                <div class="form-group col-md-5">
                  <label >Nom : </label>
                  <input type="name" name="nom_restaurateur" class="form-control" value="<?php echo  $_SESSION['restaurateur']['nom_restaurateur'] ; ?> ">
                </div>
              </div>
                <div class="form-row">
                  <div class="form-group col-md-5">
                    <label >Mot de passe : </label>
                    <input type="password" class="form-control"  placeholder="Changer de mot de passe" name="mot_de_passe_restaurateur">
                  </div>
                  <div class="form-group col-md-5">
                    <label >Confirmation de mot de passe : </label>
                    <input type="password" class="form-control"  placeholder="Confirmation de mot de passe" name="mot_de_passe_confirm">
                  </div>
                </div>
                <div class="form-row">
                  <div class="form-group col-md-5">
                    <label>Téléphone/Portable : </label><br>
                    <input type="tel" name= "telephone_restaurateur" class="form-control" value="<?php echo  $_SESSION['restaurateur']['telephone_restaurateur'] ; ?> ">
                  </div>
                </div>
                <div class="form-row">
                  <div class="form-group col-md-10">
                    <label>Mail : </label><br>
                    <input type="tel" name= "mail_restaurateur" class="form-control" value="<?php echo  $_SESSION['restaurateur']['mail_restaurateur'] ; ?> ">
                  </div>
                </div>
                <div class="text-center" style="margin:20px;">
                  <button type="submit" class="btn btn-outline-success color-00E676">Modifier</button><br><br>
                </div>
            </form>
            </div>
           </div>
          </div>

      <?php include 'inc_restaurateur/footer.php'; ?>

    </main>
  </body>
</html>

Et aussi je ne parviens pas à modifier une photo
Voici mon code :

    <?php
        session_start();
        require('inc_restaurateur/db.php');
        require('../inc/functions.php');
        if(!empty($_GET['id'])){
          $id = $_GET['id'];
        }
      //  var_dump($id);
      $q = "SELECT * FROM RESTAURANT WHERE id = $id";
      $req = $pdo->prepare($q);
      $req->execute(array($id));
      $results = $req->fetch();

      if(!empty($_FILES['images']['types']))
      {
        $isUploadSuccess = true;
        $id = $_GET['id'];
        $acceptable = [
          'image/jpeg',
          'image/png',
          'image/gif',
          'image/jpg'
        ];
        if(!in_array($_FILES['image']['type'], $acceptable)) {
          $isUploadSuccess = false;
          header('location: ../list_restaurant.php?msg=*Le format du fichier n\'est pas valide');
          exit;
        }
        $maxsize = 1024 * 1024;
        if($_FILES['image']['size']>$maxsize){
          $isUploadSuccess = false;
          header('location : ../list_restaurant.php?msg=*Le fichier est trop volumineux');
          exit;
        }
        $path = '../image_restaurant';
        if(!file_exists($path)){
          mkdir($path, 0777, true);
        }
        $filename = $_FILES ['image']['name'];

        $temp = explode('.', $filename);
        $extension = end($temp);
        $timestamp = time();
        $filename = 'image-' . $timestamp . '.' . '$extension';

        $chemin_image =$path . '/' . $filename;
        move_uploaded_file($_FILES['image']['tmp_name'], $chemin_image);
        if($isUploadSuccess==true){
          $statement = $pdo->prepare("UPDATE RESTAURANT SET image_restaurant = ? WHERE id = ?");
          $statement->execute(array($nom_restaurant));
        }
      }

      if(!empty($_POST))
      {
        $nom_restaurant = checkInput($_POST['nom_restaurant']);
        $adresse_restaurant = checkInput($_POST['adresse_restaurant']);
        $ville_restaurant = checkInput($_POST['ville_restaurant']);
        $telephone_restaurant = checkInput($_POST['telephone_restaurant']);
        $zip_code_restaurant = checkInput($_POST['zip_code_restaurant']);
        $site_web = $_POST['site_web'];
        $isSuccess = true;
        $id = $_GET['id'];

        if(empty($nom_restaurant))
        {
            $_SESSION['flash']['danger'] = 'Ce champ ne peut pas être vide';
            $isSuccess = false;
        }
        if(empty($adresse_restaurant))
        {
            $_SESSION['flash']['danger'] = 'Ce champ ne peut pas être vide';
            $isSuccess = false;
        }
        if(empty($ville_restaurant))
        {
            $_SESSION['flash']['danger'] = 'Ce champ ne peut pas être vide';
            $isSuccess = false;
        }

        if(empty($telephone_restaurant))
        {
            $_SESSION['flash']['danger'] = 'Ce champ ne peut pas être vide';
            $isSuccess = false;
        }
        if(empty($zip_code_restaurant))
        {
            $_SESSION['flash']['danger'] = 'Ce champ ne peut pas être vide';
            $isSuccess = false;
        }
        if(empty($site_web))
        {
            $_SESSION['flash']['danger'] = 'Ce champ ne peut pas être vide';
            $isSuccess = false;
        }

          if($isSuccess==true)
            {
                $statement = $pdo->prepare("UPDATE RESTAURANT set nom_restaurant = ?, adresse_restaurant = ?, telephone_restaurant = ?, zip_code_restaurant = ?,ville_restaurant=?,site_web =?  WHERE id = ?");
                $statement->execute(array($nom_restaurant,$adresse_restaurant,$telephone_restaurant,$zip_code_restaurant,$ville_restaurant,$site_web,$id));
                $_SESSION['flash']['success']="Les modifications ont bien été enregistrées";

            }

            // header("Location: index.php");
        }    // exit;
      ?>

<!DOCTYPE html>
<html lang ="en">
  <head>
    <title>Modifier</title>
    <meta charset="utf-8">
    <script src="../Bootstrap/jQuery/jquery-3.4.1.min.js"></script>
    <script src="../Bootstrap/bootstrap-4.4.1-dist/js/bootstrap.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../Bootstrap/bootstrap-4.4.1-dist/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="../Bootstrap/style.css">


  </head>
  <body>
    <header>
        <?php include ('inc_restaurateur/header_restaurateur.php'); ?>
    </header>
    <main>
      <div class="block-center col align-self-center">
        <div class="section-title text-center">
          <h1>Modification du restaurant</h1>
        </div>

          <form action="#" method="POST" enctype="multipart/form-data">
            <div class="form-col col-xl-5 col-lg-6 col-md-8 col-sm-10 mx-auto ">
              <div class="form-group col">
                <img src="<?php echo '../image_restaurant/'.$results['image_restaurant'];?>" width="280px", height="200px" alt="Photo du restaurant"> <br><br>
                <input type="file" name="image">
              </div>
              <div class="form-row">
                <div class="form-group col" >
                  <label> Nom du restaurant :  </label>
                  <input class="form-control" type="text" name="nom_restaurant" value="<?php echo $results['nom_restaurant']; ?>" >
                </div>
              </div>
            <div class="form-row">
              <div class="form-group col">
                <label> Adresse du restaurant :  </label>
                <input class="form-control" type="text" name="adresse_restaurant" value="<?php echo $results['adresse_restaurant']; ?>" required>
              </div>
            </div>
            <div class="form-row">
              <div class="form-group col">
                <label> Téléphone :  </label>
                <input class="form-control" type='text' name="telephone_restaurant" value="<?php echo $results['telephone_restaurant']; ?>" required>
              </div>
            </div>
            <div class="form-row">
              <div class="form-group col">
                <label >Ville : </label>
                <input name="ville_restaurant" type="text" class="form-control" value="<?php echo $results['ville_restaurant']; ?>">
              </div>
            </div>
            <div class="form-row">
              <div class="form-group col">
                <label >Code postal : </label>
                <input name="zip_code_restaurant" type="text" class="form-control" value="<?php echo $results['zip_code_restaurant']; ?>">
              </div>
            </div>
            <div class="form-row">
              <div class="form-group col-md-12">
                <label for="">Mail du restaurant : </label>
                <input type="text" name="mail_restaurant" class="form-control"placeholder="Exemple:biocook.pro@gmail.com" value="<?php echo $results['mail_restaurant']; ?>">
              </div>
            </div>
            <div class="form-row">
              <div class="form-group col-md-12">
                <label for="">Site Web du restaurant : </label>
                <input type="text" name="site_web" class="form-control"placeholder="Exemple:biocook.pro@gmail.com" value="<?php echo $results['site_web']; ?>">
              </div>
            </div>
            <div class="form-row">
              <div class="form-group col">
                <div class="text-center">
                  <input type="submit" value="Modifier" class=" btn btn-outline-success color-00E676">

                </div>
              </div>
            </div>
          </div>
        </form>
        <a href="account_restaurateur.php">
          <button type="submit" class="btn btn-outline-success color-00E676">Retour</button>
        </a>
    </main>
      <?php include('inc_restaurateur/footer.php'); ?>
  </body>
</html>

Merci d'avoir lu ^-^
Si quelqu'un pourrait m'éclaircir, merci.
Bonne journée.

17 Réponse

40917
,

Bonjour,

  • Activation des erreurs PDO
  • Pourquoi ceci n'est pas préparer :
 $q = "SELECT * FROM RESTAURANT WHERE id = $id";
 $req = $pdo->prepare($q);
  $req->execute(array($id));
  • Que fait la fonction checkinput ?
Default
,

Mes erreurs PDO sont activé
Ma requête est préparé :

$q = "SELECT * FROM RESTAURANT WHERE id = $id";
 $req = $pdo->prepare($q);
  $req->execute(array($id));

Voici la fonction checkInput

function checkInput($data)
{
  $data = trim($data);
  $data = stripslashes($data); // supprime les antislash
  $data = htmlspecialchars($data);
  return $data;
}
40917
,

Non ta requête n'est pas préparer, regarde par rapport aux autres et dis-moi où tu vois le marqueurs ?
Pas de htmlspecialchars sur les données entrée en BDD, c'est pour l'affichage
Du coup j'ai un doute sur l'activation des erreurs PDO, je peux les voirs (en cachant tes identifiants, bien sur)

J'ai relu l'énoncé, tu dis que tes données sont bien validé mais que quand tu reviens sur le formulaire, tu as les anciennes données ? (As-tu mis à jour la sessions avec les nouvelles données puisque tu ne recharges pas la page ?)

Default
,

Du coup ça ne s'affichait pas parce qu'il y avait des htmlspecialchars ?

Si j'ai bien comprit la requête avec marqueur devient ça ? :

$q = "SELECT * FROM RESTAURANT WHERE id = ?";
 $req = $pdo->prepare($q);
  $req->execute(array($id));

Voici mon db.php

<?php
try{
    $pdo = new PDO('mysql:host=localhost;dbname=Biocook', 'root', 'root', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
}catch(Exception $e){
    die('Erreur : ' . $e->getMessage());
}

?>

40917
,

Non le html.. prtège des failles XSS à l'affichage mais altère les données qui sont en BDD
Oui c'est mieux pour le prépare et ok pour l'activation des erreurs PDO

J'ai relu l'énoncé, tu dis que tes données sont bien validé mais que quand tu reviens sur le formulaire, tu as les anciennes données ? (As-tu mis à jour la sessions avec les nouvelles données puisque tu ne recharges pas la page ?)

Default
,

D'accord, non je n'ai pas mis à jour la session
Je ne sais pas comment mettre à jour une session. Est-ce-que je dois faire un session_destroy puis un session_start ?

40917
,

un session = avec la bonne valeur juste après ton update

Default
,

C'est à dire comme ceci :

$_SESSION['restaurateur']['nom_restaurateur'] = $_POST['nom_restaurateur'];

Et aussi j'ai préparé ma requête comme il fallait mais l'image ne sait toujours pas mis à jour dans la bdd :/

40917
,

oui,
regarde l'update, tu ne passes que le nom, pas l'id
il serait bien de récupérer le retour de move_upload_file et de le mettre dans $isUploadSuccess
Même si cela marche en local et souvent en ligne, c'est "Loccation" avec un L majuscules

Default
,

C'est bon mon affichage marche correctement merci beaucoup
Mais j'y parviens toujours pas avec l'image ...

40917
,

Pourquoi tu sauvegardes le nom du restaurant pour l'image dans la BDD, ça ne serait pas plutôt le $filename ?

Default
,

Oui, j'ai vu cette erreur aussi mais même après cette modification je n'ai pas réussis à UPDATE

40917
,

c'est à dire

Default
,

Je voulais dire que ça ne met toujours pas à jours dans la base de donnée, je n'arrive pas à voir pourquoi :/

  if($isUploadSuccess==true){
          $statement = $pdo->prepare("UPDATE RESTAURANT SET image_restaurant = ? WHERE id = ?");
          $id = $_GET['id'];
          $statement->execute(array($filename,$id));
        }
40917
,

est-ce que tu rentres dans le if ?
que contient $filename (var_dump) ?

Default
,

C'est bon j'ai trouvé il fallait juste mettre au tout début du code

if(!empty($_FILES))...

et non

if(!empty($_FILES)['['images']['types']){...

Merci beaucoup pour ton aide ! Bonne soirée ^-^

40917
,

Avec plaisir,
Tu peux passer ton sujet en résolu