Problème GET id

Ce topic a été résolu
Bladoom

Bladoom Le 24 mars 2017 à 22:12 (Édité le 25 janvier 2019 à 17:53)

Bonjour tout le monde !
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

TheOldNoob Le 24 mars 2017 à 23:52

Salut l'ami,
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

Bladoom Le 25 mars 2017 à 00:53

Je suis bête.. La problème était si simple.. 😈
Je te remercie beaucoup TheOldNoob !
TheOldNoob

TheOldNoob Le 25 mars 2017 à 08:32

On est jamais bête, on apprend tout les jours 😀
Bladoom

Bladoom Le 27 mars 2017 à 01:01

Alors je vais demander à en apprendre encore plus ! 😄
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

TheOldNoob Le 27 mars 2017 à 07:42 (Édité le 27 mars 2017 à 07:45)

Déjà je pense qu'il manque une fermeture de ?> entre la line 8 et la 9

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

Bladoom Le 27 mars 2017 à 12:18

Effectivement il manquait une fermeture php, mais qui était bien présente dans le code 😗
J'ai essayé avec ce que tu me proposes mais cela me retourne une page blanche
TheOldNoob

TheOldNoob Le 27 mars 2017 à 19:02

Normal, je suis un crétin qui devrais pas codé pendant le p'ti dej 😉

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

Bladoom Le 27 mars 2017 à 22:17

Bizarrement ça ne marche pas .. J'ai remarquer qu'il y avait un "é" en trop dans la ligne 4 que j'ai corriger sur mon code.
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

TheOldNoob Le 27 mars 2017 à 22:27 (Édité le 27 mars 2017 à 22:28)

Effectivement, j'ai mis un é de trop....

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

Bladoom Le 27 mars 2017 à 22:34 (Édité le 27 mars 2017 à 22:37)

Yes ! Heureusement que je comprend pas mal ( voir même très bien ) l'anglais sinon je ne m'en sortirai pas vu que presque "tout" se fait en anglais !
Mais je n'avais pas étudier la possibilité d'un foreach.. Du moins, je n'en connais pas la méthode 😰
TheOldNoob

TheOldNoob Le 27 mars 2017 à 23:03

donc c'est bon ça fonctionne? 😀
Bladoom

Bladoom Le 27 mars 2017 à 23:26

Pas du tout :(
TheOldNoob

TheOldNoob Le 27 mars 2017 à 23:34

Et tu n'a aucun message d'erreur?
Bladoom

Bladoom Le 27 mars 2017 à 23:45

Non aucuns ! Même avec le " error_reporting(E_ALL); ini_set('display_errors', '1'); "
TheOldNoob

TheOldNoob Le 27 mars 2017 à 23:54

et si tu fait un var_dump ?
Zbuu

Zbuu Le 28 mars 2017 à 04:31

Yop 

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

Bladoom Le 28 mars 2017 à 11:14

Hello Zbuu !
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

TheOldNoob Le 28 mars 2017 à 19:40

C'est possible de nous mettre la totalité de ton code (la page) sur codeshare? histoire de voir si ça viens de la ou d'ailleurs
Zbuu

Zbuu Le 28 mars 2017 à 20:22

Est-il possible aussi d'avoir tes différentes tables, ainsi que leurs champs stp ? Je dois avouer que je n'ai pas compris très bien compris ton problème peux tu expliqués a nouveau ? 
Bladoom

Bladoom Le 29 mars 2017 à 18:09 (Édité le 29 mars 2017 à 18:11)

Hello !
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

TheOldNoob Le 29 mars 2017 à 21:10

ah bah si j'ai bien tout compris, ton problème c'est que tu veux affiché qu'un seul article? 
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

Bladoom Le 30 mars 2017 à 00:13

Alors oui et non pour l'affichage d'un seul article, je vais essayer d'être un peu plus clair.
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

Zbuu Le 30 mars 2017 à 12:21

Désolé mais j'ai toujours pas très bien compris :(

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

Bladoom Le 30 mars 2017 à 12:53

Je dois vraiment mal expliquer 😋
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".