Partage
  • Partager sur Facebook
  • Partager sur Twitter

Afficher le resultat de ma recherche

Traitements d'une table dsques_vinyls

22 juin 2018 à 10:30:31

 Bonjour,

je souhaiterais  demander l'aide de vos membres.

Je souhaite afficher en PHP le résultat d'une recherche   dans un tableau  les informations par exemple : le champ label, le champ artist, le champ titre, le champ titreb etc.. .

En fait ma page affiche les données recherchées mais sous forme de lignes.

J'ai essayé de m'en sortir mais des erreurs sont toujours constatées et j'en perds mon latin , mon cerveau va exploser, .

Je me permet de vous soumettre le problème si ce n'est pas abuser  de votre savoir.

je joins le code de ma page, merci.

Largo 1952

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <title>Le titre du site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <?php
if(isset($_POST['requete']) && $_POST['requete'] != NULL){
    try{
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=*****l;dbname=*******', '   ****', '******', $pdo_options);
    }
    catch (Exception $e){
              die('Erreur : ' . $e->getMessage());
    }
 
    $requete = htmlspecialchars($_POST['requete']);//La fonction extract puet t'aidér pour sa
    $req = $bdd->prepare("SELECT * FROM disques_vinyls WHERE artist LIKE :requete ORDER BY id DESC"); // la requête, que vous devez maintenant comprendre
    $req->execute(array('requete' => $requete . '%'));
 
    
    $nb_resultats = $req->rowCount(); // on utilise la fonction mysql_num_rows pour compter les résultats pour vérifier par la suite
    if($nb_resultats != 0){ // si le nombre de résultats est supérieur à 0, on continue
 
    ?>
    <h3>Résultats de votre recherche.</h3>
    <p>Nous avons trouvé <?php echo $nb_resultats; // on affiche le nombre de résultats
    if($nb_resultats > 1) { echo 'résultats'; } else { echo 'résultat'; } // on vérifie le nombre de résultats correctement.
    ?>
    dans notre base de données. Voici les fonctions que nous avons trouvées :<br/>
    <br/>
    <?
    while($donnees = $req->fetch()) // on fait un while pour afficher la liste des fonctions trouvées, ainsi que l'id qui permettra de faire le lien vers la page de la fonction
    {
    ?>
    <a> <?php echo $donnees['label']; ?><?php echo $donnees['artist']; ?><?php echo $donnees['titre']; ?><?php echo $donnees['titreb']; ?></a><br/>
    <?
    } // fin de la boucle
    ?><br/>
    <br/>
    <a href="rechercher3.php">Faire une nouvelle recherche</a></p>    
    <?
    } // Fin d'affichage des résultats
    else
    {
    ?>
    <h3>Pas de résultats</h3>
    <p>Nous n'avons trouvé aucun résultat pour votre requête "<? echo $_POST['requete']; ?>". <a href="rechercher3.php">Réessayez</a> avec autre chose.</p>
    <?
    }// fin de l'affichage des erreurs
    $req->closeCursor(); // on ferme mysql
    }
else
{ // formulaire html
?>
<p>Vous allez faire une recherche dans notre base de données concernant les fonctions PHP. Tapez une requête pour réaliser une recherche.</p>
 <form action="rechercher3.php" method="Post">
<input type="text" name="requete" size="10">
<input type="submit" value="Ok">
</form>
<?
}
// fin
?>
 
    </body>
</html>

  • Partager sur Facebook
  • Partager sur Twitter
22 juin 2018 à 10:54:44

Bonjour,

Dans l'espoir d'obtenir une meilleure aide, je te conseillerais d'utiliser le bouton   </>   pour mettre ton code en forme et en couleur ici :)

Quelles sont les erreurs dont tu parles ? 

Et quand tu dis que ton résultat est affiché par ligne, tu parles de ça ? :

<?php echo $donnees['label']; ?><?php echo $donnees['artist']; ?><?php echo $donnees['titre']; ?><?php echo $donnees['titreb']; ?></a><br/>
    <?

Parce que bah.. c'est toi qui en fais une ligne là ^^ (sorry si j'ai mal compris) et toutes les balises là ne sont pas nécessaire

<?php echo $donnees['label'].' '.$donnees['artist'].' '.$donnees['titre'].' '.$donnees['titreb'].'<br/>';
    

Pour ce qui est de présenter le tout dans un tableau, plusieurs techniques possibles, mais je pense que c'est plutôt une question de HTML/CSS que de PHP


-
Edité par Caroline B. 22 juin 2018 à 10:57:25

  • Partager sur Facebook
  • Partager sur Twitter
Google répond à tout, PHP Manual sait (presque) tout, StackOverflow envisage tout !
22 juin 2018 à 10:57:03

Bonjour, ça s'affiche sous forme de lignes, cad ? ET tu veux que ça s'affiche comment ?
  • Partager sur Facebook
  • Partager sur Twitter
22 juin 2018 à 12:31:07

Je pense que tu peux par exemple créer une table avec le total de tous les champs qui existent, ensuite le résultat de la recherche tu le marque dans la table en mettant une chanson par ligne puis après tu utilises un foreach pour afficher complètement la table.
  • Partager sur Facebook
  • Partager sur Twitter
22 juin 2018 à 12:43:06

Je sais que vous êtes des genies de l'informatique, merci à  @Fuama et AUTRES Geeq

Mais dans mon cas une aide plus explicite m'aiderais énormément.

Si vous pouviez me donnez le code complet  je serais aux anges.

J'ai mis le code de ma page,  si  un crack de l'informatique pouvait le modifier et me le transmettre , merci

Paolo

-
Edité par Largo1952 22 juin 2018 à 12:53:22

  • Partager sur Facebook
  • Partager sur Twitter
25 juin 2018 à 9:25:14

Je suis désolé mais je ne vais pas savoir le faire, je n'ai pas de grandes connaissances dans le domaine :/ Disons que ce que je t'ai dit de faire c'est quelque chose que j'ai fait en plus simple avec 2 champs distincts et pas différents :/ Mais oui si quelquu'n bon dans le domaine s'y connait, il n'a qu'à appliquer ma proposition et ça pourrait marcher.
  • Partager sur Facebook
  • Partager sur Twitter
25 juin 2018 à 9:53:23

Hello, 

Voici un code, non testé et non commenté, mais par contre dans la balise code ...

Je te laisse faire un super copier-coller sans comprendre, comme ce qui a du être fait pour l'autre (sans quoi tu aurais sûrement pris la peine de changer les commentaires ou au moins même changer le texte, par ce que afficher des titres et des artistes quand on cherche une fonction ... :-°)  et tester que ça fonctionne .

Par contre, je te préviens, le tableau va très certainement pourrir ton affichage !

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <title>Le titre du site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <?php
        if(!empty($_POST['requete'])) {
            try {
                $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                $bdd = new PDO('mysql:host=*****l;dbname=*******', '   ****', '******', $pdo_options);
                $requete = htmlspecialchars($_POST['requete']);
                $req = $bdd->prepare("SELECT * FROM disques_vinyls WHERE artist LIKE :requete ORDER BY id DESC");
                $req->execute(array('requete' => $requete . '%'));
            }
            catch (Exception $e){
                    die('Erreur : ' . $e->getMessage());
            }
            if($donnees = $req->fetchAll()) {
            ?>
                <h3>Résultats de votre recherche.</h3>
                <p>Nous avons trouvé <?= $nb_resultats." resultat".($nb_resultats > 1) ? 's' : '';?> dans notre base de données. Voici les fonctions que nous avons trouvées :<br/>
                <br/>
                <table>
                    <thead>
                        <th>LABEL</th>
                        <th>ARTISTE</th>
                        <th>TITRE</th>
                        <th>TITREB</th>
                    </thead>
                    <tbody>
                        <?php 
                        foreach($donnees as $donnee){
                            echo "<tr><td>".$donnee['label']."</td><td>".$donnee['artist']."</td><td>".$donnee['titre']."</td><td>".$donnee['titreb']."</td></tr>";
                        }
                        ?>
                    </tbody>
                </table>
                <br/>
                <br/>
                <a href="rechercher3.php">Faire une nouvelle recherche</a></p>     
            <?php
            }
            else { 
            ?>
                <h3>Pas de résultats</h3>
                <p>Nous n'avons trouvé aucun résultat pour votre requête "<?=$requete;?>". <a href="rechercher3.php">Réessayez</a> avec autre chose.</p>
            <?php
            }
        }
        else {
        ?>
            <p>Vous allez faire une recherche dans notre base de données concernant les fonctions PHP. Tapez une requête pour réaliser une recherche.</p>
            <form action="rechercher3.php" method="Post">
                <input type="text" name="requete" size="10">
                <input type="submit" value="Ok">
            </form>
        <?php
        }
        ?>
    </body>
</html>



-
Edité par Ealon 25 juin 2018 à 9:57:11

  • Partager sur Facebook
  • Partager sur Twitter
Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
25 juin 2018 à 18:05:57

Merci   a Ealon, c'est vrai que j'ai fait un peu de bricolage et puiser un peu par ci par la , mais j'ai fais mon possible pour évoluer.

Bonsoir, si je voudrais si possible  étendre ma recherche toujours dans la table disques_vinyls mais garder toujours le champ artist  ( le code fonctionne à merveille)  et y inclure le champ titre  .

Donc modifier  le code en consequence.

Bonne soirée

Mille merci. 

-
Edité par Largo1952 25 juin 2018 à 22:52:44

  • Partager sur Facebook
  • Partager sur Twitter
27 juin 2018 à 18:24:44

Bonjour

Je voudrais si possible  étendre ma recherche : dans le champ titre   en gardant la recherche principale sur artist  .

Donc modifier  le code en consequence.

Merci

  • Partager sur Facebook
  • Partager sur Twitter
28 juin 2018 à 12:14:17

Bonjour,

Bonjour, je ne parviens pas a mettre en forme ma requette sur la recherche dans  deux champs artist et titre.

J'ai donc chercher sur le cours AND et OR
J'ai modifié le code comme je pouvais,

Voici la partie ou j'ai modifié une ligne

<pre class="brush: c;">$requete = htmlspecialchars($_POST['requete']);

                $req = $bdd->prepare("SELECT * FROM disques_vinyls WHERE artist LIKE :requete ORDER BY id DESC OR SELECT * FROM disques_vinyls WHERE titre LIKE :requete");
                $req->execute(array('requete' => $requete . '%'));
            }</pre>



Mais j'ai toujours des erreur de syntaxe

Dernier message     :Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'OR SELECT * FROM disques_vinyls WHERE titre LIKE 'adamo%'' at line 1

-
Edité par Largo1952 28 juin 2018 à 13:25:21

  • Partager sur Facebook
  • Partager sur Twitter
28 juin 2018 à 12:19:21

"SELECT * FROM disques_vinyls WHERE artist LIKE :requete OR titre LIKE :requete ORDER BY id DESC" ?

Je pense qu'un petit retour sur la page proposée par Caroline ne ferait pas de mal ;) 

EDIT : il se peut que tu doives donner un nom différent pour les deux marqueurs (:req1 et :req2 par exemple) au risque de balancer une erreur PDO.

De plus, tu passes par une requête préparée, htmlspecialchars() n'est pas utile.

Tu peux aussi entourer ta requête d'un try catch pour récupérer l'erreur générée et la traiter.

-
Edité par Ealon 28 juin 2018 à 12:21:36

  • Partager sur Facebook
  • Partager sur Twitter
Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
28 juin 2018 à 12:44:39

Merci pour la réponse rapide.

Je regrette infiniment mais je ne saurais pas corriger dans en l'état de mes connaissances   actuelle  ces erreurs.

Si vous pouviez dans un élan d'entraide me fournir le code complet, je serez tranquillisé, si vous ne pouvez pas le faire je comprendrais.

Paolo

-
Edité par Largo1952 28 juin 2018 à 12:56:00

  • Partager sur Facebook
  • Partager sur Twitter
28 juin 2018 à 13:18:42

Bonjour,

Merci d'utiliser la mise en forme de code Image

Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Image de l'éditeur, choisir un des langages proposés et coller ton code dans la zone prévue. Si tu utilises l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: c;">Votre code ici</pre>.

Et ça vaut pour tous les messages que tu as posté dans ce sujet. Merci pour nos yeux.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)

28 juin 2018 à 13:28:53

Bonjour, test

$requete = htmlspecialchars($_POST['requete']);
            $req = $bdd-&gt;prepare("SELECT * FROM disques_vinyls WHERE artist LIKE :requete ORDER BY id DESC OR SELECT * FROM disques_vinyls WHERE titre LIKE :requete");
            $req-&gt;execute(array('requete' =&gt; $requete . '%'));
        }</pre> .
</pre>

-
Edité par Largo1952 28 juin 2018 à 13:34:54

  • Partager sur Facebook
  • Partager sur Twitter
28 juin 2018 à 13:29:28

Bonjour,

Vous êtes ici sur un forum d'entraide communautaire et non pas sur un forum de demande de service, le but n'est donc pas de fournir une réponse toute faite ou de directement fournir la solution à quiconque viendrait sans la moindre trace.

Le but est d'accompagner dans la résolution du problème ...

Je te conseille de suivre le cours PHP/MySQL (cf. ma signature) et de revenir une fois que tu seras opérationnel, avec des questions plus spécifiques ...

Je ferme ce sujet. Me contacter par MP si besoin.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL