Partage
  • Partager sur Facebook
  • Partager sur Twitter

Variable php non définie

Sujet résolu
    30 mars 2020 à 18:30:30

    Bonjour,

    J'ai le message d'erreur suivant.Si j'utilise $_GET['short']  ça fonctionne mais je ne comprends pas pourqui il ne veut pas de ma variable $shortcut

    <?php
    //  AFTER ENTRY AN URL ON THE URL BAR AND PRESS ENTER
    if(isset($_GET['q'])) { //IS q=.. IN THE URL ?
      //IS THE SHORTCUT IN THE DBB
      $shortcut = htmlspecialchars($_GET['q']);
      $bdd = new PDO('mysql:host=localhost;dbname=bitly;charset=utf8', 'root', '');
      $req = $bdd->prepare('SELECT url,shortcut FROM links WHERE shortcut = ?');
      $req->execute(array($shortcut));
    
      while($res = $req->fetch()) {
        if ($res['shortcut'] != null) {
          //THE SHORTCUT MATCH  WITH THE ONE IN DBB SETUP REDIRECTION TO THE WEBSITE
          header('location:'.$res['url']);
          exit();
        } else {
        header('location: ./?error=true&message=cette shortcut URL n\'existe pas');
          exit();
        }
        }
      }
    
    if(isset($_POST['url'])){
        $url = $_POST['url'];
        //verify url is an url
        if (!filter_var($url, FILTER_VALIDATE_URL)) {
          header('location:./?error=true&message=Adresse url non valide');
            exit();
        } else {
        $shortcut = crypt($url, rand());
        //check if url is already in the dbb
        try {//CREATION OBJET DATA BASE
          $bdd = new PDO('mysql:host=localhost;dbname=bitly;charset=utf8','root','');
        } catch(Exception $e) {
          die('Erreurrr: '.$e->getMessage());
        }
        $req = $bdd->prepare('SELECT COUNT(*) AS x FROM links WHERE url = ?');
        $req->execute(array($url));
    
        while($result= $req->fetch()) {
          if ($result['x'] != 0) {
            header('location:./?error=true&message=Cette url existe deja');
            $req->closeCursor();
            exit();
          }else {
            $req = $bdd->prepare('INSERT INTO links(url,shortcut) VALUES (?,?)');
            $req->execute(array($url,$shortcut));
            header('location:./?short='.$shortcut);
            $req->closeCursor();
            exit();
          }
        }
        }
    
    }
    
    
     ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Raccourcis url</title>
        <link rel="icon" type="image/png" href="pictures/favico.png">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
        <link rel="stylesheet" href="design/default.css" type="text/css"  />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    </head>
    
    <body>
          <section id="hello">
            <div class="container" >
              <header>
                <img src="pictures/logo.png" alt="logo" id="logo">
              </header>
    
              <!-- VP -->
              <div class="text-center text-white">
                <h1>une url  trop longue ?  raccourcissez là</h1>
                <h2 class="lead">Largement plus court.</h2>
              </div>
              <form class="text-center mt-5" action="index.php" method="post">
                <input type="url" name="url" placeholder="coller un lien à raccourcir">
                <button class="btn btn-warning text-white font-weight-bold shadow-lg" type="submit" name="button">RACCOURCIR</button>
              </form>
              <?php
                if(isset($_GET['error']) && isset($_GET['message'])) { ?>
                  <div class="center">
                    <div id="result">
                      <b>   <?php echo htmlspecialchars($_GET['message']); ?>  </b>
                    </div>
                  </div>
              <?php  } else if (isset($_GET['short'])) {
                ?>
                <div class="center">
                  <div id="result">
                    <b>URL RACCOURCIE:<?php echo 'http://localhost/jl/php/mysql/short_url/?q='.$shortcut ?> </b>
                  </div>
                </div>
            <?php } ?>
    
    
            </div>
    
          </section>
    
        <section id="brands">
          <div class="container">
            <h3> Ces marques nous font confiances</h3>
    
              <img src="pictures/1.png" alt="" class="picture">
              <img src="pictures/2.png" alt="" class="picture">
              <img src="pictures/3.png" alt="" class="picture">
              <img src="pictures/4.png" alt="" class="picture">
    
    
          </div>
    
        </section>
    </body>
    <footer class='text-center'>
      <img src="pictures/logo2.png" alt="logo" id="logo" ><br />
      2018@Bitly <br />
      <a href="#">Contact </a> - <a href="#"> à Propos</a>
    </footer>
    </html>



    • Partager sur Facebook
    • Partager sur Twitter
      30 mars 2020 à 18:34:33

      Bonjour,

      Car lors du 1er passage, tu ne passes dans aucun if donc cette variable n'est pas défini.

      Sinon pas de htmlspecialchar sur les données entrée en BDD, c'est pour de l'affichage.

      Et quel est l'utilité du while sachant que tu n'as qu'un résultat ?

      • Partager sur Facebook
      • Partager sur Twitter
        31 mars 2020 à 10:37:56

        Bonjour,

        Je ne comprends pas : en fait des que je rentre saisie mon url et valide je rentre dans  mon if(isset($_POST['url'])){   et du coup ma variable
        $shortcut = crypt($url, rand()) est créee elle devrait donc exister ?

        • Partager sur Facebook
        • Partager sur Twitter
          31 mars 2020 à 10:49:01

          oui quand tu as rentré une url mais avant elle ne l'est pas.

          Donc le $shorcut de la ligne 99 est vide.

          • Partager sur Facebook
          • Partager sur Twitter
            31 mars 2020 à 19:12:12

            tu veux dire que ceci

              <div class="center">
                          <div id="result">
                            <b>URL RACCOURCIE:<?php echo 'http://localhost/jl/php/mysql/short_url/?q='.$shortcut ?> </b>
                          </div>
                        </div>

            est exécuté avant que $shortcut reçoive la valeur $_POST['url'] ? en gros quand je valide ça affiche mon html et ensuite ça rempli ma variable $shortcut ?

            Je pensais que c'était fait en même temps

            -
            Edité par JlCro 31 mars 2020 à 19:13:27

            • Partager sur Facebook
            • Partager sur Twitter
              31 mars 2020 à 19:15:31

              Bonjour.

              Quand l'utilisateur arrive sur la page, le formulaire n'est pas encore soumis, par conséquent la condition de la ligne 22 n'est pas respectée et la variable shortcut ne peut pas être définie.

              • Partager sur Facebook
              • Partager sur Twitter

              Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                31 mars 2020 à 21:28:11

                En fait je ne comprends, si ma variable $shortcut n'est pas définie dans ce car pour mon url   obtenu à partir de header('location:./?short='.$shortcut); fonctionne ?
                • Partager sur Facebook
                • Partager sur Twitter
                  31 mars 2020 à 21:35:16

                  JlCro a écrit:

                  En fait je ne comprends, si ma variable $shortcut n'est pas définie dans ce car pour mon url   obtenu à partir de header('location:./?short='.$shortcut); fonctionne ?


                  Oui car tu auras soumis ton formulaire
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mars 2020 à 21:39:25

                    L'erreur qui t'es retournée, n'est pas au niveau de la redirection de la ligne 13 mais du lien HTML de la ligne 99.

                    Au niveau du lien, tu devrais d'abord vérifier que la variable existe bien avant d'afficher le lien et d'utiliser la variable.

                    Par contre, je ne comprends pas pourquoi tu fais une boucle d'enregistrements de la table, alors que ta condition dans la requête SQL ne devrait s'appliquer que pour un seul enregistrement, donc autant stocker le résultat de la méthode fetch dans une variable puis faire les vérifications sur les données qu'elle contiendrait.

                    Autre chose, l'utilisation de la fonction htmlspecialchars, ne se fait que pour l'affichage, soit au niveau du lien HTML et non avant d'interagir avec la base de données.

                    -
                    Edité par Lartak 31 mars 2020 à 21:42:39

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                      31 mars 2020 à 21:41:02

                      Lartak a écrit:

                      ...

                      Par contre, je ne comprends pas pourquoi tu fais une boucle d'enregistrements de la table, alors que ta condition dans la requête SQL ne devrait s'appliquer que pour un seul enregistrement, donc autant stocker le résultat de la méthode fetch dans une variable puis faire les vérifications sur les données qu'elle contiendrait.

                      -
                      Edité par Lartak il y a moins de 5s


                      C'est ce que je lui es demandé lors de mon 1er post
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 mars 2020 à 21:44:59

                        Aurélien.C a écrit:

                        C'est ce que je lui es demandé lors de mon 1er post

                        En effet, désolé.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                          2 avril 2020 à 9:51:33

                          Bonjour,

                          D'accord j'ai enlevé le htmlspecialchars de la ligne 5.

                          En fait je fais une boucle car je fais comme si il y avait plusieurs résultat mais en effet il n'y en a qu'un donc ma boucle est inutile.

                          Donc si je comprends bien au début j'ai ceci

                          Après validation "RACCOURCIR"

                          je vais ligne22, on rentre dans le if puis ligne23 et l29 sont exécutés donc j'en déduis que ma variable $shortcut existe et n'est pas vide.

                          Du coup je ne comprends pas pourquoi ma ligne 99 ne reconnait pas mon $shortcut. A moins que ma ligne99 s’exécute avant ma ligne29 ?

                          ce qui est bizarre c'est que si je remplace  ligne99 $shortcut par  $_POST['short'] là ça marche j'obtiens

                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 avril 2020 à 10:49:25

                            voila ton code lors de l'appel de la page

                            Où vois-tu un $shortcut = ?

                            <!DOCTYPE html>
                            <html lang="en">
                            <head>
                                <meta charset="UTF-8">
                                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                                <title>Raccourcis url</title>
                                <link rel="icon" type="image/png" href="pictures/favico.png">
                                <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
                                <link rel="stylesheet" href="design/default.css" type="text/css"  />
                                <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
                                <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
                            </head>
                             
                            <body>
                                  <section id="hello">
                                    <div class="container" >
                                      <header>
                                        <img src="pictures/logo.png" alt="logo" id="logo">
                                      </header>
                             
                                      <!-- VP -->
                                      <div class="text-center text-white">
                                        <h1>une url  trop longue ?  raccourcissez là</h1>
                                        <h2 class="lead">Largement plus court.</h2>
                                      </div>
                                      <form class="text-center mt-5" action="index.php" method="post">
                                        <input type="url" name="url" placeholder="coller un lien à raccourcir">
                                        <button class="btn btn-warning text-white font-weight-bold shadow-lg" type="submit" name="button">RACCOURCIR</button>
                                      </form>
                                      <?php
                                        if(isset($_GET['error']) && isset($_GET['message'])) { ?>
                                          <div class="center">
                                            <div id="result">
                                              <b>   <?php echo htmlspecialchars($_GET['message']); ?>  </b>
                                            </div>
                                          </div>
                                      <?php  } else if (isset($_GET['short'])) {
                                        ?>
                                        <div class="center">
                                          <div id="result">
                                            <b>URL RACCOURCIE:<?php echo 'http://localhost/jl/php/mysql/short_url/?q='.$shortcut ?> </b>
                                          </div>
                                        </div>
                                    <?php } ?>
                             
                             
                                    </div>
                             
                                  </section>
                             
                                <section id="brands">
                                  <div class="container">
                                    <h3> Ces marques nous font confiances</h3>
                             
                                      <img src="pictures/1.png" alt="" class="picture">
                                      <img src="pictures/2.png" alt="" class="picture">
                                      <img src="pictures/3.png" alt="" class="picture">
                                      <img src="pictures/4.png" alt="" class="picture">
                             
                             
                                  </div>
                             
                                </section>
                            </body>
                            <footer class='text-center'>
                              <img src="pictures/logo2.png" alt="logo" id="logo" ><br />
                              2018@Bitly <br />
                              <a href="#">Contact </a> - <a href="#"> à Propos</a>
                            </footer>



                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 avril 2020 à 18:19:17

                              oui la il n' y a pas de $shortcut

                              Ma variable $shortcut n'existe que dans mon if  ?

                              -
                              Edité par JlCro 2 avril 2020 à 18:25:26

                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 avril 2020 à 18:24:37

                                Salut, si t'es conscient que ta variable n'existe pas tant que tu n'entre pas dans ton IF.
                                Pourquoi l'utilise tu ligne 99 ? Sans vérification ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 avril 2020 à 18:25:41

                                  NON NON NON

                                  Elle sera rempli UNIQUEMENT quand tu auras validé ton formulaire.

                                  Donc avant il faut une valeur par défaut

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 avril 2020 à 20:10:08

                                    Aurélien.C a écrit:

                                    Donc avant il faut une valeur par défaut

                                    Il faut surtout qu'il vérifie d'abord si la variable existe avant de vouloir l'utiliser, car ça n'aurait aucun sens une valeur par défaut pour cette variable, étant donné que le lien dans la balise a serait faux.
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                      2 avril 2020 à 20:32:28

                                      Du coup quand ma page se charge ma variable $shortcut n'est pas encore défini
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 avril 2020 à 20:33:45

                                        JlCro a écrit:

                                        Du coup quand ma page se charge ma variable $shortcut n'est pas encore défini

                                        C'est ce que je t'avais dit.

                                        Lartak a écrit:

                                        Bonjour.

                                        Quand l'utilisateur arrive sur la page, le formulaire n'est pas encore soumis, par conséquent la condition de la ligne 22 n'est pas respectée et la variable shortcut ne peut pas être définie.

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                          2 avril 2020 à 22:29:32

                                          par contre si je mets ceciligne 99

                                            <div class="center">
                                                        <div id="result">
                                                          <b>URL RACCOURCIE:<?php echo 'http://localhost/jl/php/mysql/short_url/?q='.$_GET['short'] ?> </b>
                                                        </div>
                                                      </div>


                                          j'obtiens  un résultat qui fonctionne, ça veut dire que  ligne 47 existe donc ça veut dire que ma variable $shortcut existe et n'est pas vide. C'est pour ça que j'ai un peu de mal à comprendre pourquoi je ne peux pas remplacer $_GET['short'] par $shortcut.

                                          ?short='.$shortcut      



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 avril 2020 à 22:32:43

                                            a quel moment fais-tu un test sur $_GET['short'] ? qui pourrais remplis $shortcut ?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              2 avril 2020 à 23:17:53

                                              Bonjour,

                                              Il y a des bases de PHP à revoir. Je ne peux que t'inviter à relire le cours en repartant sur des bases saines.

                                              Cordialement,

                                              Julien

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Site personnel : Julien Gidel - AutoMatePHPresentation

                                                3 avril 2020 à 14:11:05

                                                En fait après avoir saisie une url dans le champs du formulaire et  validé et j'obtiens bien l'affichage voulu à savoir mon url raccourci car le $_GET me permet de récupérer la valeur contenue dans "short" or cette valeur n'est rien d'autre que la valeur de ma variable $shorcut. Comment pourais je obtenir la valeur si la variable n'était pas défini ?



                                                 

                                                Pour obtenir ceci mon programme est allé chercher dans mon URL là il y récupère la valeur contenu dans la variable "short"

                                                -
                                                Edité par JlCro 3 avril 2020 à 14:13:07

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  3 avril 2020 à 14:14:57

                                                  Et donc ?

                                                  JlCro a écrit:

                                                  Comment pourais je obtenir la valeur si la variable n'était pas défini ?

                                                  Nous n'allons pas nous répéter indéfiniment, donc suis des cours de PHP si tu n'es actuellement pas capable de comprendre ce que nous t'indiquons.

                                                  -
                                                  Edité par Lartak 3 avril 2020 à 14:18:05

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                                    3 avril 2020 à 14:56:40

                                                    Vous m'avez dit que la variable $shortcut n'était pas défini si tel était le cas je n'aurai pas pu avoir la valeur  entourée en rouge
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      3 avril 2020 à 15:05:29

                                                      $shortcut est différent de $_GET['short'].

                                                      Non mais sérieusement, fais un effort, c'est lassant de se répéter.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                                        7 avril 2020 à 10:31:54

                                                        J'ai finalement trouvé mon erreur, ma variable $shortcut existe bien, il fallait simplement que je supprime une  ligne de code de plus j'avais oublié de mettre un echo devant ma variable pour afficher son contenu.

                                                        Merci quand même

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Variable php non définie

                                                        × 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