Page 1 sur 1

S'IL VOUS PLAÎT, COMMENT CORRIGER LES DEUX ERREURS PDO et Undefined index ???

Posté : 22 janv. 2021, 18:00
par chegmarco
Bonsoir.

J'ai deux problèmes et je sollicite votre aide.

1 - LA REQUETE INITTIALE (MySQLi) SUIVANTE:

Code : Tout sélectionner

$system = $conn->query("SELECT * FROM system_settings")->fetch_array(); foreach($system as $k => $v){ $_SESSION['system'][$k] = $v; }
QUE J'AI ESSAYE DE MODIFIER CETTE REQUÊTE MySQLi ci-dessus en REQUETES PREPAREES PDO comme ceci:

Code : Tout sélectionner

$system = $conn->prepare("SELECT * FROM system_settings"); $system->execute(); $system->fetch(PDO::FETCH_ASSOC); $system->execute(); foreach($system as $k => $v){ $_SESSION['system'][$k] = $v; }
ET QUAND J'ESSAIE D'AFFICHER LA VALEUR DE LA COLONNE "name" en faisant </b><?php echo $_SESSION['system']['name'] ?> - Admin</b>,

JE REÇOIS L'ERREUR SUIVANTE:

Notice: Undefined index: name in C:\laragon\www\stamp\login.php on line 26 - Admin


AIDEZ-MOI A CORRIGER MA REQUÊTE PREPAREE PDO ci-dessus pour réussir à afficher la colonne "name" de la Table "system_settings".


2 - AVEC LE CODE CI-APRES DE MON DESTRUCTEUR:

Code : Tout sélectionner

function __destruct() { $this->db->close(); ob_end_flush(); }
,

JE REÇOIS EGALEMENT L'ERREUR:

Code : Tout sélectionner

Fatal error: Uncaught Error: Call to undefined method PDO::close() in C:\laragon\www\stamp\admin_class.php:14 Stack trace: #0 [internal function]: Action->__destruct() #1 {main} thrown in C:\laragon\www\stamp\admin_class.php on line 14

AIDEZ-MOI EGALEMENT A CORRIGER CETTE ERREUR S'IL VOUS PLAÎT.

Re: S'IL VOUS PLAÎT, COMMENT CORRIGER LES DEUX ERREURS PDO et Undefined index ???

Posté : 22 janv. 2021, 19:44
par Ryle
Salutations !

Pour ta première erreur, le message undefined index indique que tu tentes de faire appel à l'index d'un tableau alors que celui-ci n'existe pas. Si tu as ce message d'erreur quand tu affiches $_SESSION['system']['name'], c'est que le tableau de session $_SESSION['system'] ne contient pas d'index nommé 'name'.

Tu peux afficher le contenu de ton tableau avec var_dump() ou print_r() pour le constater.

Pour lire les informations que tu as en base avec PDO, il faut récupérer le résultat du fetch ou fetchall :
// tu prépares ta requête SQL avec prepare()
$sth = $pdo->prepare("SELECT * FROM ta_table");
// tu executes avec execute()
$sth->execute();
// tu récupères dans la variable $resultat un tableau associatif pour chaque enregistrement de ta_table
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
Tu peux là encore vérifier le contenu de ta variable avec var_dump ou print_r :
echo '<pre>';
print_r($resultat);
echo '</pre>';
Quand au second point, php t'informes que tu tentes d'appeler la méthode close() de $this->db, alors que celle-ci n'existe pas. Il faut soit définir cette méthode, soit s'assurer qu'elle est bien sensée se trouver dans $this->db :)

Re: S'IL VOUS PLAÎT, COMMENT CORRIGER LES DEUX ERREURS PDO et Undefined index ???

Posté : 22 janv. 2021, 23:46
par chegmarco
Merci beaucoup pour votre réponse.

Re: S'IL VOUS PLAÎT, COMMENT CORRIGER LES DEUX ERREURS PDO et Undefined index ???

Posté : 23 janv. 2021, 15:08
par chegmarco
Bonjour.

J'ai essayé de procéder comme vous me l'aviez conseillé et rien ne s'affiche. L'erreur n'a pas changé. et quand je fais:

$sth = $pdo->prepare("SELECT * FROM ta_table");
$sth->execute();
$system= $sth->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($system);
echo '</pre>';

Je reçois en retour:

Code : Tout sélectionner

PDOStatement Object ( [queryString] => SELECT * FROM system_settings )

Alors que le contenu de mon fichier "db_connect" est le suivant:

Code : Tout sélectionner

<?php $servname = 'localhost'; $dbname = 'stamp'; $user = 'root'; $pass = ''; try{ $conn = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); }

Pourquoi est-ce que je n'arrive toujours pas à afficher la valeur de la colonne "name" de la Table "system_settings" ???

Aidez-moi s'il vous plaît.

Re: S'IL VOUS PLAÎT, COMMENT CORRIGER LES DEUX ERREURS PDO et Undefined index ???

Posté : 23 janv. 2021, 19:56
par or 1
fetchall retourne un tableau, pas un objet PDOStatement , donc le retour donné ici ne correspond pas au résultat de fetchall.
voir https://www.php.net/manual/fr/pdostatement.fetchall.php exemple 1.

Re: S'IL VOUS PLAÎT, COMMENT CORRIGER LES DEUX ERREURS PDO et Undefined index ???

Posté : 24 janv. 2021, 21:23
par chegmarco
Je devrais utiliser quoi donc en lieu et place de fetchAll() ???

Re: S'IL VOUS PLAÎT, COMMENT CORRIGER LES DEUX ERREURS PDO et Undefined index ???

Posté : 25 janv. 2021, 19:49
par Ryle
fetchAll fonctionne bien, le soucis c'est que dans le code que je t'ai proposé, la connexion à la base de données est dans une variable que j'ai appelé $pdo alors que dans ton code elle s'appelle $conn ;)