Erreur dans mon code php

Résolu/Fermé
F2C Messages postés 51 Date d'inscription mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014 - 17 juil. 2014 à 14:13
F2C Messages postés 51 Date d'inscription mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014 - 23 juil. 2014 à 08:50
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 mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014
17 juil. 2014 à 14:16
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 80 Date d'inscription samedi 15 septembre 2012 Statut Membre Dernière intervention 20 octobre 2014 7
Modifié par dan-b le 18/07/2014 à 15:48
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 mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014
18 juil. 2014 à 16:03
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 vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
19 juil. 2014 à 11:10
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 mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014
21 juil. 2014 à 10:04
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 vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
21 juil. 2014 à 12:30
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 mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014
21 juil. 2014 à 13:12
comment ça?
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
21 juil. 2014 à 18:55
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 mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
Modifié par totodunet le 21/07/2014 à 22:30
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 jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
22 juil. 2014 à 00:28
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 mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014
23 juil. 2014 à 08:48
Je vous remercie ça fonctionne maintenant.
0
F2C Messages postés 51 Date d'inscription mercredi 16 juillet 2014 Statut Membre Dernière intervention 29 août 2014
23 juil. 2014 à 08:50
ç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