Moteur de recherche [Résolu]

Signaler
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
-
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013
-
j essey de faire un moteur de recherche , et ça me donne l erreur suivante

Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table-moteur-de-recherche WHERE motclef LIKE "%inpt%" OR "%ensem%" OR 1=0' at line 1

voici mon code :
<!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>Elements trouvés:</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<?php
if(isset($_POST['text-recherche']))// on recupere ce que l utilisateur a tappé
{
$rec = htmlentities($_POST['text-recherche']);// pour recuperer
}
else
{
$rec = 'php MYSQL';
}

?>
<?php
$mots = explode(' ',$rec);//En separre lexpression en mots cles
?>
<?php
// Connexion à la base de données
try
{

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=moteur-de-recherche', 'root', '', $pdo_options);
$req = "SELECT * FROM table-moteur-de-recherche WHERE motclef LIKE ";
foreach($mots as $mot)
{
$req .= ' "%'.$mot.'%" OR';// c est la ligne de l erreur :(
}
$req .= ' 1=0';

$reponse = $bdd->query($req );
?>
<?php
// Récupération des lignes rechérché

$i=0;
$reponse = $bdd->query($req);
while ($donnees = $reponse->fetch())
{$i=1;
?>
<?php echo $donnees['titre']; ?>,
<?php echo $donnees['description']; ?>,
<?php echo $donnees['URL']; ?>

<?php
}
?>
<?php
if(i)
{
echo "Essayer autre chose svp " ;}
?>
<?php
$reponse->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>






</html>


mercii d avance si vous avez des remarque ou une solution :)

4 réponses

Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
remplace par ça aussi
si pas vide
si 2 car

et si il y a un output ...
<?php
$mots=array();
if(isset($_POST['text-recherche']) && !empty($_POST['text-recherche']) && strlen($_POST['text-recherche'])>2){
$rec = trim(htmlentities($_POST['text-recherche']));// pour recuperer
$mots = explode(' ',$rec);//En separre lexpression en mots cles


...

et


<?php if(isset($output)){echo $output;} else{};?>

Bonne programmation !
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
Bonjour,

Tu peux tenter de mettre ça :
$req = "SELECT * FROM `table-moteur-de-recherche` WHERE motclef LIKE ";

D'une manière générale, utiliser des caractères non alphanumériques dans les noms de tables ou de champs n'est pas une bonne idée.

Cordialement,

Maxime
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonjour
ton script est pas bon
voici un exemple de moteur pdo basique
à partir de ton script j'ai bricolé ça
pour que tu comprennes
a++

<?php 
$mots=array();
if(isset($_POST['text-recherche'])){ 
$rec = trim(htmlentities($_POST['text-recherche']));// pour recuperer 
$mots = explode(' ',$rec);//En separre lexpression en mots cles 
}else{ 
//$complete = 'php MYSQL'; 
} 


if(!empty($mots)){
$req = null; 
$req = 'LIKE \'%'; 
$c=count($mots);
foreach($mots as $k => $mot){
if($k!=($c-1)){
$req .= $mot.'%\' OR  `nom` like \'%';
}else{
$req .= $mot;
}
}
$req .= '%\''; 

echo $conplete = $req; 

echo $conplete = "SELECT nom FROM `table-moteur-de-recherche` WHERE `nom` $conplete";

  try{  
        
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
        $bdd = new PDO('mysql:host=localhost;dbname=table-moteur-de-recherche', 'root', '', $pdo_options); 
        $reponse = $bdd->query($conplete); 
        echo '';
        $donnees = $reponse->fetchall();
        //print_r($donnees);
        $reponse->closeCursor(); 
        
         
        if(count($donnees)!=0){
         
          $i=0;$output='';
          while ($i<count($donnees)){ 
          $output .= '<tr><td>'.$donnees[$i]['nom'].'</td></tr>';
          $i++;
          } 
        
        }else{ 
        echo "Essayer autre chose svp ";
        } 
   
  }catch(Exception $e){ 
  die('Erreur : '.$e->getMessage()); 
  }

//fin

}else{
$output=null;
//rien de saisie
} 
?>



<!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>Elements trouvÚs:</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
</head> 
  
<?php echo $output;?>
 
 


<form action="" method="post">


</form> 
 
</html


-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
Messages postés
47
Date d'inscription
mercredi 11 avril 2012
Statut
Membre
Dernière intervention
26 août 2013

merciiii a vous infiniment