Partage
  • Partager sur Facebook
  • Partager sur Twitter

Update variable ko

Sujet résolu
    27 février 2021 à 18:05:32

    Bonjour,

    Je n'arrive pas à modifier une variable en table...

    <?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    session_start();
    // connexion a la bdd
    require_once 'config.php';
    /* Initialisation de la variable du message de réponse*/
    $err_inscription= null;
    $avatar= "/avatars/0001.png";
    		$pdostat = $bdd->prepare("UPDATE membres SET avatar = :avatar WHERE pseudo = :pseudo");
      	        $pdostat->bindParam(':avatar', $avatar, PDO::PARAM_STR);
                    $pdostat->execute();
    //		$pdostat->bindvalue(':avatar',PDO::PARAM_STR);
    //		$req->execute(array(
    //        'avatar' => $avatar));
    			// Mise en SESSION
    			$_SESSION['id'] = $id;
    			$_SESSION['avatar'] = $avatar;
    			// on redirige vers l'espace membre
    			header('page_test.html');
    			exit();
    	//             else {
     //   $err_inscription[] = 'PROBLEME AVEC AVATAR';
     //  }
    ?>
    


    Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp64\www\register_av0001.php on line 17

    les lignes de code annulées par // ne fonctionnent pas non plus.

    -
    Edité par YvesCronfalt1 28 février 2021 à 10:05:54

    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2021 à 18:10:48

      Bonjour,

      Tu ne précises jamais de valeur pour le pseudo.

      $pdostat = $bdd->prepare("UPDATE membres SET avatar = :avatar WHERE pseudo = :pseudo");
      $pdostat->bindParam(':avatar', $avatar, PDO::PARAM_STR);
      $pdostat->bindParam(':pseudo', $pseudo, PDO::PARAM_STR);
      $pdostat->execute();

      La variable $pseudo n'est pas défini dans ton code. Du coup pense à la créer en amont.

      -
      Edité par eclairia 27 février 2021 à 18:12:05

      • Partager sur Facebook
      • Partager sur Twitter
      "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
        27 février 2021 à 21:18:09

        ??

        Dans le meme genre que  la variable avatar, par exemple.?

        $avatar= "/avatars/0001.png";

        Si oui, je mets "$session ['pseudo'] ????

        Je pensais que la requète suffisait...



        -
        Edité par YvesCronfalt1 27 février 2021 à 21:21:15

        • Partager sur Facebook
        • Partager sur Twitter
          27 février 2021 à 21:22:59

          Bonsoir

          Au lieu de mettre le pseudo comme condition, tu peux plutôt utiliser l'id qui lui est sur de ne pas changer

          • Partager sur Facebook
          • Partager sur Twitter
            27 février 2021 à 21:35:32 - Message modéré pour le motif suivant : La demande de l'équipe de modération a été honorée


            Pas d'aide concernant le code par MP, le forum est là pour ça :)

              1 mars 2021 à 20:44:46

              <?php
              ini_set('display_errors', 1);
              ini_set('display_startup_errors', 1);
              error_reporting(E_ALL);
              if( session_id()=='' ){ session_start(); }
              //if (isset($_SESSION['id']) AND isset($_SESSION['pseudo']))
              //{
              //session_start();
              // connexion a la bdd
              require_once 'config.php';
              /* Initialisation de la variable avatar*/
              $avatar= "/avatars/0001.png";
              $pdostat = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
              $pdostat->bindValue(':avatar', $avatar, PDO::PARAM_STR);
              $pdostat->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
              $pdostat->execute(array(
              'avatar' => $avatar,
              'id' => $id));
              $_SESSION['avatar'] = $avatar;
              header('page_test.html');
              exit;
              ?>
              
              
              

              Undefined variable: id in C:\wamp64\www\register_av0001.php on line 15

              J'ai remodifié le code ainsi:

              <?php
              ini_set('display_errors', 1);
              ini_set('display_startup_errors', 1);
              error_reporting(E_ALL);
              session_start();
              // connexion a la bdd
              require_once 'config.php';
              /* Initialisation de la variable avatar*/
              $avatar= "/avatars/0001.png";
              $id = $_SESSION['id'] ?? 0;
              $pdostat = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
              $pdostat->bindValue(':avatar', $avatar, PDO::PARAM_STR);
              $pdostat->bindValue(':id', $id, PDO::PARAM_STR);
              $pdostat->execute(array(
              'avatar' => $avatar,
              'id' => $id));
              $_SESSION['avatar'] = $avatar;
              header('page_test.html');
              exit;
              ?>

              et maintenant j'ai une page blanche comme résultat.

              -
              Edité par YvesCronfalt1 1 mars 2021 à 21:02:09

              • Partager sur Facebook
              • Partager sur Twitter
                1 mars 2021 à 21:04:23

                Soit tu passes par bindvalue soit par execute pour les paramètres mais pas les deux.
                • Partager sur Facebook
                • Partager sur Twitter
                  1 mars 2021 à 21:48:33

                  <?php
                  ini_set('display_errors', 1);
                  ini_set('display_startup_errors', 1);
                  error_reporting(E_ALL);
                  session_start();
                  // connexion a la bdd
                  require_once 'config.php';
                  /* Initialisation de la variable avatar*/
                  $avatar= "./avatars/0001.png";
                  $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
                  if($id){
                  
                    try{
                       $pdostat = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
                       $pdostat->bindValue(':avatar', $avatar, PDO::PARAM_STR);
                       $pdostat->bindValue(':id', $id, PDO::PARAM_STR);
                  //     $pdostat->execute();
                  
                        header('page_test.html');
                        exit;
                    }catch(Exception $e){
                      echo "Erreur " . $e->getMessage();
                    }
                  }
                  ?>

                   J'ai toujours une page blanche et pas de changement dans ma table.

                  -
                  Edité par YvesCronfalt1 1 mars 2021 à 21:51:03

                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 mars 2021 à 22:19:52

                    il faut laisser le execute mais sans paramètre.

                    Si tu es perdu, relis le cours et/ou les docs

                    Page blanche, c'est sur il y a rien a affiché

                    La redirection est fausse

                    id n'est surement pas un String mais un int

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 mars 2021 à 18:30:36

                      Ca y est, cela fonctionne enfin.

                      Un problème de session (id) non déclaré ici et sur la page précédente.

                      <?php
                      session_start();
                      require_once 'config.php';
                      /* Initialisation de la variable avatar*/
                      
                      $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
                      if($id){
                      $avatar= '/avatars/0001.png';
                          $pdostat = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
                          $pdostat->bindValue(':avatar', $avatar, PDO::PARAM_STR);
                          $pdostat->bindValue(':id', $id, PDO::PARAM_INT);
                          $pdostat->execute();
                          $_SESSION['id'] = $bdd->lastInsertId();
                      				}		
                       	header('Location:page_test.html');
                              exit;
                      ?>
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      



                      • Partager sur Facebook
                      • Partager sur Twitter

                      Update variable ko

                      × 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