Erreur de syntaxe Mysql

Fermé
Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010 - 30 déc. 2008 à 17:09
Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010 - 30 déc. 2008 à 18:41
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 ?
A voir également:

4 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 déc. 2008 à 17:34
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
Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010
30 déc. 2008 à 17:48
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...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894 > Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010
30 déc. 2008 à 18:09
j'ai encore oublié une )

19. if (!empty($_POST['type'])){//si pas vide 
0
Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010 > Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017
30 déc. 2008 à 18:17
Super ç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
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 déc. 2008 à 18:30
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
Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010
30 déc. 2008 à 18:38
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 !
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894 > Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010
30 déc. 2008 à 18:40
ben pour le prix tu mets

prix <= '".$_POST['prix']."'
0
Ayreon Messages postés 6 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 5 janvier 2010 > Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017
30 déc. 2008 à 18:41
ah 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 !
0
baptiste01800 Messages postés 34 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 12 mars 2011 17
30 déc. 2008 à 17:11
Bon courage et bonne chance!! =P
0
baptiste01800 Messages postés 34 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 12 mars 2011 17
30 déc. 2008 à 18:10
Bravo ^^
0