Passage de mysqli en PDO

Résolu/Fermé
flexi2202 Messages postés 3806 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 26 mars 2025 - Modifié le 25 mai 2021 à 12:43
flexi2202 Messages postés 3806 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 26 mars 2025 - 25 mai 2021 à 13:42
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

jordane45 Messages postés 38456 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 26 mars 2025 4 740
25 mai 2021 à 12:58
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...



0
flexi2202 Messages postés 3806 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 26 mars 2025 187
25 mai 2021 à 13:25
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);
}
// ------------------------------ //
 
?>

0
jordane45 Messages postés 38456 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 26 mars 2025 4 740
25 mai 2021 à 13:35
Ligne 15 et 16 à supprimer
0
flexi2202 Messages postés 3806 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 26 mars 2025 187
25 mai 2021 à 13:42
oui en effet je les avais oublie

encore merci jordane pour toute cette aide et patience
0