Passage de mysqli en PDO [Résolu]

Signaler
Messages postés
2914
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
19 juin 2021
-
Messages postés
2914
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
19 juin 2021
-
bonjour a tous
a présent que je commence a mieux m y retrouver dans ces codes et variable j en profite pour tenter de passer mes codes de mysqli en PDO
c est une nouvelle aventure
donc je compte tout refaire avec des requetés et l activation des erreurs
dans l exemple j ai mis également ma connexion en PDO

d abord mon ancien code qui fonctionnait parfaitement en mysqli
<?php
$mysqli = new Mysqli('localhost', 'root', '', 'id15003105_test');
$contenu = '';
if ($_POST) {
$_POST['pseudo'] = addslashes($_POST['pseudo']);
$_POST['message'] = addslashes($_POST['message']);
if (!empty($_POST['pseudo']) && !empty($_POST['message'])) {
$mysqli->query("INSERT INTO commentaire (pseudo, message, date_enregistrement) VALUES ('$_POST[pseudo]', '$_POST[message]', NOW())") OR DIE ($mysqli->error);
$contenu .= '
<div class="validation">Votre message/question a bien été enregistré 
</br>il est en attende de validation .
</div>';
} else {
$contenu .= '
<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
$resultat = $mysqli->query(
"SELECT pseudo,valider, message, date_enregistrement ,DATE_FORMAT(date_enregistrement, '%d/%m/%Y') AS datefr, DATE_FORMAT(date_enregistrement, '%H:%i:%s') AS heurefr FROM commentaire WHERE valider = 0 ORDER BY date_enregistrement DESC"
);    
?>


et voici donc le même mais en PDO ,il fonctionne aussi mais peut être des améliorations a effectuer

<?php


try{
$bdd = new PDO('mysql:host=localhost;dbname=id15003105_test', 'root', '');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
$contenu = '';
if ($_POST) {
 $_POST['pseudo'] = addslashes($_POST['pseudo']);
$_POST['message'] = addslashes($_POST['message']);
//je recupere les variable proprement avant utilisation 
//Si la variable $_POST['nom'] existe et n'est pas vide, j'en récupère la valeur, sinon je mets la variable $nom à NULL
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL; 
 $message = !empty($_POST['message']) ? $_POST['message'] : NULL; 

if (!empty($_POST['pseudo']) && !empty($_POST['message'])) {
 
//$mysqli->query("INSERT INTO commentaire (pseudo, message, date_enregistrement) VALUES ('$_POST[pseudo]', '$_POST[message]', NOW())") OR DIE ($mysqli->error);
$pseuso=$_POST['pseudo'];
$message=$_POST['message'];
$today = date("Y-m-d ");
 $sql = "INSERT INTO commentaire (pseudo, message, date_enregistrement)   VALUES (:valeur1,:valeur2 ,:valeur3)";
 $datas = array(':valeur1'=>$pseuso, ':valeur2'=>$message , ':valeur3'=>$today   );
//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}
$contenu .= '
<div class="validation">Votre message/question a bien été enregistré 
</br>il est en attende de validation .
</div>';
} else {
$contenu .= '
<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
//$resultat = $mysqli->query(
//"SELECT pseudo,valider, message, date_enregistrement ,DATE_FORMAT(date_enregistrement, '%d/%m/%Y') AS datefr, //DATE_FORMAT(date_enregistrement, '%H:%i:%s') AS heurefr FROM commentaire WHERE valider = 0 ORDER BY date_enregistrement //DESC"); 
$sql = "SELECT pseudo,valider, message, date_enregistrement ,DATE_FORMAT(date_enregistrement, '%d/%m/%Y') AS datefr, DATE_FORMAT(date_enregistrement, '%H:%i:%s') AS heurefr FROM commentaire WHERE valider = 0 ORDER BY date_enregistrement DESC";
$datas = NULL;

// ------------------------------ //
// CETTE PARTIE DU CODE NE CHANGE PAS //
try{
  $requete = $bdd  -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}
// ------------------------------ //
 
?>

3 réponses

Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
3 564
Ligne 25 et 26 inutiles... Puisque tu as récupéré proprement les variables au ligne 19 et 20...

Ligne 22, il faut utiliser les variables des lignes 19 et 20 et non pas à nouveau remettre les variables $_POST ... Sinon à quoi ça sert de les récupérer proprement avant de les utiliser... ????

Ligne 15 et 16 à supprimer !
La fonction addslashe ( également valable pour la fonction htmlsprcialchars ) ne doit pas utiliser pour traiter les variables avant leur utilisation en base de données...
Je précise également qu'on ne modifie pas ou ne remplit pas une variable $_POST comme tu l'as fait...



Messages postés
2914
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
19 juin 2021
138
merci pour la correction et surtout le cote pédagogique jordane
enfin j avance
voila tout est ok
je poste le code pour ceux que cela intéresse et pour l apprentissage



<?php


try{
$bdd = new PDO('mysql:host=localhost;dbname=id15003105_test', 'root', '');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
$contenu = '';
if ($_POST) {
	$_POST['pseudo'] = ($_POST['pseudo']);
$_POST['message'] = ($_POST['message']);
//je recupere les variable proprement avant utilisation 
//Si la variable $_POST['nom'] existe et n'est pas vide, j'en récupère la valeur, sinon je mets la variable $nom à NULL
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;	
	$message = !empty($_POST['message']) ? $_POST['message'] : NULL;	

if (!empty ($pseudo)  && !empty ($message) ) {
	

$today = date("Y-m-d ");
 $sql = "INSERT INTO commentaire (pseudo, message, date_enregistrement)   VALUES (:valeur1,:valeur2 ,:valeur3)";
 $datas = array(':valeur1'=>$pseudo, ':valeur2'=>$message , ':valeur3'=>$today   );
//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}
$contenu .= '
<div class="validation">Votre message/question a bien été enregistré 
</br>il est en attende de validation .
</div>';
} else {
$contenu .= '
<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
//$resultat = $mysqli->query(
//"SELECT pseudo,valider, message, date_enregistrement ,DATE_FORMAT(date_enregistrement, '%d/%m/%Y') AS datefr, //DATE_FORMAT(date_enregistrement, '%H:%i:%s') AS heurefr FROM commentaire WHERE valider = 0 ORDER BY date_enregistrement //DESC"); 
$sql = "SELECT pseudo,valider, message, date_enregistrement ,DATE_FORMAT(date_enregistrement, '%d/%m/%Y') AS datefr, DATE_FORMAT(date_enregistrement, '%H:%i:%s') AS heurefr FROM commentaire WHERE valider = 0 ORDER BY date_enregistrement DESC";
$datas = NULL;

// ------------------------------ //
// CETTE PARTIE DU CODE NE CHANGE PAS //
try{
  $requete = $bdd  -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}
// ------------------------------ //
 
?>

Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
3 564
Ligne 15 et 16 à supprimer
Messages postés
2914
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
19 juin 2021
138
oui en effet je les avais oublie

encore merci jordane pour toute cette aide et patience