Erreur de syntaxe Mysql

Bonjour,

Je suis en train de réaliser un moteur de recherche en php avec résultat s'appuyant sur une base de donnée.
Lors de l'affichage des données je reçois ceci :

Erreur de syntaxe près de '' à la ligne 1

Je ne comprend pas de quoi cela peut venir...

voici mes codes :

HTML
<form id="form1" name="form1" method="post" action="search2.php">
  <label>type
  <select name="type" id="type">
    <option value="Achat">achat</option>
    <option value="location">location</option>
  </select>
  </label>
  <label>submit
  <input type="submit" name="submit" id="submit" value="Envoyer" />
  </label>
</form>


PHP

<?php

$SQL="Select * from biens where ";
if ($_POST['type']=="type")
{
$SQL=$SQL."type LIKE '%" . $_POST['type'] . "%'";
}

else 
{ 
echo" Ce bien n'existe pas"; 

} 

$result = mysql_query($SQL, $maconnexion) or die(mysql_error());

while ($row=mysql_fetch_array($result)){ 

echo $row["type"];  
echo $row["typedepropriete"]; 
echo $row["pays"]; 

}
?>


Je ne m'y connais pas des masses en php et mysql...
Quelqu'un pour m'aider ?

4 réponses

  1. Bonsoir,

    if ($_POST['type']=="type")
    {
    $SQL=$SQL."type LIKE '%" . $_POST['type'] . "%'";
    }


    comment fais tu pour avoir $_POST['type']=="type" ?? a partir d'une liste déroulante qui a deux valeurs "achat" et "location"

    mets plutôt:

    <?php
    
    	$SQL="SELECT * FROM biens WHERE ";
    if (!empty($_POST['type']){//si pas vide
    	$SQL.="type LIKE '%".$_POST['type']."%'";
    
    	$result = mysql_query($SQL, $maconnexion) or die(mysql_error());
    	if(mysql_num_rows($result) >0){
    		while ($row=mysql_fetch_array($result)){ 
    
    			echo $row["type"];  
    			echo $row["typedepropriete"]; 
    			echo $row["pays"]; 
    		}	
    	}else{
    		echo "Acun bien ne correspond a votre demande";
    	}
    }
    
    1. Merci beaucoup pour votre réponse !
      Ceci dit, maintenant j'ai une parse error à hauteur de la ligne 19

      18. $SQL="SELECT * FROM biens WHERE ";
      19. if (!empty($_POST['type']){//si pas vide
      20. $SQL.="type LIKE '%".$_POST['type']."%'";

      Tout me parait correct pourtant...
    2. @Ayreonj'ai encore oublié une )

      19. if (!empty($_POST['type'])){//si pas vide 
    3. @Alain_42Super ça marche niquel merci beaucoup !

      J'aurais encore une petite question si je peux abuser de ta bonté :

      Je souhaiterais que mon moteur de recherche soit multicritère, à savoir :

      le type (comme dans le code plus haut)
      le pays
      le prix

      à quoi doit ressembler ma requete sql ?

      a ca ?

      
      $SQL="SELECT * FROM biens WHERE ";
      if (!empty($_POST['type'])){//si pas vide 
      	$SQL.="type LIKE '%".$_POST['type']."%'";
      
      if (!empty($_POST['pays'])){//si pas vide 
      	$SQL.="pays LIKE '%".$_POST['pays']."%'";
      
      if (!empty($_POST['prix'])){//si pas vide 
      	$SQL.="prix LIKE '%".$_POST['prix']."%'";


      Merci encore
  2. Il faut mettre des AND entre chaque condition

    $SQL="SELECT * FROM biens WHERE ";
    if (!empty($_POST['type'])){//si pas vide 
    	$SQL.="type LIKE '%".$_POST['type']."%'";
    
    if (!empty($_POST['pays'])){//si pas vide 
    	$SQL.=" AND pays LIKE '%".$_POST['pays']."%'";
    
    if (!empty($_POST['prix'])){//si pas vide 
    	$SQL.="AND prix LIKE '%".$_POST['prix']."%'";
    


    mais attention il faut que type soit obligatoire

    et LIKE '%".$_POST['prix']."%' va te sortir des trucs inattendus ! car % veut dire n'importe quoi avant ou après

    si 125 demandé ça va te sortir tous les enregistrements 21250 1212569 etc
    1. Ok ! Donc ce n'est peut-être pas la meilleure méthode à cause du prix...
      Mais dans ce cas, quelle autre méthode utiliser ?

      En tout cas merci pour ton aide plus que précieuse !
    2. @Ayreonben pour le prix tu mets

      prix <= '".$_POST['prix']."'
    3. @Alain_42ah ben oui ! Ca fait toute la journée que je suis là dessus, j'ai plus les idées très claires :D

      Merci beaucoup en tout cas !
      Passe une très bonne soirée !