Bonjour,

Voilà mon problème, je suis en train de faire un module de recherche avec des suggestions relié à une BDD. Ça fonctionne très bien, mais dès que je clique sur une entré qui a un ID supérieur à 9 (ou à plusieurs chiffres), ça ne m'affiche que id?=9 à la place de id?=93.

<pre>
$query = $db->query("SELECT * FROM invites WHERE cid='".$_GET['cid']."' LIKE '%" . $queryString . "%' OR invit_name LIKE '%" . $queryString . "%' ORDER BY cid LIMIT 15");

            if($query) {
                while ($result = $query ->fetch_object()) {
                    $invit_name = $result->invit_name;
                    $identifiant = $result->cid;
                    echo "<a href=\"invites.php?cid={$identifiant['cid']}\" class=\"searchheading\">$invit_name</a>";
                }
                echo '<span class="seperator"><a href="">Plus de résultats en cliquant ici</a></span><br class="break" />';
            } else {
                echo 'Erreur dans la requête';
            }

</pre>

24 réponses


mirael86
Auteur
Réponse acceptée

Voilà comment je m'en suis sorti :

if(strlen($queryString) >0) {
$query = $db->query("SELECT * FROM invites WHERE invit_name LIKE '%" . $queryString . "%' ORDER BY cid LIMIT 15");
if($query) {
$catid = 0;
while ($result = $query ->fetch_object()) {
echo '<a href="invites.php?cid='.$result->cid.'" class="searchheading">';
$invit_name = $result->invit_name;
echo '<span>'.$invit_name.'</span>';
echo '</a>';
}

Salut,
Dans la base de donnée ton champ id est de quel type ?

mirael86
Auteur

Salut,
Merci de répondre :)

cid -> Int(11) -> Primary key -> auto increment

Et si coté php tu fais un var_dump($_GET['cid']) il te renvoie 9 ou 93 ?

mirael86
Auteur

Il me retourne 9

J'ai lu quelque part que ça pourrait-être à cause de ma requête... aussi, la connexion à la base de données se fait en MySQLi. C'est un code que j'ai récupérer sur un site.

je n'arrive pas coller mon code sur le site pour montrer ce que j'ai!

Je deviens fou avec cette histoire!

Si c'est le $_GET['cid'] qui renvoi 9 c'est pas ta requète qui est en cause mais la récupération de ta valeur. Lorsque tu fais un var_dump($_GET['cid']) il te renvoi quoi exactement ? (typage et valeur)

mirael86
Auteur

string(9) "9"

Réédit:
excuse moi c'est string(1) "9"

Et ton url ressemble à quoi par exemple ?

Dans ce cas c'est normal qui récupère 9 car cela correspond à ton url. Il faut que ton url soit comme cela :
http://localhost:8888/mariage_photos/invites.php?cid=93

Et seulement là tu auras ta bonne valeur avec $_GET['cid'].

Donc ton problème est l'url!

mirael86
Auteur

oui je pense que ça vient de mon code de recherche... Le lien ne doit pas être bon, et je ne trouve pas le moyen de changer ça!

je te laisse regarder :

<p id="searchresults">
<?php
    $db = new mysqli('localhost', 'root', 'root', 'mariage');
    if(!$db) {
        echo 'ERREUR de connexion à la base de données';
    } else {
        if(isset($_POST['queryString'])) {
            $queryString = $db->real_escape_string($_POST['queryString']);
                if(strlen($queryString) >0) {
                $query = $db->query("SELECT * FROM invites WHERE invit_name LIKE '%" . $queryString . "%' ORDER BY cid LIMIT 15");
                if($query) {
                    while ($result = $query ->fetch_object()) {
                        $invit_name = $result->invit_name;
                        $identifiant = $result->cid;
                        echo "<a href=\"invites.php?cid={$identifiant['id']}\" class=\"searchheading\">$invit_name</a>";
                    }
                    echo '<span class="seperator"><a href="">Plus de résultats en cliquant ici</a></span><br class="break" />';
                } else {
                    echo 'Erreur dans la requête';
                }
            } else {
            } 
        } else {
            echo 'Erreur!';
        }
    }
?>
</p>

Est ce que dans ton sql si tu executes directement cette requete est ce qu'il trouve quelque chose :
SELECT * FROM invites WHERE cid = 93 AND invit_name LIKE '%" . $queryString . "%' ORDER BY cid LIMIT 15

Et remplace $queryString par la valeur saisi.

mirael86
Auteur

Meme en faisant ça, ça me retourne encore 9

Et en faisant juste ca :
SELECT cid FROM invites WHERE cid = 93

mirael86
Auteur

Toujours 9... tu vas devenir fou comme moi...

Lol j'avoue qu'il est sympa ton problème.

On va essayé un truc, renomme temporairement le champ cid en id et exécute cette requete :
SELECT id FROM invites WHERE id = 93

mirael86
Auteur

Ben nan... c'est pareil!!

Si cela se trouve ta table est erroné. C'est bizarre.

Tu travail sur mysql comme base de données ?

Pour éliminé le fait que cela puisse venir de la table duplique ta table sous un autre nom et effectue la même requete.

mirael86
Auteur

ouais je suis sur phpMyAdmin...j'ai pas l'impression que ce soit la table... je ne comprends pas!

j'ai reprendre mon code à zéro je crois

Si sous phpMyAdmin il renvoie pas la bonne valeur c'est pas ton code qui pose problème du coups. C'est vraiment bizarre.

Le dernier truc a tester pour moi sinon après je sèche cela serait de tester sur une autre table qui possède un champ autoincrémente supérieur à 9 et de faire la requete qu'on a fait plus haut SELECT id FROM table WHERE id = 12

Et si cela renvoie bon c'est que ta table a un soucis. Tu travail en local ?

mirael86
Auteur

En fait à un autre endroit, je fais un lien vers le fameux cid 93 et ça marche bien!
Donc je ne crois pas que ce soit la table... enfin bref... je vais continuer à chercher... je te tiens au courant

Ok bon courage ! Je suis curieux de sqvoir d'où cela vient du coups.

Edit : au faite quand je te disais d'exécuter la requete tu le faisais bien sous phpMyAdmin ou dans ton programme php ?

mirael86
Auteur

Bon j'ai réussi à m'en sortir! j'ai repris le code à zéro et j'ai changé ma requête et quelques variables!
Par contre j'ai un autre problème sur mon site et tu peux peut-être m'aider :
http://www.grafikart.fr/forum/topics/17193

ça n'a peut être aucun rapport mais le fait que la valeur récupérée est une chaine de caractère ne choque personne ? :D