Bonjour a tous le monde, s'ils vous je vous pri de m'aider
a resoudre ce probleme sa fait six jour commeça je suis bloquer sur
la deçue.

Ce que je fais

j'ai crée un systeme de recherche dans ma base dd
et les resultat s'afficher bien sur page
voici le code que j'ai ecrit

<!doctype html>
<html>
    <head>
        <title>Exercices de recherche</title>
        <meta charset="utf-8">
        <style>
            body{
                background: darkgrey;
                color: white;
            }
        </style>
    </head>
    <body>
        <?php
        try{
            $bdd = new PDO('mysql:host=localhost;dbname=bare_search', 'root', '');
        }catch(PDOExeption $e){
            die('Errer: '. $e->getMessage());
        }

        $rech = $bdd->query("SELECT id, jeux FROM androidjeux  ");

        if(isset($_GET['g']) AND !empty($_GET['g'])){
            $g = htmlspecialchars($_GET['g']);

            $rech = $bdd->query('SELECT id,  jeux FROM androidjeux WHERE jeux LIKE "%'.$g.'%"  ');

            if ($rech->rowCount() < 0) {
                $rech = $bdd->query('SELECT jeux FROM androidjeux WHERE id = ? ORDER BY id ASC LIMIT 0, 1');
            }
        }

        ?>

        <form method="GET">
            <input type="text" name="g" placeholder="search...">
            <input type="submit" name="" value="search">

        </form>

        <?php if($rech->rowCount() > 0) { ?>

                            <ul>
                                    <?php while($donne = $rech->fetch() ){ ?>

                                    <li><a href="page1.php?id=<?= $donne['id'] == 1 ?>"><?= $donne['jeux']?></a></li>

                                    <li><a href="page2.php?id=<?= $donne['id'] == 2 ?>"><?= $donne['jeux']?></a></li>

                                    <?php } ?>
                            </ul>

        <?php } else{ ?>

            <b style="color:darkred">Auccun resultat pour <?= $g ?>
        <?php } ?>

    </body>

</html>
Entourez votre code** pour bien le mettre en forme

Ce que je veux

je voudrai mettre un lien a chaqune des nom qui ce trouver
dans ma table.
un petit exemple: si tu clic sur le resultat de recherche
god of wars --- tu te redirige sur la page ou god of wars se trouve
pour le télecharger

si tu clic sur le resultat de recherche
pes 17 --- tu te redirige sur la page ou pes 17 se trouve
pour le télecharger ...

si tu clic sur le resultat de recherche
gta --- tu te redirige sur la page ou gta se trouve
pour le télecharger ...

Ce que j'obtiens

mon code m'affiche un double resultat
et tous les nom de jeux son redirige sur la meme page.

Merci bcp et je conte sur vous pour m'aider,
on se retrouve plus tard.

10 réponses


Bonjour.
Tu devrais suivre à nouveau des tutoriels car tu ne sembles absolument pas comprendre ce que tu fais.
Par exemple :

if ($rech->rowCount() < 0) {
    $rech = $bdd->query('SELECT jeux FROM androidjeux WHERE id = ? ORDER BY id ASC LIMIT 0, 1');
}

Tu utilises une requête SQL préparée, sans utiliser la bonne méthode, pour rappel une requête classique se présente :

$req = $bdd->query("SELECT id, name, content FROM posts WHERE user_id = $user_id ORDER BY id ASC LIMIT 0, 10");

Alors qu'une requête préparée :

$req = $bdd->prepare("SELECT id, name, content FROM posts WHERE user_id = ? ORDER BY id ASC LIMIT 0, 10");
$posts = $req->execute([$user_id]);

Tu as donc déja du mal avec les deux types de requêtes.
Ensuite, ta condition if ($rech->rowCount() < 0) et ce qui suit est totalement illogique, car voilà ce que tu dis :

Si le nombre de lignes retournées est inférieure à 0 alors ...

Le nombre de lignes retournées ne peut pas être inférieur à 0, c'est soit égal ou supérieur à 0, mais certainement pas inférieur à 0.
Pour terminer, c'est tout à fait normal que tu aies tes résultats en double étant donné que dans ta boucle while tu affiches deux lignes pour un même enregistrement de la base de données.
Tu devrais plutôt faire quelque chose du genre :

<?php while($donne = $rech->fetch()) { ?>
    <li><a href="game.php?id=<?= $donne['id'] ?>"><?= $donne['jeux'] ?></a></li>
<?php } ?>

Une toute dernière chose, <?= $donne['id'] == 1 ?>, que je sache, ça n'a aucune utilité de faire ceci.

Barrymee
Auteur

Merci de m'avoir repondue et de me rectufier de mais errer, par contre ma condition if ($rech->rowCount() < 0) j'ai oublié.
j'ai essayé ce que tu ma dit de faire.

if ($rech->rowCount() > 0) {
                $rech = $bdd->query('SELECT id FROM androidjeux  WHERE user_id = $user_id ORDER BY ASC LIMIT 0, 10');
            }

on m'affiche ( ! ) Fatal error: Call to a member function rowCount() on a non-object in C:\wamp\www\projet\exercices.php on line 46
si j'effectue une recherche.

dans ma boucle j'ai mis sa:

<?php if($rech->rowCount() > 0) { ?>

                            <ul>
                                    <?php while($donne = $rech->fetch() ){ ?>

                                    <li><a href="page1.php?id=<?= $donne['id'] ?>"><?= $donne['jeux'] ?></a></li>

                                    <?php } ?>
                            </ul>

        <?php } else{ ?>

            <b style="color:darkred">Auccun resultat pour <?= $g ?>
        <?php } ?>

merci d'avance.

Bonjour,

Je suppose au vu de ton code que tu as dut créer une class pour ta connexion à la BDD et les requêtes. Et donc dans l'état actuel des chose l'objet rowCount() n'existe pas ! Il faudrait que tu créer par exemple une fonction count

<?php

public function count($sql, $data = array()){
        $req = $this->db->prepare($sql);
        $req->execute($data);
        return $req->rowCount();
    }

?>

Par exemple et tu n'aurais plus qu'à faire :

if($count = $db->('SELECT id, jeux FROM androidjeux') > 0) { /* Ton code */ }
Barrymee
Auteur

j'ai essayé le code que tu ma donné on m'affiche une errer quand j'actualise ma page.
je cherche seulement a recuperé chaque mot clés qui est dans ma table et lui donné un lien,
je sais pas comment vous remercier je ne suis pas douée avec les mot merci bcp pour les reponse.
je conte sur vous et je vous remercier.

Barrymee
Auteur

Bonsoir enfin j'ai trouver l'errer qui m'empêcher d'afficher mais resultats ,
je n'arrive pas a donner chacune des nom qui se trouve dans ma table jeux un lien qui le permettera de se rediger vers sa page de téléchargent

<!Doctype html>
<html>
    <head>
        <title>Exercices de recherche</title>
        <meta charset="utf-8">
    </head>

<body>
    <form method="GET" >
    <input type="search"  name="g" placeholder="Recherche" />
    <input type="submit" value=">>" />
</form>

<?php
        //Connexion à la base donnees
            try{
                $bdd = new PDO('mysql:host=localhost;dbname=recherche_data', 'root', '');
            } catch(PDOExeption $e){
            die('Erreur : ' .$e->getMessage());
            }

            $req = $bdd->query("SELECT * FROM mobmeedata  ");

            if(isset($_GET['g']) ) {

                $q = htmlspecialchars($_GET['g']);

                $req = $bdd->query('SELECT  id, jeux FROM mobmeedata WHERE jeux  LIKE "%'.$g.'%"');

                if($req->rowCount() == 0) {
                    $req = $bdd->query('SELECT * FROM mobmeedata WHERE id = $id " ');
                }

                if(!empty($_GET['g'])){

                }else{
                    echo "Le champ doit être remplir";
                }

            }

?>
    <?php if($req->rowCount() > 0) { ?>
                <ul>
                    <?php while($a = $req->fetch()) { ?>
                                <li><a href="page1.php?$id="><?= $a['jeux'] ?></a></li>
                            <?php } ?>
                </ul>

        <?php }  else{ ?>
            <b style="color:darkred">Auccun resultat pour <?= $g ?>
        <?php }?>
<style>

    body{
        background: steelblue;
        text-align: center;
    }
</style>                        

    </body>
</html>

je vous remercie?

Salut,

Quelques petites corrections et questions :

Au lieu de

if(!empty($_GET['g'])){

}else{
    echo "Le champ doit être remplir";
}

Tu peux faire directement :

if(empty($_GET['g'])){
    echo "Le champ doit être remplir";
}

Ensuite tu test la validité de $_GET['g'] après l'avoir utilisé. Ce n'est pas très logique !

OK tu test s'il est défini avec un isset($_GET['g']) mais c'est uniquement après ta requete que tu vérifies s'il est vide.

Quand tu fais :

$req = $bdd->query("SELECT * FROM mobmeedata  ");

Ça sert à quoi ?

Quand tu fais :

if($req->rowCount() == 0) {
    $req = $bdd->query('SELECT * FROM mobmeedata WHERE id = $id " ');
}

Où est défini $id ?

Quand tu affiche les résultats de ta recherche :

<li><a href="page1.php?$id="><?= $a['jeux'] ?></a></li>

écrit plutôt

<li><a href="page1.php?id=<?= $a['id'] ?>"><?= $a['jeux'] ?></a></li>

En espérant t'avoir aidé un peu.

Pierre-Louis

En plus de ce que Kaimite te fait remarquer, il y a deux autres choses.
La première, c'est que tu définis une variable q, sauf que dans ta requête SQL, tu utilises une variable g, ce qui ne risque pas de fonctionner.
La deuxième, avant de faire la requête SQL, tu devrais vérifier si la variable n'est pas vide, soit par exemple :

if (isset($_GET['g'])) {
    $g = htmlspecialchars($_GET['g']);
    if (empty($g)) { // Si la variable est vide
        echo "Le champ doit être remplir";
    } else { // sinon
        $req = $bdd->query('SELECT  id, jeux FROM mobmeedata WHERE jeux  LIKE "%'.$g.'%"');
        if ($req->rowCount() == 0) {
            $req = $bdd->query("SELECT * FROM mobmeedata WHERE id = $id"); // Sans bien sur oublier de définir la variable id
        }
    }
}

Par contre, ce qui n'est pas logique, c'est que dans le cas où aucun résultat n'est retourné par la requête SQL, tu en imposes un à l'utilisateur.

Barrymee
Auteur

lartak je oublier de change la variable q par la variable g
seulement je voudrais recuperer chanque nom de jeux qui se trouve dans ma table et de lui donné un lien
par exemple:
si tu effectue une recherche sur ma formulaire de recherche: expl supermario
resultat s'affiche et tu clic le jeux supermario tu te redirige vers sa page de télécharegement.

supermario tu clic tu te redirige vers la sa page de téléchargement ou information
cityracing tu clic tu te redirige vers la sa page de téléchargement ou information
gtasanandreans tu clic tu te redirige vers la sa page de téléchargement ou information

je vous remercie

Oui, le principe de la recherche est simple mais quand on regarde ton code il y a beaucoup de chose que tu fais qu'on ne comprends pas.

Essaie de préparer tes différentes actions avant de te lancer dans le code car j'ai l'impression que tu te créé des faux problèmes.

supermario tu clic tu te redirige vers la sa page de téléchargement ou information
Il te sufit d'écrire un lien HTML
Donc pour reprendre un peu depuis le début :

  • Tu test si une recherche est renseignée
  • Si c'est le cas tu lances ta requete
  • Si tu as des résultats tu les affiche

<?php

//--> Connexion à ta base de données
try{
    $bdd = new PDO('mysql:host=localhost;dbname=recherche_data', 'root', '');
} catch(PDOExeption $e){
    die('Erreur : ' .$e->getMessage());
}

//--> Si une recherche est efffectuée : recherche dans la base
if ( !empty($_GET['q']) ) {
    $q = htmlspecialchars($_GET['q']);

    //--> Requete pour la recherche
    $req = $bdd->query('SELECT  id, jeux FROM mobmeedata WHERE jeux  LIKE "%'.$q.'%"');

    //--> Test s'il y a des résulats
    if($req->rowCount() > 0) {

        echo "<ul>";

        while ($a = $req->fetch()) {
            //--> Affcihage du lien vers la page de détails du jeux
            echo '<li><a href="details-jeux.php?id=' . $a['id'] . '">' . $a['jeux'] . '</li>';
        }

        echo "</ul>"

    } else {
        echo "Aucun résultat ne correspond à votre recherche";
    }

} else {
    echo "Merci de préciser votre recherche";
}
?>

Pierre-Louis

Barrymee
Auteur

Merci Kaimite ton code ma bien aidez sa fonctionne 5 sur 5 encore 1000merci a toi