Lien avec id - PHP

Fermé
hogz Messages postés 9 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 4 juillet 2013 - 29 mai 2013 à 14:09
 hogz - 3 juin 2013 à 08:38
Bonjour,

N'étant un spécialiste de PHP, je m'exerce à apprendre....et là je butte.
J'ai une première page liste.php où s'affichent différents membres sous forme de tableau.
Ces membres sont issus d'une base de données qui est affichée par une requête SQL.
J'ai fait un lien sur l'ID pour que l'on puisse en cliquent sur celui-ci êtres envoyé sur la fiche du membre qui est la page fiche.php.
Tout ça c'est dans la théorie, car quand je clique sur l'ID le page fiche.php s'affiche, mais un message d'erreur m'indique:
Fatal error: Call to a member function fetch() on a non-object in /htdocs/public/tuc/fiche.php on line 334
Bon, je tourne en rond c'est pour cela que je demande de l'aide...
Merci de m'aider.

MON CODE Page liste.php

<?php
try
{
// On se connecte à MySQL
$bdd = new PDO ('mysql:host=************;dbname=*******', '******','*******')
or die(print_r($bdd->errorInfo()));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

// Si tout va bien, on peut continuer

// On récupèrere tout le contenu de la table
$reponse = $bdd->query('SELECT * FROM 'base' WHERE SECTION=\'*******\'ORDER BY 'NOM'');


// On affiche chaque entréee une à une
while ($donnees = $reponse->fetch())
{
?>

<table width="580" border="1">
<th scope width="30" class="Style500"><a href="fiche.php?id=".$id."' ><?php echo ($donnees['id']); ?></a></span></th>
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['DATE'])); ?></span></th>
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['NOM']); ?></span></th>
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['PRENOM']); ?></span></th>
<th scope width="90" class="Style500"><?php echo htmlentities ($donnees['SECTION']); ?></span></th>
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['DATENAISSANCE'])); ?></span></th>
</tr>
</table>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la requête

?>

MON CODE Page Fiche.php

<?php
try
{
// On se connecte à MySQL
$bdd = new PDO ('mysql:host=********;dbname=********', '******','*******')
or die(print_r($bdd->errorInfo()));;
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

// Si tout va bien, on peut continuer

// On récupèrere tout le contenu de la table
$reponse = $bdd->query('SELECT * FROM 'base' WHERE id=$_GET['id']');


// On affiche chaque entréee une à une
while ($donnees = $reponse->fetch())
{
?>


<table width="580" border="1">
<th scope width="30" class="Style500"><?php echo ($_GET['id']); ?></span></th>
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['DATE'])); ?></span></th>
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['NOM']); ?></span></th>
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['PRENOM']); ?></span></th>
<th scope width="90" class="Style500"><?php echo htmlentities ($donnees['SECTION']); ?></span></th>
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['DATENAISSANCE'])); ?></span></th>
</tr>
</table>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la requête

?>

10 réponses

Salut,

Le message d'erreur t'indique que la variable $response n'est pas un objet et que tu ne peux donc pas appeler la fonction fetch.

En effet la fonction PDO query retourne soit un objet PDOStatement, soit FALSE si une erreur est survenue pendant l'exécution de ta requête, ce qui semble être le cas pour ton code.

Il faut donc que tu vérifies si la variable $response est différent de FALSE avant d'appeler la fonction fetch, et que tu corriges ta requête sql qui est vraisemblablement fausse.

Bonne journée
0
Salut salut,

Je suis d'accord avec Pitet c'est ce genre de ligne qui va poser problème :
$reponse = $bdd->query('SELECT * FROM 'base' WHERE SECTION=\'*******\'ORDER BY 'NOM'');
Je pense qu'il y a une erreur au niveau des guillemets simple, ta chaine est coupée essaie comme ça:
$reponse = $bdd->query("SELECT * FROM 'base' WHERE SECTION=\'*******\'ORDER BY 'NOM'");
-> guillemet double autour de la chaine contenu dans query

Résolu? ===> [RESOLU]
0
hogz Messages postés 9 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 4 juillet 2013
Modifié par hogz le 29/05/2013 à 15:34
Merci pour vos réponses, si je suis votre réponse et met un " ou double sur ma page liste.php, j'ai une erreur :
Parse error: syntax error, unexpected '"' in /htdocs/public/...../......php on line 339

Alors que, je n'ai pas d'erreur initialement sur celle-ci. (liste.php)

J'ai une erreur sur la seconde page fiche.php (mais le tableau apparait, c'est déjà ça..)
Fatal error: Call to a member function fetch() on a non-object in /htdocs/public/tuc/fiche.php on line 334

Et si je met des "" sur page fiche.php - message:
Parse error: syntax error, unexpected ''', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /htdocs/public/tuc/fiche.php on line 330
0
Utilisateur anonyme
29 mai 2013 à 15:37
Tu peux poster la ligne que tu as écrite?
0

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

Posez votre question
hogz Messages postés 9 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 4 juillet 2013
Modifié par hogz le 29/05/2013 à 15:43
Page liste.php
$reponse = $bdd->query('SELECT * FROM 'base' WHERE SECTION=\'*******\'ORDER BY 'NOM')';


Page fiche.php
$reponse = $bdd->query('SELECT * FROM 'base' WHERE id=$_GET['id']');


Voila
0
Utilisateur anonyme
29 mai 2013 à 15:49
Copie colle cette ligne à la place de celle dans liste.php (en remplaçant les champs cachés) et dis moi s'il y a encore une erreur :
$reponse = $bdd->query("SELECT * FROM base WHERE SECTION='*******' ORDER BY NOM");
0
hogz Messages postés 9 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 4 juillet 2013
29 mai 2013 à 15:57
Il n'y a pas d'erreur, mais en cliquant sur le lien id pour aller sur la page fiche.php

Sur la page fiche.php - Le tableau apparait avec au dessus
Fatal error: Call to a member function fetch() on a non-object in /htdocs/public/tuc/fiche.php on line 334
0
hogz Messages postés 9 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 4 juillet 2013
29 mai 2013 à 16:25
j'ai simplifié

$reponse = $bdd->query("SELECT * FROM base WHERE id=$_GET[id]");


Toujours même problème sur page fiche.php

Fatal error: Call to a member function fetch() on a non-object in /htdocs/public/tuc/fiche.php on line 334
0
Ton erreur vient de ta requête sql.

Modifie ton code comme ceci :

$requete = 'SELECT * FROM base WHERE id=' . $_GET['id'];
$reponse = $bdd->query($requete);
if ($reponse === false) {
    echo 'Erreur sur la requête ' . $requete;
    echo '<br />';
    var_dump($bdd->errorInfo());
} else {
    while ($donnees = $reponse->fetch()) {
        [...]
    }
}


Tu verras ainsi l'erreur sql si une erreur survient lors de l'exécution de la requête.

Petite remarque : ta requête construite comme ci-dessus n'est pas sécurisée et tu pourrais être victime d'une injection sql.
Pour bien faire il faut protéger toutes les entrées (ici $_GET['id']) comme ceci :

$requete = 'SELECT * FROM base WHERE id=' . $bdd->quote($_GET['id']);
0
hogz Messages postés 9 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 4 juillet 2013
Modifié par hogz le 29/05/2013 à 17:52
Ok ça avance...

j'ai enlevé

[...]
}
qui posaient problème (affichage:Parse error: syntax error, unexpected '[' in /htdocs/public/tuc/fiche.php on line 339)

Donc maintenant pas d'erreur dans la page fiche.php
On voit bien une seule ligne de tableau, mais les champs de sont pas remplis par les echo...
Donc, ce qui veut dire, que id n'est pas récupéré (certainement?)
0
Je reprends le sujet après avoir essayé de me dépatouiller afin de comprendre donc d'apprendre...
Donc ma ligne de première page liste.php pour l'id

<th scope width="30" class="Style500"><a href="fiche.php?id=<?php echo ($donnees['id']); ?></a></span></th>

Quand je clique sur le lien: affichage de ma page fiche.php

http://monsite.fr/fiche.php?id=11

Donc, si j'ai bien compris j'ai bien récupérer le bon id...de ma page liste.php

Sur ma page fiche.php le bon ( id ) s'affiche dans mon tableau sans que pour cela le reste suive...

Donc là, je cale...car je vois pas d'où peut provenir l'erreur...le GET est appelé et s'affiche... pour le reste se sont des echo de la base de données.
Encore merci de m'aider, surtout à comprendre...

REQUETE

$requete = 'SELECT * FROM base WHERE id=' $bdd->quote( $_GET['id']);
$reponse = $bdd->query($requete);
if ($reponse === false) {
echo 'Erreur sur la requête ' . $requete;
echo '<br />';
var_dump($bdd->errorInfo());
} else {
while ($donnees = $reponse->fetch()) {
}
?>
<table width="580" border="0">
<th scope width="30" class="Style500"><?php echo ($_GET['id']); ?></span></th>
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['DATE'])); ?></span></th>
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['NOM']); ?></span></th>
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['PRENOM']); ?></span></th>
<th scope width="90" class="Style500"><?php echo htmlentities ($donnees['SECTION']); ?></span></th>
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['DATENAISSANCE'])); ?></span></th>
</tr>
</table>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
?>
0
J'ai beau changer ma requête SQL...ça ne marche pas.
Je tourne en rond .
Merci pour votre aide
0