N'afficher qu'une seule entrée d'une table

Résolu
Pascal-Jr -  
JooS Messages postés 2705 Statut Membre -
Bonjour,
je voudrais n'afficher qu'une seule entrée d'une table SQL.
En fait ça serait pour un système d'annonce :
j'ai une liste de moto à vendre sous forme de tableau et je voudrais que si une personne clique sur le lien d'une moto tombe sur une fiche descriptive de cette moto.
Le modèle de la fiche descriptive serait une seule page pré-remplie complétée par des variables.

Mon problème :
Je ne connais pas la requête SQL permettant de n'afficher qu'une seule entrée.
En cherchant, j'ai trouvé WHERE mais je ne sais pas si l'usage est vraiment adapté dans mon cas.

Merci d'avance à tous pour votre implication.

8 réponses

Résumé de la discussion

Affiner l'affichage d'une liste SQL pour ne présenter qu'une seule fiche descriptive dépend d'une requête ciblée et d'un passage d'identifiant via l'URL, afin d'ouvrir une page préremplie. Des solutions courantes passent par une page de détail recevant un paramètre id dans l'URL, puis une requête préparée comme SELECT * FROM article WHERE id = ? pour récupérer l'enregistrement et afficher ses attributs. En pratique, le lien associé à chaque moto pointe vers la fiche individuelle, par exemple afficher_fiche.php?id=13, et la page de fiche utilise $_GET['id'] ou une variable similaire pour alimenter la requête. Certaines réponses préconisent l'usage de PDO et de filtrage, par exemple $id = intval($_GET['id']);, pour limiter les injections et garantir que l'identifiant soit un entier.

Bobot (l'IA à votre service)
  1. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
     
    Salut,
    Peux-tu nous donner ta table pour voir ce que l'on peut faire.
    Sinon si j'ai bien compris, tu veux lorsque l'utilisateur clic sur le lien, il reçoit un descriptif d'une moto a vendre c'est bien ça ?
    1
  2. Pascal-Jr
     
    Exactement.

    'modele' => $_POST['modele'],
    'cylindree' => $_POST['cyl'],
    'km' => $_POST['km'],
    'annee' => $_POST['annee'],
    'prix' => $_POST['prix'],
    'description' => $_POST['description'],

    Je sais pas si c'est suffisant, si c'est le cas n'hésitez pas à me demander.
    0
    1. Pascal-Jr
       
      C'est une partie de mon script de traitement lorsque l'administrateur souhaite ajouter une annonce.
      0
    2. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
       
      Non, ta structure de ta table s'il te plait.
      0
    3. Pascal-Jr
       
      id int(11)
      modele varchar(100)
      cylindree int(5)
      annee int(4)
      km int(6)
      prix int(5)
      description text

      Je suppose que c'est ça que tu voulais.
      Je n'ai qu'une entrée. Je ne sais pas si c'est nécessaire de la mettre.
      0
  3. Pascal-Jr
     
    Ah j'ai oublié de préciser que je suis un gros débutant en PHP/MySQL ...
    Si ça peut vous aidez à comprendre ...
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      Ben tu affiche la fiche selon l'id ...
      En utilisant PDO et avec une requete préparé, tu aura un truc du genre ...
      $req = $bdd->prepare('SELECT * FROM table WHERE id = ?'); 
      $req->execute(array($id)); 
      
      0
  4. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
     
    Bonsoir,
    Désolé de mon retard mais voilà quelques chose que tu va t'en ravir !
    <?php
    $requete = mysql_query ("SELECT * FROM table ORDER BY id DESC LIMIT 10"); // Changer table par ta table 10 = Le nombre de requêtes maximum
    while($donnees = mysql_fetch_array($requete))
    {
    ?>
    Modele : <?php echo ''.$donnees['modele'].''; ?>
    Cylindre : <?php echo ''.$donnees['cylindree'].''; ?>
    Année : <?php echo ''.$donnees['annee'].''; ?>
    Nombre de kilomètres : <?php echo ''.$donnees['km'].''; ?>
    Prix : <?php echo ''.$donnees['prix'].''; ?>
    Description :  : <?php echo ''.$donnees['description'].''; ?>
    <?php
    }
    ?>
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      ça affichera 10 résultats ...!!!
      0
    2. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
       
      Ben il peut modifier après !
      0
    3. JooS Messages postés 2705 Statut Membre 228
       
      l'id doit être une variable ...et on la récupère avec get

      $art_id = $_GET['id'];   
      ..............("SELECT * FROM table WHERE id = '%$art_id%'");
      0
    4. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
       
      Pourquoi tu veux faire ça ?
      Si sa se trouve sa convient parfaitement à Pascal ma requête !
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pascal-Jr
     
    Pendant ce temps j'ai également bossé sur un script, ça ne fonctionne pas j'ai une erreur undefined index : id

    <?php 
       try 
       { 
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
        $bdd = new PDO('mysql:host=localhost;dbname=annonces', 'root', '', $pdo_options); 
         
     $req = $bdd->prepare('SELECT * FROM article WHERE id = ?'); 
     $req->execute(array($_GET['id'])); 
    // Je sépare la variable $_GET['id'] de ma requête pour éviter les injections SQL 
         
        while ($donnees = $req->fetch()) 
        { 
        ?> 
        <ul> 
         <li>Marque/Modèle : <?php echo $donnees['modele']; ?></li> 
         <li>Cylindrée :  <?php echo $donnees['cylindree']; ?></li> 
         <li>Km : <?php echo $donnees['km']; ?></li> 
         <li>Année : <?php echo $donnees['annee']; ?></li> 
         <li>Prix : <?php echo $donnees['prix']; ?></li> 
         <li>Description : <?php echo $donnees['description']; ?></li> 
        </ul> 
        <?php 
        } 
        $req->closeCursor(); 
       } 
       catch(Exception $e) 
       { 
        die('Erreur : '.$e->getMessage()); 
       } 
       ?> 
    


    Par contre, je me pose une question :
    Comment j'utilise $_GET sans avoir un <form></form> pour traiter quand je clique sur mon lien ?
    Je reconnais que l'idée de récupérer l'id avec ne variable est ce que je comptais faire mais je ne sais pas comment m'y prendre.
    0
    1. Pascal-Jr
       
      Enfin disons que je sais comment m'y prendre mais ça ne marches pas ... donc ça revient à dire que ...
      0
    2. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
       
      Prend le mien il n'y a pas d'erreur et tu veux faire comme moi x)
      0
    3. JooS Messages postés 2705 Statut Membre 228
       
      Ton adresse(URL) doit être du genre ...tonsite.com/afficher_fiche.php?id=15
      La page afficher_fiche.php sera la page qui contiens le code suivant ...
      15 c'est l'id de la moto dans ta table ...
      <?php           
      try {           
       $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;  
       $bdd = new PDO('mysql:host=localhost;dbname=annonces', 'root', '', $pdo_options);  
       }           
      
      catch (Exception $e) {           
       die('Erreur : ' . $e->getMessage());           
       }           
      $id = htmlentities($_GET['id']);          
      $req = $bdd->prepare('SELECT * FROM article WHERE id = ?');            
      $req->execute(array($id));           
      while ($donnees = $req->fetch()) { ?>            
          <ul>            
             <li>Marque/Modèle : <?php echo $donnees['modele']; ?></li>            
             <li>Cylindrée :  <?php echo $donnees['cylindree']; ?></li>            
             <li>Km : <?php echo $donnees['km']; ?></li>            
             <li>Année : <?php echo $donnees['annee']; ?></li>            
             <li>Prix : <?php echo $donnees['prix']; ?></li>            
             <li>Description : <?php echo $donnees['description']; ?></li  
          </ul>            
      <?php }            
      $req->closeCursor();                   
      ?>           
      


      Dans la page qui affiche les motos que tu as dans ta table, exemple afficher_motos.php
      Tu fait la meme chose avec une boucle sauf que tu doit afficher juste le nom de la moto avec un lien vers sa fiche, t'aura un truc du genre ...

      .......           
      while ($donnees = $req->fetch()) { ?>           
             <ul>            
                 <li><a href="afficher_fiche.php?id=<?php echo $donnees['id'] ?>"><?php echo $donnees['modele']; ?></a></li> 
             </ul> 
      }
      ...... 
      


      Donc par exemple pour la moto dont l'id est 13, le lien ressemblera a ça : afficher_fiche.php?id=13
      0
  7. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
     
    Est-ce que tu veux ça :
    PAGE INDEX : (nom exemple)
    <a>Nom du model</a>

    PAGE VOIR MODEL :
    Modèle
    Km
    Prix
    etc ...
    0
    1. Pascal-Jr
       
      Exactement et en fait ça afficherais le nom du modèle en se servant de variables, et d'une seule page standard complétées grâce aux variables lorsque l'utilisateur clique sur le lien du modèle souhaité.
      0
    2. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
       
      Facile je te fais ça de suite !
      0
  8. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
     
    Alors, je crois que ça devrais marcher (lis bien les commentaires):

    <!-- INDEX soit index.php -->
    <?php
    // La connexion à la base de donnée
    $requete = mysql_query ("SELECT * FROM table ORDER BY id DESC LIMIT 10"); // Changer table par ta table 10 = Le nombre de requêtes maximum
    while($donnees = mysql_fetch_array($requete))
    {
    ?>
    <a href="ventes.php?id=<?php echo''.$donnees['id'].''; ?>" action="ventes.php?=<?php echo''.$donnees['id'].''; ?>">Modele : <?php echo ''.$donnees['modele'].''; ?></a> <!-- Ventes = ta page ou tu verra le descriptif-->
    <?php
    }
    ?>
    
    <!-- PAGE avec de descriptif soit ventes.php-->
    <?php
    // La connexion à la base de donnée
    $ids = mysql_real_escape_string(htmlspecialchars($_GET['id']));
    $retour = mysql_query("SELECT * FROM table WHERE id='" . $ids . "' ORDER BY id ASC"); // Changer table par ta table
    while ($donnees = mysql_fetch_array($retour))
    {
    ?>
    <ul> 
         <li>Marque/Modèle : <?php echo $donnees['modele']; ?></li> 
         <li>Cylindrée :  <?php echo $donnees['cylindree']; ?></li> 
         <li>Km : <?php echo $donnees['km']; ?></li> 
         <li>Année : <?php echo $donnees['annee']; ?></li> 
         <li>Prix : <?php echo $donnees['prix']; ?></li> 
         <li>Description : <?php echo $donnees['description']; ?></li> 
    </ul> 
    <?php
    }
    ?>
    0
    1. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
       
      Est-ce que il y a des erreurs, ou quelques choses que tu ne comprends pas ?
      0
    2. Pascal-Jr
       
      Je ne comprends pas pourquoi tu ne passes pas par PDO.
      C'est moins sécurisé il me semble.
      0
    3. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
       
      Sa revient au même !
      0
    4. JooS Messages postés 2705 Statut Membre 228
       
      Salut, pour infos, PDO est la méthode de connexion la plus utilisé, et elle sera la principale dans quelque années ...et effectivement Pascal, elle devient plus sécurisé si on sait comment l'utiliser ...
      0
    5. tito23 Messages postés 318 Statut Membre 4
       
      Puisque l'id est de type int, il faut changer ça
      $retour = mysql_query("SELECT * FROM table WHERE id='" . $ids . "' ORDER BY id ASC"); 
      par ça
      $retour = mysql_query("SELECT * FROM table WHERE id=" . $ids . " ORDER BY id ASC");
      0
  9. Pascal-Jr
     
    Bien joué les gars ça marche à la perfection.
    Vous m'avez tous bien aidé.
    Je vous remercie tous autant que vous êtes pour votre compréhension et votre patience.
    Merci beaucoup.
    0