Problème GET id
- Accueil
- Forum
- Programmation
- PHP
- Problème GET id
Bladoom Le 24 mars 2017 à 22:12 (Édité le 25 janvier 2019 à 17:53)
J'ai actuellement un petit problème sur un de mes codes .. Après avoir essayer plusieurs fois différentes manipulation, je n'arrive pas a obtenir id afin de pouvoir changer de page via un lien, qui affichera " .php?id=X"
Voila mon code :
<?php
$reponse = $bdd->query('SELECT * FROM article ORDER BY id');
$idm=$_GET['id'];
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<div class="project-post">
<img src="upload/fiet.jpg" alt="">
<div class="hover-box">
<?php echo '<a class="link" href="article.php?id='.$idm.'">View Work</a>';?>
</div>
</div>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
?>
Je ne trouve vraiment pas la solution, et j'espère que vous pourrez m'aider ! Merci 😀 TheOldNoob Le 24 mars 2017 à 23:52 (Édité le 1 janvier 1970 à 01:00)
Je pense qu'il faut récupérer tes articles très classiquement avec ta boucle mais sans selectionné d'id avec ton $_GET que tu fait avant la boucle.
Tu va récupérer ton id après, directement dans ta balise <a> comme ceci :
<a type="button" class="link" href="article..php?id=<?php echo $donnees['id'];?>">View Work</a>
De plus, ça évite la concaténation du html a la coloration syntaxique jaunâtre et du php 😀 Bladoom Le 25 mars 2017 à 00:53 (Édité le 1 janvier 1970 à 01:00)
Je te remercie beaucoup TheOldNoob !
TheOldNoob Le 25 mars 2017 à 08:32 (Édité le 1 janvier 1970 à 01:00)
Bladoom Le 27 mars 2017 à 01:01 (Édité le 1 janvier 1970 à 01:00)
A la base il n'y avait aucunes id qui n'était la même, mais après modifier pas mal de choses, il se trouve que maintenant plusieurs id sont les même.
Cependant je ne veux qu'une seul de celles ci arrive dans ma page, j'ai donc essayer avec le DISTINCT :
<?php
$reponse = $bdd->query('SELECT DISTINCT id, image FROM article ORDER BY id');
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
<img src="photo/<?php echo $donnees ['image']; ?>" alt="">
<a type="button" class="link" href="article.php?id=<?php echo $donnees['id'];?>">View Work</a>
Mais cela ne fonctionne pas, et j'ai toujours 4 articles au lieu de 2 ( donc avec respectivement en id : 8, 14, 14, 14 au lieu d'avoir 8, 14 )
J'ai essayer d'enlever le while mais je ne pense pas que ce soit la solution; Puis j'ai essayer en faisant un JOIN mais cela n'a pas fonctionné non plus..
Je vous remercie d'avance pour l'aide, car je sais que vous aurez la réponse ou au moins le chemin pour m'y emmener ! 😜
Bonne soirée/journée ! 😘
TheOldNoob Le 27 mars 2017 à 07:42 (Édité le 27 mars 2017 à 07:45)
Sinon essaie comme ceci :
<?php
$reponse = prepare('SELECT * FROM article ORDER BY id');
$reponse->execute();
$donnéees = reponse->fetchAll(PDO::FETCH_ASSOC);
foreach($donnees as $donnee) {
?>
<img src="photo/<?php echo $donnee['image']; ?>" alt="" >
<a type="button" class="link" href="article.php?id=<?php echo $donnee['id'];?>">View Work</a>
<?php } ?>
Bladoom Le 27 mars 2017 à 12:18 (Édité le 1 janvier 1970 à 01:00)
J'ai essayé avec ce que tu me proposes mais cela me retourne une page blanche
TheOldNoob Le 27 mars 2017 à 19:02 (Édité le 1 janvier 1970 à 01:00)
il manque le $bdd
<?php
$reponse = $bdd->prepare('SELECT * FROM article ORDER BY id');
$reponse->execute();
$donnéees = reponse->fetchAll(PDO::FETCH_ASSOC);
foreach($donnees as $donnee) {?>
<img src="photo/<?php echo $donnee['image']; ?>" alt="" >
<a type="button" class="link" href="article.php?id=<?php echo $donnee['id'];?>">View Work</a>
<?php } ?>
Bladoom Le 27 mars 2017 à 22:17 (Édité le 1 janvier 1970 à 01:00)
En tout cas si c'est un foreach qu'il faut que je mette je vais me renseigner sur sa méthode d'insertion !
Si jamais tu as une autre idée je serais pas loin.. 😉
TheOldNoob Le 27 mars 2017 à 22:27 (Édité le 27 mars 2017 à 22:28)
met un ORDER BY id DESC à la limite, mais normalement ça doit aussi fonctionné sans.
Je viens de me relire, et c'est exactement le même code que j'utilise sur plusieurs de mes sites. Donc je vois pas ce qui cloche.
La boucle while et la bouche foreach ne s'utilise pas pour avoir le même résultat. la boucle while demande une condition pour s'arrêté, c'est surement pour ça qu'elle affiche plusieurs fois ton id 14.
Il suffit de comprendre un peu l'anglais, while = tant que / foreach = pour chaque
Bladoom Le 27 mars 2017 à 22:34 (Édité le 27 mars 2017 à 22:37)
Mais je n'avais pas étudier la possibilité d'un foreach.. Du moins, je n'en connais pas la méthode 😰
TheOldNoob Le 27 mars 2017 à 23:03 (Édité le 1 janvier 1970 à 01:00)
TheOldNoob Le 27 mars 2017 à 23:34 (Édité le 1 janvier 1970 à 01:00)
Bladoom Le 27 mars 2017 à 23:45 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 28 mars 2017 à 04:31 (Édité le 1 janvier 1970 à 01:00)
Il manque également le $ à la variable reponse ligne 4 du code de @TheOldNoob
Non aucuns ! Même avec le " error_reporting(E_ALL); ini_set('display_errors', '1'); "As-tu également activé les erreurs de PDO ?
Bladoom Le 28 mars 2017 à 11:14 (Édité le 1 janvier 1970 à 01:00)
Oui j'ai bien activé les erreurs PDO
Je n'ai plus de page blanche ! Mais cela ressort toujours les même résultats ( 3 fiche appartenant au même auteur au lieu d'une )
TheOldNoob Le 28 mars 2017 à 19:40 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 28 mars 2017 à 20:22 (Édité le 1 janvier 1970 à 01:00)
Bladoom Le 29 mars 2017 à 18:09 (Édité le 29 mars 2017 à 18:11)
J'ai donc 2 tables.
Membres : ( id en AI et primary )
`id` int(11) NOT NULL,
`pseudo` varchar(255) NOT NULL,
`mail` varchar(255) NOT NULL,
`motdepasse` text NOT NULL,
`confirmkey` varchar(255) NOT NULL,
`confirme` int(1) NOT NULL
et fiche_voiture : ( id en AI et primary )
`id` int(11) NOT NULL,
`id_membre` int(11) NOT NULL,
`titre` varchar(255) NOT NULL,
`prix` int(11) NOT NULL,
`message` text NOT NULL,
`marque` varchar(255) NOT NULL,
`telephone` int(11) NOT NULL,
`image1` varchar(255) NOT NULL,
`image2` varchar(255) NOT NULL,
`image3` varchar(255) NOT NULL
Mon problème est donc que quand un membre crée une fiche, cela lui enregistre donc une id de fiche, avec son id_membre et les infos qu'il aura déposer dans un formulaire.
Seulement j'aimerais que chacun des membres, après l'ajout d'un ou plusieurs article puisse donc sur la page d'accueil ( ou autre ) voir son article en cliquant dessus.
Quand il crée un ou plusieurs articles, tous se mettent dans une page qui lui est dédié que j'arrive a récupérer en faisant un GET sur la page voulu : No problèmes.
Cependant, vu qu'il a crée plusieurs articles, plusieurs auront l'id_membre correspondant avec la création de la fiche, et ce que j'aimerais faire, c'est qu'au lieu que chaque article soit récupéré ( avec les id 8, 14, 14, 14 par exemple ) il n'y ai qu'un seul article afin que sur la page d'accueil il n'y ai pas XXX articles du même membre.
Voila mon code de la page d'index :
<html>
<head>
</head>
<body>
<?php
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=xxxx;dbname=*xxx', 'xxx', 'xxxx');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
// On récupère tout le contenu de la table pizza
$reponse = $bdd->prepare('SELECT id_membre,image1 FROM fiche_voiture');
$reponse->execute();
$donnees = $reponse->fetchAll(PDO::FETCH_ASSOC);
foreach($donnees as $donnee) {
?>
<img src="photo/<?php echo $donnee ['image1']; ?>" alt="" style="height: 450px;width: 420px;">
<a type="button" class="link" href="fiche_voiture.php?id=<?php echo $donnee['id_membre'];?>">View Work</a>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
?>
</body>
</html>
Pour le moment cela marche mais il me ressort tout les articles ( normal avec la boucle while ). Mais même avec le foreach il me ressort la même chose sachant que je fais un "SELECT * FROM fiche_voiture".. DISCTINCT ou non cela ne change rien :/ TheOldNoob Le 29 mars 2017 à 21:10 (Édité le 1 janvier 1970 à 01:00)
Dans se cas rien de plus facile 😀
$reponse = $bdd->prepare('SELECT id_membre,image1 FROM fiche_voiture ODER BY rand() LIMIT 1');
ce qui aura pour effet d'afficher un article aléatoirement parmi tout ses articles avec la limite de 1. Bladoom Le 30 mars 2017 à 00:13 (Édité le 1 janvier 1970 à 01:00)
Le membre id 14 a crée 4 fiche différentes.
Le membre id 8 en a crée 1.
Le membre id 5 en a crée 7.
Sur la page d'index il ne dois pas y avoir les articles de cet façon : ( 14, 14, 14, 14, 8 , 5, 5, 5, 5.... ), Mais un seul article "visible".
Avec le rand() LIMIT ( que je ne connaissais pas d'ailleurs et je te remercie de m'avoir appris ca ! 😄 ) qu'un seul article est visible ( le 14 ) et pas le 8 et le 5 ( ou plus si il y a ).
J'espère avoir été assez compréhensible ! Et je vous remercie vraiment de m'aider aussi ardemment ! 😎
Zbuu Le 30 mars 2017 à 12:21 (Édité le 1 janvier 1970 à 01:00)
En faite sur ta page index tu liste tous les articles et tu veux voudrais que lorsqu'un utilisateur quelconque clique sur View Work qu'il soit redirigé vers ta page fiche_voiture et que seul l'article sur lequel il a cliqué soit affiché c'est bien ça ?
Si c'est bien ça que tu cherches à faire alors tu t'y prends mal, tu devrais remplacer modifier ta requête de ta page index pour pouvoir récupérer l'id de l'article au lieu de l'id du membre :
$donnees = $bdd->query('SELECT id, image1 FROM fiche_voiture')->fetchAll(PDO::FETCH_ASSOC);
Et modifier ta boucle pour passer en paramètre l'id de l'article :
foreach($donnees as $donnee) { ?>
<img src="photo/<?php echo $donnee['image1']; ?>" alt="" style="height: 450px;width: 420px;">
<a type="button" class="link" href="fiche_voiture.php?id=<?php echo $donnee['id'];?>">View Work</a>
<?php }
Et ensuite dans ta page fiche_voiture (que je ne sais pas comment tu gères, il nous faudrait ton code pour voir) une requête du type (après tes vérifications):
$q = $bdd->prepare("SELECT f.*, m.pseudo FROM fiche_voiture AS f LEFT JOIN membres AS m ON m.id = f.id_membre WHERE id = :id");
$q->execute([':id' => $_GET['id']]);
$data = $q->fetch(PDO::FETCH_ASSOC);
$q->closeCursor();
Pour pouvoir récupérer les données de l'articles et le nom du membre qui l'a ajouté.
Bladoom Le 30 mars 2017 à 12:53 (Édité le 1 janvier 1970 à 01:00)
Sur ma page index, tout les articles ressortent, alors que je voudrais qu'un seul article appartenant aux membres n'apparaisse afin qu'un membre ne puisse pas spammer de multitudes d'articles, qui seront tous regrouper dans une fiche correspondant au membre.
Imaginons : Comme si c'était un dossier sur la page d'index qui, en cliquant dessus, regroupera tout les articles du membres "id_membre" en passant à une autre page qui est : fiche_voiture.php?id="X".