Page 1 sur 1

moteur de recherche

Posté : 09 févr. 2008, 19:41
par lhamo
Bonjour je débute en php, j'ai potassé mes cours et je cherche à mettre au point un moteur de recherche interne conversant avec une base de bonnée immobilière.

Voici mon script de recherche :
<?php
mysql_connect("localhost", "root", "");

mysql_select_db("locatif"); // Sélection de la base


//// Définition des variables
$piece = mysql_real_escape_string($_POST['piece']);
$commune = mysql_real_escape_string($_POST['commune']);
 
 
//// Liste des requetes
if($piece == 'no' AND $commune == 'no' )//si valeur des deux = no
{
        $reponse = mysql_query('SELECT * FROM maisons ORDER BY id') or die (mysql_error());//va me chercher dans la bdd la liste entière
}
elseif($piece=="no" )
{
        $reponse = mysql_query('SELECT * FROM maisons where commune = \''.$commune.'\'') or die (mysql_error());
}
elseif ($commune=="no" )
{
        $reponse = mysql_query('SELECT * FROM maisons where piece = \''.$piece.'\'') or die (mysql_error());
}
else
{
        $reponse = mysql_query('SELECT * FROM maisons where piece = \''.$piece.'\' and commune = \''.$commune.'\'') or die (mysql_error());
}
 
echo '<h2>Voici les résultats de votre recherche</h2>';
 
while($maison = mysql_fetch_assos$reponse) //prends-moi toutes les maisons une par une qui sont dans la réponse
{
        echo $maison['piece'];//affiche-moi la donnée correspondante de la BDD
        echo $maison['commune'];
}


mysql_close(); // Déconnexion de MySQL
?>
Et voilà donc l'erreur que ça m'affiche : Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\zero\tutorial\resultat.php on line 40.

Ca provient à priori de ma boucle while.

Quelqu'un peut-il m'aider à résoudre ce problème.

P.S. : je sais que ce script n'est pas optimisé, mais je le comprends parfaitement, je cherche juste à résoudre ce problème pour qu'il tienne la route. Inutile donc de me proposer des codes entièrement refaits à votre sauce.

Merci d'avance

Re: moteur de recherche

Posté : 09 févr. 2008, 20:40
par Jules Petibidon
Ca provient à priori de ma boucle while.

Quelqu'un peut-il m'aider à résoudre ce problème.
Hello, tu as bien identifié le probleme :)

Code : Tout sélectionner

while($maison = mysql_fetch_assos$reponse)
Relis bien ce que tu as écrit. Y'a rien qui te brule les yeux ?

Posté : 09 févr. 2008, 20:41
par @rthur
Bonjour,

Regarde ce que tu as mis comme condition dans ton while() ;)

##edit: grillé! :)

Posté : 09 févr. 2008, 22:27
par Invité
Pffffffffiouuuuuuuuu !

Honnêtement, ça fait des heures que je suis penché sur ce code, à force je n'y vois plus très clair.
En temps habituel, j'aime bien jouer aux devinettes, mais là je sèche.

J'ai quand même procédé à des modif :

- j'ai mis un joli s à maison, car le nom de ma table en comporte un ;

- j'ai mis un double = pour signifier que la valeur doit être exactement égale.

ça donne :
while($maisons == mysql_fetch_assos$reponse)
Si la bonne réponse se trouvait dans les propositions que je viens de faire, j'ai l'honneur de vous dire que ça marche toujours pas :
"Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\zero\tutorial\resultat.php on line 40"

Si je suis complètement à côté de la plaque, est-ce que je brûle néanmoins ou suis-je plutôt froid ? Sinon un indice svp, pour ne pas dire "la soluce par pitiéééééééééé " :(

Merci

Lhamo, en train de péter un plomb de sa zen attitude tout ça à cause de ce fichu code

Posté : 09 févr. 2008, 22:44
par zeus
en fait, le simple égal était bien puisque tu dois faire une affectation et non pas tester l'égalité.
Par contre, mysql_fetch_assoc() est une fonction ... donc avec des parenthèses ...

Il faut toujours commencer par le message d'erreur qui te donne les indications nécessaires à la résolution ;)

Posté : 09 févr. 2008, 22:58
par Invité
j'ai corrigé comme ceci :

Code : Tout sélectionner

while($maisons = mysql_fetch_assos($reponse))
Est-ce que ma correction est bonne ? Dans tous les cas, ça m'affiche l'erreur suivante :

Code : Tout sélectionner

Fatal error: Call to undefined function mysql_fetch_assos() in C:\wamp\www\zero\tutorial\resultat.php on line 40

Posté : 09 févr. 2008, 23:01
par Cyrano
Logique, tu as écrit mysql_fetch_assos au lieu de mysql_fetch_assoc

Posté : 09 févr. 2008, 23:11
par Invité
Je dois vraiment être trop crevé... :D Enfin ça marche !!! Merci beaucoup !!!

Je vais pouvoir faire mumuse avec mon code maintenant que j'ai tout compris

Cordialement zen,

Lhamo

Posté : 10 févr. 2008, 23:55
par Invité
Maintenant que l'appel de mes deux données marchent, je voudrais améliorer mon affichage, car il n'était pas top dans la script initial (les données s'affichent à la suite sans espace).

Bref, j'ai créé mon petit tableau dans lequel devraient s'afficher mes données, mais bien évidemment, après quelques corrections de mon script, elles ne s'affichent pas.

Voilà ce que donne mon bout de code :

Code : Tout sélectionner

<?php while($maison = mysql_fetch_assoc($reponse)) //prends-moi toutes les maisons une par une qui sont dans la réponse { print (" <tr> <td> echo $maison['piece']; </td> <td> echo $maison['commune']; </td> </tr> "); } mysql_close(); // Déconnexion de MySQL ?>
lorsque je lance une recherche, le message suivant s'affiche :

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

Je dois avoir un problème de ponctuation dans mes echo, pourtant ils s'écrivent normalement comme je l'ai fait si je m'en réfère à la documentation. Sûrement un cas particulier avec l'ouverture des balises html...

Help !

Posté : 11 févr. 2008, 07:24
par Cyrano
Logique encore une fois : tu as rajouté des echo() à l'intérieur d'un print(), ce qui est parfaitement inutile. Essaye comme ceci :
<?php
while(false != ($maison = mysql_fetch_assoc($reponse))) //prends-moi toutes les maisons une par une qui sont dans la réponse
{
       print ("
           <tr>
               <td>". $maison['piece'] ."</td>
               <td>". $maison['commune'] ."</td>
           </tr>
       ");
}

mysql_close(); // Déconnexion de MySQL
?>

Posté : 11 févr. 2008, 23:42
par Invité
Merci pour ta précieuse aide cyrano effectivement maintenant mon affichage est bien meilleur.

J'essaye maintenant de mettre une nouvelle donnée, à savoir "type", incluant soit une maison, soit un appartement. J'ai donc tout normalement introduit une nouvelle variable, appelée $type que j'ai insérée dans mon code.

Comme mes fonctions se font par "exclusion" des cases que je n'ai pas cochées (c'est-à-dire par exemple si je n'ai indiqué aucune commune, affiche-moi le type et le nombre de pièce), j'ai donc là encore réajusté le code. Tout fonctionne et s'affiche, sauf lorsque je ne rentre que l'un des trois paramètres, alors que les données correspondantes existent dans ma base de données.

Cela donne le bout de code suivant :
elseif ($piece == 'no' AND $commune == 'no') 
{ 
        $reponse = mysql_query('SELECT * FROM maisons where type = \''.$type.'\'') or die (mysql_error()); 
} 
elseif ($piece == 'no' AND $type == 'no') 
{ 
        $reponse = mysql_query('SELECT * FROM maisons where commune = \''.$commune.'\'') or die (mysql_error()); 
} 
elseif ($type == 'no' AND $commune == 'no') 
{ 
        $reponse = mysql_query('SELECT * FROM maisons where piece = \''.$piece.'\'') or die (mysql_error()); 
} 
Donc lorsque je sélectionne un seul des trois champs, le tableau des données apparaît, mais rien ne s'affiche. J'ai essayé toutefois de remplacer "AND" par "OR" , ce qui m'a peu convaincu dès le départ, et effectivement, cette option était à priori complètement débile : aucun affichage non plus.

J'aimerais comprendre...