Erreur dans mon code php

Résolu
F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -  
F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous.

lorsque j'execute mon code suivant:




j'obtient cette erreur: Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\matricules.php on line 36

Est ce que quelqu'un pourrait m'aider svp?
A voir également:

12 réponses

F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
mon code si c'est pas visible:


<html lang="fr">
<head>
<meta charset="UTF-8"/>
<title>DDO</title>
<link rel="stylesheet" href="ddo.css" />
</head>

<body>
<header>
<h1>Liste des DDO Client</h1>
</header>
<content>
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=sap_cristal_bdd', 'root', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

?>


<table>
<tr class = "nc">
<td>MATRICULE</td>
<td>NOM</td>
<td>AFFECTATION</td>
<td>CATEGORIE</td>
<td>SORTI</td>
</tr>
<?php
$reponse = $bdd->query('SELECT Matricule, UPPER (Nom), LOWER(Prénom), Affectation, Catégorie, Sorti FROM matricules ORDER BY Nom ASC');
while ($donnees = $reponse->fetch())
{
?>
<tr>
<td> <?php echo $donnees['NOM'];?> </td>
<td> <?php echo $donnees['Nom']. ' ' .$donnees['Prénom'];?> </td>
<td> <?php echo $donnees['Affectation'];?> </td>
<td> <?php echo $donnees['Catégorie'];?> </td>
<td> <?php echo $donnees['Sorti'];?> </td>
</tr>
<?php
}
$reponse->closeCursor();
?>
</table>

</content>


<form class="ddo-form">
<li>
<a href="#" onClick="window.open('matricules_ajout.php','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=1, copyhistory=0, menuBar=0, width=500, height=500, left=500, top=500');return(false)">
AJOUTER MATRICULE
</a>
</li>

<li>
<a href="#" onClick="window.open('matricules_supp.php','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=1, copyhistory=0, menuBar=0, width=500, height=500, left=500, top=500');return(false)">
SUPPRIMER MATRICULE
</a>
</li>

<li>
<a href="#" onClick="window.open('matricules_modif.php','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=1, copyhistory=0, menuBar=0, width=500, height=500, left=500, top=500');return(false)">
MODIFIER MATRICULE
</a>
</li>

<li>
<a href="#" onClick="window.open('matricules_rech.php','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=1, copyhistory=0, menuBar=0, width=500, height=500, left=500, top=500');return(false)">
RECHERCHE
</a>
</li

</form>

</body>
</html>
0
dan-b Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   7
 
bonjour,

"PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur survient."

Donc par sécurité faire :

if ($reponse == false){
   // TRAITEMENT ERREUR
}
else {
   // LECTURE RESULTATS
   while ($donnees = $reponse->fetch()){
    
   }
}


L'erreur doit venir de la requête sql
0
F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
Désolée de vous avoir embêté je croyais avoir supprimer cette question;
en fait j'ai trouvé mon erreur elle venait du fait que comme une conne j'ai mit des accents dans le nom des mes tables et de mes champs dans ma base de données.

Par contre j'ai une autre question toujours par rapport à une requête qui ne fonctionne pas en fait c'est ça:

<?php
$reponse = $bdd->query('SELECT Matricule, Nom, Prenom, Affectation, Categorie, Sorti FROM matricules ORDER BY Nom ASC');
while ($donnees = $reponse->fetch())
{
?>
<tr>
<td> <?php echo $donnees['Matricule'];?> </td>
<td> <?php echo $donnees['Nom']; ?> </td>
<td> <?php echo $donnees['Prenom'];?> </td>
<td> <?php echo $donnees['Affectation'];?> </td>
<?php
$tmp = $donnees['Categorie'];
$reponse2 = $bdd->query('SELECT Categorie FROM categorie WHERE Code_Categ = $tmp');/*Je ne comprends pas pourquoi est ce que ??a ne fonctionne pas*/
if ($reponse2 == false)
{
// TRAITEMENT ERREUR

}
else
{
// LECTURE RESULTATS

//print_r($reponse->fetchAll());


while ($donnees2 = $reponse2->fetch())
{
?>
<td> <?php echo $reponse2;?> </td>
<?php
}
}

?>

j'ai roujouté du code et j'ai essayé votre solution mais:
-je ne sais pas comment traiter l'erreur;
-ma requête fonctionne bien dans phpmyadmin
-comment je fais? :(
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Pour l'erreur, affiche simplement qu'il y a un problème, le but étant de stopper le code.

Ta requête :
$reponse2 = $bdd->query('SELECT Categorie FROM categorie WHERE Code_Categ = $tmp');
Pose problème, il me semble que les variables PHP ne sont exécuté qu'entre guillemet et non apostrophe.
Tu envoi donc une chaîne de caractère ($tmp) et non sa valeur, ce qui cause une erreur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
Desolée de ne répondre que maintenant, quand je mets "$tmp" j'ai une autre erreur qui est:

Catchable fatal error: Object of class PDOStatement could not be converted to string
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
C'est que $tmp est un objet, que tu ne peut donc pas afficher comme cela :)
0
F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
comment ça?
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Désolé, j'ai répondu trop vite.
Le problème ce situe au niveau de ton Fetch, tu boucle dans la variable $donnees2 mais tu fais des echo sur $reponse2.
0
totodunet Messages postés 1377 Date d'inscription   Statut Membre Dernière intervention   200
 
bonjour,

je pense que tu peux faire qu'une seule requête SQL.
ça t'économise une variable temporaire ($tmp) et une requête vers ta BDD

SELECT M.Matricule, M.Nom, M.Prenom, M.Affectation, M.Categorie, M.Sorti FROM matricules AS M, categories AS C WHERE C.Code_Categ = M.Categorie ORDER BY M.Nom ASC


sous réserve que ça fonctionne car pas test et longtemps que j'ai pas pratiqué le sql

Qui ne tente rien n'a rien
0
zermat Messages postés 160 Date d'inscription   Statut Membre Dernière intervention   16
 
Si le champ Code_Categ est de type integer mettez:
$reponse2 = $bdd->query("SELECT Categorie FROM categorie WHERE Code_Categ = $tmp");
S'il est de type varchar mettez:
$reponse2 = $bdd->query("SELECT Categorie FROM categorie WHERE Code_Categ = '$tmp' ");
0
F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
Je vous remercie ça fonctionne maintenant.
0
F2C Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
ça donne ça:


<?php
$reponse = $bdd->query('SELECT Matricule, Nom, Prenom, Affectation, Categorie, Sorti FROM matricules ORDER BY Nom ASC');
while ($donnees = $reponse->fetch())
{
?>
<tr>
<td> <?php echo $donnees['Matricule'];?> </td>
<td> <?php echo $donnees['Nom']; ?> </td>
<td> <?php echo $donnees['Prenom'];?> </td>
<td> <?php echo $donnees['Affectation'];?> </td>
<?php
$tmp = $donnees['Categorie'];
$reponse2 = $bdd->query("SELECT Categorie FROM categorie WHERE Code_Categ = $tmp");
if ($reponse2 == false)
{
// TRAITEMENT ERREUR

}
else
{
// LECTURE RESULTATS

//print_r($reponse->fetchAll());


while ($donnees2 = $reponse2->fetch())
{
?>
<td> <?php echo $donnees2['Categorie'];?> </td>
<?php
}
}

?>
0