Connexion base de données PDO

Résolu/Fermé
Zakarya93 Messages postés 984 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 18 décembre 2020 - 29 avril 2015 à 21:37
Zakarya93 Messages postés 984 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 18 décembre 2020 - 30 avril 2015 à 11:59
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

Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
Modifié par Thorak83 le 29/04/2015 à 22:05
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
Zakarya93 Messages postés 984 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 18 décembre 2020 10
29 avril 2015 à 22:17
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
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
29 avril 2015 à 22:30
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
Zakarya93 Messages postés 984 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 18 décembre 2020 10
29 avril 2015 à 22:35
Je n'arrive pas à les retrouver, pouvez vous me corriger et poster le nouveau script svp ? :) merci beaucoup :)
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
Modifié par hharchi9 le 29/04/2015 à 22:38
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
Zakarya93 Messages postés 984 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 18 décembre 2020 10
29 avril 2015 à 22:41
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
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
Modifié par hharchi9 le 29/04/2015 à 22:14
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
Zakarya93 Messages postés 984 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 18 décembre 2020 10
29 avril 2015 à 22:23
Merci d'avoir répondu! pouvez vous m'aider, post du dessus svp ?
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
29 avril 2015 à 23:33
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
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675 > hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015
Modifié par jordane45 le 2/05/2015 à 01:00
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
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
29 avril 2015 à 23:43
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
Zakarya93 Messages postés 984 Date d'inscription lundi 27 avril 2015 Statut Membre Dernière intervention 18 décembre 2020 10
30 avril 2015 à 11:59
Que Dieu vous garde ! merci beaucoup, résolu
0