Connexion base de données PDO [Résolu/Fermé]

Signaler
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
-
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
-
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

Messages postés
1064
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
125
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
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8
Mais pourquoi il ne me fait pas comme lui à 9:50 ? https://www.youtube.com/watch?v=ZP422fZDcCQ

J'ai :
- Warning: Missing argument 6 for inscrire_utilisateur(), called in C:\wamp\www\rs\pages\register.php on line 82 and defined in C:\wamp\www\rs\functions.php on line 11
-Notice: Undefined variable: apropos in C:\wamp\www\rs\functions.php on line 24
Messages postés
567
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
1 juillet 2015
21
Oui le script de Thorak83 est une autre alternative légèrement différente mais le résultat est le même.

Votre table utilisateur est-elle créée ?

Le missing argument correspond au
$situation
que la fonction attend alors que voter formulaire ne renvoie pas de champ pour cette variable. Vous pouvez l'ajouter dans le formulaire ou enlever les instructions concernant
$situation
.

La dernière erreur est liée à la précédente.
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8 >
Messages postés
567
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
1 juillet 2015

Il me semble avoir tout supprimé pour le $ situation pouvez vous vérifier svp? ^^
Messages postés
567
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
1 juillet 2015
21
L'erreur qu'il obtient à 9:50 provient du fait qu'il a écrit utlisateur dans le script au lieu de utilisateur
Messages postés
30450
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2020
3 044
Bonjour,
@Zakarya93 : Merci de ne pas poser plusieurs fois la même question dans le forum....
De plus, pour améliorer la "lisibilité" des messages sur le forum... merci de ne poster qu' UNE seule question par discussion.... (comme déjà demandé précédemment... et également de clore les questions résolues ! )*
Messages postés
567
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
1 juillet 2015
21
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.
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8
Merci d'avoir répondu! pouvez vous m'aider, post du dessus svp ?
Messages postés
567
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
1 juillet 2015
21
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
}
?>
Messages postés
30450
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2020
3 044 >
Messages postés
567
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
1 juillet 2015

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 ;
}
?>

Messages postés
567
Date d'inscription
mercredi 18 décembre 2013
Statut
Membre
Dernière intervention
1 juillet 2015
21
En effet, je n'avais pas vu que le id était entré dans le insert. Je suis tout à fait d'accord avec toi jordane45 !
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
10 juin 2017
8
Que Dieu vous garde ! merci beaucoup, résolu