Lien avec id - PHP
hogz
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
hogz -
hogz -
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
?>
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
?>
A voir également:
- Lien avec id - PHP
- Partager des photos avec un lien - Guide
- Lien url - Guide
- Verificateur de lien - Guide
- Faux lien prank - Forum Autoit / batch
- Document id lycamobile ✓ - Forum Mobile
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
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
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]
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]
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
$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
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
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
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
$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
Ton erreur vient de ta requête sql.
Modifie ton code comme ceci :
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 :
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']);
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?)
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?)
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
?>
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
?>