Moteur de recherche ,,

Par PYTHOGEEK, il y a 11 ans


Bonjour a tous bon , j'ai vu le tuto sur grafikart nommée fonction de recherche , j'ai fait le même script mais avec l'objet PDO pour la connexion et les requetes , mais endirait qu'il marche pas ,, je dévloppe sur la plateforme Cloud9 ,, aucune erreur tandis que quand je dévloppe avec sublime text , une erreur apparaissent disant que Fatal error: Call to a member function execute() on a non-object in C:\wamp\www\PYTHOGEEK-WEBSITE\search.php on line 30 ça veut dire que la variable $sql est une instance PDO et aprés je lui affecte une string ,, Voici mon script ,,
sur la platforme c9 , rien ne se passe juste le formulaire de recherche .

<?php header('Content-type: text/html; charset=UTF-8'); ?> <form method="get" id="searchform" action="search.php"> <input type="text" name="search" id="search"/> <input type="submit" id="searchsubmit" value="Cherche"> </form> <?php if(isset($_GET['search'])) { include('connect.php'); $q=$_GET['search']; $s=explode(" ",$q); $sql=$bdd->prepare("SELECT contenu,titre FROM article"); $i=0; foreach($s as $mot) { if(strlen($mot)>3) { if($i==0) { $sql.=" WHERE "; } else { $sql.=" OR "; } $sql.="contenu LIKE '%$mot%'"; $i++; } } var_dump($sql); $sql->execute(); while($search=$sql->fetch()) { echo $search['titre']; echo $search['contenu']; } } ?>

Merci de m'aider ,,

7 réponses

Lartak, il y a 11 ans

je dévloppe sur la plateforme Cloud9 ,, aucune erreur tandis que quand je dévloppe avec sublime text

Cloud9 et Sublime Text, sont deux choses différentes.
Ton problème vient probablement de l'environnement, de plus, je crois bien que tu devrais revoir les requêtes préparées.

Huggy, il y a 11 ans

Pas besoin de prepare ici
remplace

$sql=$bdd->prepare("SELECT contenu,titre FROM article");

par

$sql="SELECT contenu,titre FROM article";

et pour parcourir les résultats

foreach ($bdd->query($sql) as $row) { echo $row['titre']; echo $row['contenu']; }
PYTHOGEEK, il y a 11 ans

Huggy j'ai fait comme vous m'avez dit voici ce que j'ai fait ```

<?php
if(isset($_GET['search']))
{
include('connect.php');
$q=$_GET['search'];
$s=explode(" ",$q);
$sql="SELECT contenu,titre FROM article";
$i=0;
foreach($s as $mot)
{
if(strlen($mot)>3)
{
if($i==0)
{
$sql.=" WHERE ";
}
else
{
$sql.=" OR ";
}
$sql.="contenu LIKE '%$mot%'";
$i++;
}
}

 $sql->execute();

 foreach($bdd->query($sql) as $row)
 {
      echo $row['titre'];
      echo $row['contenu'];
 }

}
?>

Quand je cherche aucun résultat .
Lartak, il y a 11 ans

C'est tout à fait normal.
Pour commencer une requête conditionnelle, doit forcément comporter le mot clé WHERE, alors que tu le met dans une boucle if, else, ensuite, pourquoi tu as laissé le $sql->execute() ?

PYTHOGEEK, il y a 11 ans

ça a l'air de marcher je vous remercie Lartak Huggy . Je suis entrain de m'entrainer j'ai a peine un mois que j'ai débuté l'apprentissage de php , laisser moi le temps haha merciii :p

Lartak, il y a 11 ans

De rien, avec plaisir.
Bonne continuation. ;)

PYTHOGEEK, il y a 11 ans

J'ai un autre souci , je veux afficher le nombre de résultat comme mysql_num_rows est obsoléte , je me suis documenter sur la fonction PDOStatement::rowCount() j'ai mis ce petit code avant foreach :
$result = $sql->rowCount();
echo $result;
Une idée ?