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 ,,
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'];
}
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() ?
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 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 .
ç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
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 ?