Partage
  • Partager sur Facebook
  • Partager sur Twitter

Système d'insciption avec validation par admin

Sujet résolu
    18 novembre 2017 à 19:34:45

    Bonjour à tous !

    J'ai suivi le cours sur le système d'inscription avec validation par l'admin mais quelques requêtes semble dépassées avec les dernières versions PHP.

    Pouvez-vous m'aider à mettre à jour ce code afin qu'il s’exécute correctement. J'ai tenté quelques modification mais je pense mal m'y prendre...

    A partir de la ligne 5 rien ne va plus.

    Code original :

    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("nom_db");
    $quete = mysql_query("SELECT * FROM validation");
    while($validation = mysql_fetch_array($quete))
    {
    echo 'Pseudo: ';
    echo $validation['pseudo'];
    echo ' Mot de passe: ';
    echo $validation['passe'];
    echo ' E-mail: ';
    echo $validation['email'];
    echo '<a href="validation.php?action=accepter&id='.$validation['id'].'">Accepter</a>';
    echo '<a href="validation.php?action=refuser&id='.$validation['id'].'">Refuser</a>';
    echo '<br/>';
    }
     
    if(isset($_GET['action']) AND isset($_GET['id']))
    {
    $action = $_GET['action'];
    if($action == "accepter")
    {
    $id = $_GET['id'];
    $quete2 = mysql_query("SELECT * FROM validation WHERE id='$id'");
    $connexion = mysql_fetch_array($quete2);
    $pseudo = $connexion['pseudo'];
    $passe = $connexion['passe'];
    $email = $connexion['email'];
    mysql_query("INSERT INTO connexion VALUES('$id', '$pseudo', '$passe', '$email')");
    mysql_query("DELETE FROM validation WHERE id='$id'");
    }
    elseif($action == "refuser")
    {
    $id = $_GET['id'];
    mysql_query("DELETE FROM validation WHERE id='$id'");
    }
    }
    ?>
    

    Code modifié :

    <?php
    $pdo = new PDO('mysql:dbname=xxxx;host=localhost;charset=UTF8', 'xxxx', 'xxxx');
    $req = $pdo->prepare("SELECT * FROM validation");
    while($validation = mysql_fetch_array($req))
    {
    echo 'Pseudo: ';
    echo $validation['pseudo'];
    echo ' Mot de passe: ';
    echo $validation['passe'];
    echo ' E-mail: ';
    echo $validation['email'];
    echo '<a href="validation.php?action=accepter&id='.$validation['id'].'">Accepter</a>';
    echo '<a href="validation.php?action=refuser&id='.$validation['id'].'">Refuser</a>';
    echo '<br/>';
    }
     
    if(isset($_GET['action']) AND isset($_GET['id']))
    {
    $action = $_GET['action'];
    if($action == "accepter")
    {
    $id = $_GET['id'];
    $req2 = mysql_query("SELECT * FROM validation WHERE id='$id'");
    $connexion = mysql_fetch_array($req2);
    $pseudo = $connexion['pseudo'];
    $passe = $connexion['passe'];
    $email = $connexion['email'];
    mysql_query("INSERT INTO connexion VALUES('$id', '$pseudo', '$passe', '$email')");
    mysql_query("DELETE FROM validation WHERE id='$id'");
    }
    elseif($action == "refuser")
    {
    $id = $_GET['id'];
    mysql_query("DELETE FROM validation WHERE id='$id'");
    }
    }
    ?>



    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2017 à 19:43:23

      Salut, 

      Quelle est ton rapport d'erreur ?

      MAis déjà ya des trucs qui cloche, 

      $req2 = mysql_query("SELECT * FROM validation WHERE id='$id'");

      Tu insères une variable avec la mauvais syntaxe! Il faudrait faire plutôt comme ceci

      $req2 = mysql_query("SELECT * FROM validation WHERE id='" . $id . "'");

      Idem pour toutes tes autres requêtes, je te conseil d’ailleurs de faire des variable $sql qui contienne ta requête, ça sera plus lisible je trouve.

      • Partager sur Facebook
      • Partager sur Twitter
      Créateur de projet web Pronostic.pro
        18 novembre 2017 à 19:48:12

        > Il faudrait faire plutôt comme ceci

        Les 2 sont strictement équivalents : les variables sont interpolées (remplacées par leur valeur) quand la chaîne est délimitée par des doubles quotes (reprendre la doc, partie chaîne de caractères au besoin).

        L'une comme l'autre permettant une injection SQL, $id n'étant pas casté ...


        • tu prépares une requête sans l'exécuter et n'ayant pas de marqueur, autant ne pas la préparer (cf PDO::query)
        • tu n'a pas remplacé mysql_fetch_array par PDOStatement::fetch
        • il y a des injections SQL => préparer ces requêtes
        • tu n'as pas tout migré : tant qu'il reste du mysql_*, ton boulot n'est pas fini

        -
        Edité par julp 18 novembre 2017 à 19:52:23

        • Partager sur Facebook
        • Partager sur Twitter
          18 novembre 2017 à 20:04:49

          J'ai essayé de mettre à jour les

          mysql_connect("localhost", "root", "");
          mysql_select_db("nom_db");
          $quete = mysql_query

          par

          mysqli_connect("localhost", "root", "");
          mysqli_select_db("nom_db");
          $quete = mysqli_query

          Voici donc le nouveau code :

          <?php
          mysqli_connect("localhost", "xxxx", "xxxx");
          mysqli_select_db("xxxx");
          $quete = mysqli_query("SELECT * FROM validation");
          while($validation = mysqli_fetch_array($quete))
          {
          echo 'Nom : ';
          echo $validation['nom'];
          echo ' Prénom : ';
          echo $validation['prenom'];
          echo ' E-mail : ';
          echo $validation['email'];
          echo '<a href="validation.php?action=accepter&id='.$validation['id'].'">Accepter</a>';
          echo '<a href="validation.php?action=refuser&id='.$validation['id'].'">Refuser</a>';
          echo '<br/>';
          }
            
          if(isset($_GET['action']) AND isset($_GET['id']))
          {
          $action = $_GET['action'];
          if($action == "accepter")
          {
          $id = $_GET['id'];
          $quete2 = mysqli_query("SELECT * FROM validation WHERE id='$id'");
          $connexion = mysqli_fetch_array($quete2);
          $pseudo = $connexion['nom'];
          $passe = $connexion['prenom'];
          $email = $connexion['email'];
          mysqli_query("INSERT INTO utilisateurs VALUES('$id', '$nom', '$prenom', '$email')");
          mysqli_query("DELETE FROM validation WHERE id='$id'");
          }
          elseif($action == "refuser")
          {
          $id = $_GET['id'];
          mysqli_query("DELETE FROM validation WHERE id='$id'");
          }
          }
          ?>

          Et voici les erreurs retournées :


          ( ! ) Warning: mysqli_select_db() expects exactly 2 parameters, 1 given in C:\wamp64\www\validation.php on line 3
          Call Stack
          #TimeMemoryFunctionLocation
          1 0.0000 244648 {main}( ) ...\validation.php:0
          2 0.0000 244776 mysqli_select_db ( ) ...\validation.php:3


          ( ! ) Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp64\www\validation.php on line 4
          Call Stack
          #TimeMemoryFunctionLocation
          1 0.0000 244648 {main}( ) ...\validation.php:0
          2 0.0156 245264 mysqli_query ( ) ...\validation.php:4


          ( ! ) Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\wamp64\www\validation.php on line 5
          Call Stack
          #TimeMemoryFunctionLocation
          1 0.0000 244648 {main}( ) ...\validation.php:0
          2 0.0156 245296 mysqli_fetch_array ( ) ...\validation.php:5



          • Partager sur Facebook
          • Partager sur Twitter
            18 novembre 2017 à 20:56:37

            Bonjour,

            regarde simplement la doc de mysqli_, là tu improvises.

            • Partager sur Facebook
            • Partager sur Twitter

            Système d'insciption avec validation par admin

            × 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