Connexion base de données PDO

Résolu
Zakarya93 Messages postés 1026 Statut Membre -  
Zakarya93 Messages postés 1026 Statut Membre -
Bonjour,

Comment puis-je organiser mon fichier "functions.php" en PDO ?
Sachant que le script mysql est :

<?php
//connexion à la base de données
mysql_connect('localhost','root','')or die('error');
mysql_select_db('rs')or die('Bdd introuvable');
mysql_query('SET NAMES utf8');

//function qui va se charger d'inscrire l'utilisateur

function inscrire_utilisateur($pseudo,$password,$email,$sex
e,$sittuation,$apropos)

{
$password=sha1($password);
mysql_query("INSERT INTO utilisateurs(id,pseudo,password,email,sexe,situati
on,apropos)

VALUES(','$pseudo','$password','$email','$sexe','$
situation','$apropos','

'")or die(mysql_error());
}
?> 


s'il vous plait je bloque trop
vidéo à l'appui : https://www.youtube.com/watch?v=ZP422fZDcCQ

2 réponses

  1. Thorak83 Messages postés 1140 Statut Membre 156
     
    Bonsoir,
    <?php
    try 
    {
      $bdd = new PDO ('mysql:host=localhost;dbname=rs;charset=utf8', 'root', '');
    }
    catch(Exception $e) 
    {
      die('Erreur : '.$e->getMessage());
    }
    
    function inscrire_utilisateur($pseudo,$password,$email,$sexe,$situation,$apropos)
    {
      Global $bdd;
      
      $password=sha1($password);
      $sql = "INSERT INTO utilisateurs(pseudo,password,email,sexe,situation,apropos)
              VALUES (:pseudo,:password,:email,:sexe,:situation,:apropos)";
      $result = $bdd->prepare($sql);
      $result->bindValue('pseudo', $pseudo, PDO::PARAM_STR);
      $result->bindValue('password', $password, PDO::PARAM_STR);
      $result->bindValue('email', $email, PDO::PARAM_STR);
      $result->bindValue('sexe', $sexe, PDO::PARAM_STR);
      $result->bindValue('situation', $situation, PDO::PARAM_STR);
      $result->bindValue('apropos', $apropos, PDO::PARAM_STR);
      $result->execute();
    }
    ?>


    Cordialement,
    Thorak83
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Merci !

      Et pour le script register.php :

      <h1>Inscription</h1>

      <?php


      $link = mysqli_connect();
      if(isset($_POST['submit'])){

      $sexe = mysqli_real_escape_string($link, htmlentities(trim($_POST['sexe'])));
      $pseudo = mysqli_real_escape_string($link, htmlentities(trim($_POST['pseudo'])));
      $password = mysqli_real_escape_string($link, htmlentities(trim($_POST['password'])));
      $repeatpassword = mysqli_real_escape_string($link, htmlentities(trim($_POST['repeatpassword'])));
      $email = mysqli_real_escape_string($link, htmlentities(trim($_POST['email'])));
      $apropos = mysqli_real_escape_string($link, htmlentities(trim($_POST['apropos'])));


      if(empty($pseudo))
      {
      $errors[] ="Veuillez saisir un pseudo";
      }

      if (empty($password))
      {
      $errors[] ="Veuillez saisir un password";
      }

      if($password != $repeatpassword)
      {
      $errors[] = "Vos deux password doivent être identiques";
      }

      if(!filter_var($email,FILTER_VALIDATE_EMAIL))
      {
      $errors[] = "Votre adresse email n'est pas correcte";
      }

      if(empty($apropos))
      {
      $errors[] = "Veuillez vous décrire en quelques lignes";
      }

      if(!empty($errors))
      {
      foreach($errors as $error)
      {
      echo "<div class='error'>".$error."</div>";
      }else{
      inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos);
      die('Inscription terminée, vous pouvez vous<a href=\'index.php?page=login\'>connecter</a>');


      }
      }
      }
      ?>

      <form method="POST" action="">

      <label for='sexe'>Sexe</label>
      <select name="sexe">
      <?php echo isset($sexe)?'<option value='.$sexe.'>'.$sexe.'</option>':""; ?>
      <?php echo $sexe != 'Homme' ?'<option value="Homme">Homme</option>':""; ?>
      <?php echo $sexe != 'Femme' ?'<option value="Femme">Femme</option>':""; ?>
      </select><br /><br/>

      <label for="pseudo">Votre pseudo : </label>
      <input type="text" name ="pseudo" value='<?php echo isset($pseudo) ? $pseudo :""; ?>'><br />

      <label for="password">Votre password : </label>
      <input type="password" name ="password"><br />

      <label for="repeatpassword">Repetez votre password : </label>
      <input type="password" name ="repeatpassword"><br />

      <label for="email">Veuillez saisir votre email : </label>
      <input type="text" name ="email" value='<?php echo isset($email) ? $email :""; ?>'><br />

      <label for="apropos">A propos de vous </label>
      <textarea rows="6" cols="30" name="apropos"><?php echo isset($apropos) ? $apropos : ""; ?></textarea><br /><br />

      <input type="submit" value="S'inscrire" name="submit">

      </form>

      <a href='index.php?page=login'>Retournez à la page de connexion</a>
      
      


      Pour la partie ligne 47 :

      }else{ 
      inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos);
      die('Inscription terminée, vous pouvez vous<a href=\'index.php?page=login\'>connecter</a>');
      
      

      Je mets quoi à la place ? car il me dit "Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\wamp\www\rs\pages\register.php on line 47"
      0
    2. hharchi9 Messages postés 693 Statut Membre 24
       
      Après votre boucle
      for
      il y a une parenthèse fermante
      }
      en trop. De plus, il faut rouvir la balise
      <?php
      après avoir affiché le formulaire.
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Je n'arrive pas à les retrouver, pouvez vous me corriger et poster le nouveau script svp ? :) merci beaucoup :)
      0
    4. hharchi9 Messages postés 693 Statut Membre 24
       
      Le voici :

      <h1>Inscription</h1>
      
      <?php
      
      
      $link = mysqli_connect();
                  if(isset($_POST['submit'])){
                    
              $sexe = mysqli_real_escape_string($link, htmlentities(trim($_POST['sexe'])));
                $pseudo = mysqli_real_escape_string($link, htmlentities(trim($_POST['pseudo'])));
                $password = mysqli_real_escape_string($link, htmlentities(trim($_POST['password'])));
                $repeatpassword = mysqli_real_escape_string($link, htmlentities(trim($_POST['repeatpassword'])));
                $email = mysqli_real_escape_string($link, htmlentities(trim($_POST['email'])));
                $apropos = mysqli_real_escape_string($link, htmlentities(trim($_POST['apropos'])));          
          
          
          if(empty($pseudo))
             {
            $errors[] ="Veuillez saisir un pseudo";
          }
          
          if (empty($password))
          {
            $errors[] ="Veuillez saisir un password";
          }
          
          if($password != $repeatpassword)
          {
           $errors[] = "Vos deux password doivent être identiques";
          }
          
          if(!filter_var($email,FILTER_VALIDATE_EMAIL))
          {
           $errors[] = "Votre adresse email n'est pas correcte";     
          }
          
          if(empty($apropos))
          {
           $errors[] = "Veuillez vous décrire en quelques lignes";    
          }
          
          if(!empty($errors))
          {
           foreach($errors as $error)
           {
            echo "<div class='error'>".$error."</div>";
           }else{ 
               inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos);
                              die('Inscription terminée, vous pouvez vous<a href=\'index.php?page=login\'>connecter</a>');
      
      
              }
             } 
           
      ?>
      
      <form method="POST" action="">
      
         <label for='sexe'>Sexe</label>
         <select name="sexe">
                 <?php echo isset($sexe)?'<option value='.$sexe.'>'.$sexe.'</option>':""; ?>
                 <?php echo $sexe != 'Homme' ?'<option value="Homme">Homme</option>':""; ?>
                 <?php echo $sexe != 'Femme' ?'<option value="Femme">Femme</option>':""; ?>          
       </select><br /><br/>
       
       <label for="pseudo">Votre pseudo : </label>
       <input type="text" name ="pseudo" value='<?php echo isset($pseudo) ? $pseudo :""; ?>'><br />
       
       <label for="password">Votre password : </label>
       <input type="password" name ="password"><br />
       
       <label for="repeatpassword">Repetez votre password : </label>
       <input type="password" name ="repeatpassword"><br />
       
       <label for="email">Veuillez saisir votre email : </label>
       <input type="text" name ="email" value='<?php echo isset($email) ? $email :""; ?>'><br />
       
       <label for="apropos">A propos de vous </label>
       <textarea rows="6" cols="30" name="apropos"><?php echo isset($apropos) ? $apropos : ""; ?></textarea><br /><br />
       
       <input type="submit" value="S'inscrire" name="submit">
       
      </form>
      
      <a href='index.php?page=login'>Retournez à la page de connexion</a>
      <?php
      
      }else{ 
               inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos);
                              die('Inscription terminée, vous pouvez vous<a href=\'index.php?page=login\'>connecter</a>');
            
            ?>
      0
    5. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Merci ! mais il me fait : "Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\wamp\www\rs\pages\register.php on line 46"
      0
  2. hharchi9 Messages postés 693 Statut Membre 24
     
    Bonsoir,

    Voici votre code une fois passé en PDO :

    <?php
    try
    {
     // On se connecte à MySQL
     $bdd = new PDO(sprintf('mysql:host=%s;dbname=%s', $host, $dbname), $user, $pass);
    }
    catch(Exception $e)
    {
     // En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    }
    
    
    function inscrire_utilisateur($pseudo,$password,$email,$sex
    e,$sittuation,$apropos)
    {
    $password=sha1($password);
    
    //On prepare l'insertion
    $requete=prepare("INSERT INTO utilisateurs(id,pseudo,password,email,sexe,situati
    on,apropos)
    VALUES(:pseudo, :password, :email, :sexe, :situation, :apropos)"); 
    
    $requete->execute(array(
    ':pseudo'=> $pseudo,
    ':password'=>$password,
    ':email'=> $email,
    ':sexe' => $sexe,
    ':situation' => $situation,
    ':apropos' => $apropos));
    
    $requete->CloseCursor() //on ferme la base de donnée
    }
    ?>


    Après avoir vu quelques exemples sur le web, on se fait vite à la syntaxe en PDO.

    Bonne soirée,

    Cordialement,

    hharchi9.
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Merci d'avoir répondu! pouvez vous m'aider, post du dessus svp ?
      0
    2. hharchi9 Messages postés 693 Statut Membre 24
       
      Oups quelques fautes de frappe ont eu raison de moi ! Voici le script fonctionnel :

      <?php
      try
      {
       // On se connecte à MySQL
       $bdd = new PDO(sprintf('mysql:host=%s;dbname=%s', $host, $dbname), $user, $pass);
      }
      catch(Exception $e)
      {
       // En cas d'erreur, on affiche un message et on arrête tout
              die('Erreur : '.$e->getMessage());
      }
      
      
      function inscrire_utilisateur($pseudo,$password,$email,$sexe,$situation,$apropos)
      {
      $password=sha1($password);
      
      //On prepare l'insertion
      $requete=prepare("INSERT INTO utilisateurs(id,pseudo,password,email,sexe,situati
      on,apropos)
      VALUES(:pseudo, :password, :email, :sexe, :situation, :apropos)"); 
      
      $requete->execute(array(
      ':pseudo'=> $pseudo,
      ':password'=>$password,
      ':email'=> $email,
      ':sexe' => $sexe,
      ':situation' => $situation,
      ':apropos' => $apropos));
      
      $requete->CloseCursor(); //on ferme la base de donnée
      }
      ?>
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > hharchi9 Messages postés 693 Statut Membre
         
        Bonjour hharchi9 ,
        Ton code me semble tout à faire correcte.... toutefois je conseillerais la chose suivante :
        - Sortir la requête du prépare
        - Sortir l'Array des variables du Execute.
        - Prévoir le cas où certains paramètres de la fonction ne seraient pas envoyés
        - Ne pas oublier l'objet PDO au moment d'appeller le prépare
        - Ne pas mettre l'ID dans le INSERT (surtout si il est auto-incrémenté)
        - Ne pas hésiter à faire des retours à la ligne pour présenter les requêtes.. ça les rend plus lisibles.


        Donc en gros :
        //---------------------------------------------//
        // Connexion à la BDD via PDO
        //---------------------------------------------//
        $host = "localhost";
        $dbname = "nom_de_la_base";
        $user = "root";
        $pass = "";
        
        try {
            $dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass,array(PDO::ATTR_PERSISTENT => true));
            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            print "Erreur !: " . $e->getMessage() . "<br/>";
            die();
        }
        
        
        
        function inscrire_utilisateur($pseudo,$password,$email='',$sexe='M',$situation='',$apropos=''){
        $password=sha1($password);
        
        $sql = "INSERT INTO utilisateurs
                               (pseudo
                               ,password
                               ,email
                               ,sexe
                               ,situation
                               ,apropos)
                     VALUES(:pseudo 
                               , :password
                               , :email
                               , :sexe
                               , :situation
                               , :apropos)";
        
        $params = array(
                       ':pseudo'=> $pseudo,
                       ':password'=>$password,
                       ':email'=> $email,
                       ':sexe' => $sexe,
                       ':situation' => $situation,
                       ':apropos' => $apropos
                      );
        
        //On prepare l'insertion
        $requete= $dbh->prepare($sql); 
        $result = $requete->execute($params);
         return $result ;
        }
        ?>
        
        
        0
    3. hharchi9 Messages postés 693 Statut Membre 24
       
      En effet, je n'avais pas vu que le id était entré dans le insert. Je suis tout à fait d'accord avec toi jordane45 !
      0
    4. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Que Dieu vous garde ! merci beaucoup, résolu
      0