Forum Clubic

Probleme formulaire de recherche

onjour a toutes et tous,

J’ai créer un formulaire de recherche donc voici le code html

table>

Nom de l’établissement:
Commune:
code postal:
Type d’établissement:


l devrait aller faire une recherche donc dans 3 champ différent de ma base de donnée.

Le nom des trois champs sont: commune pour name"comune", cp pour name"cp" et type_activite pour name"type".

Mon problème est que je sais pas comment faire pour que quand je poste le formulaire de recherche il aille dans les 3 champs mentionné.
pour un seul champ je n’ai pas de problème mais pour les trois champs en meme temps je sais pas comment faire :euh:

Pouvez vous me donnez un coup de pouce svp?
Merci a vous tous

Pour commencer, c’est


<form ...>
<table>...

</table>
</form>

Et pas l’inverse.

Pour le reste, que fais tu avec un seul champ? Montre nous ce code :wink:

oups oui juste pour le form et table :s

voici le ode avec un champs:

<?php if (isset($_POST['nom'])){ mysql_connect("localhost","root","mysql"); mysql_select_db ("belgitopia"); $avance_q = $_POST['nom']; $avance_sql ="SELECT * FROM recherche WHERE nom LIKE '%$avance_q%'"; $avance_req=mysql_query($avance_sql) or die(mysql_error()); mysql_close(); while($avance=mysql_fetch_array($avance_req)){ ?>
				<hr id="recherche_haut_hr" style="color: #f7b309;">
				<center><img src="<?php echo $avance['images']; ?>" width="500px"></img></center>
				
				<table width="100%">
					<tr><td valign="top" width="30%"><h2><?php echo $avance['type_activite']; ?></h2><td width="5%"></td><td valign="top" width="30%"><h2><?php echo $avance['nom']; ?></h2>
						<td width="5%"></td><td width="30%"><?php echo $avance['lien_site']; ?></td></tr>
					<tr><td valign="top" width="30%" style="border: dotted 1px #f7b309;"><?php echo $avance['descriptions']; ?></td><td width="5%"></td>
						<td valign="top" width="30%"><?php echo $avance['tel']; ?> <br/> <?php echo $avance['fax']; ?><br/><?php echo $avance['horaires']; ?></td>
						<td width="5%"></td><td valign="top" width="30%"><?php echo $avance['adresse']; ?><br/><?php echo $avance['cp']; ?><br/><?php echo $avance['commune']; ?><br/>
						<?php echo $avance['mail']; ?><br/>
						<?php //echo $avance['plan_acces']; ?></td>
					</tr>
				</table>
				<?php
				}
			}
				?>

mais pour y inserrer les 3 autres champs je sais vraiment pas comment faire :frowning:
Edité le 30/04/2009 à 22:18

Tu fais quoi comme critère derrière ? un ET de tous les champs? ou un OU?

En gros:

mysql_connect("localhost","root","mysql");
mysql_select_db ("belgitopia");

$nom = isset($_POST['nom']) ? trim($_POST['nom']):'';
$commune = isset($_POST['commune']) ? trim($_POST['commune']):'';
$cp = isset($_POST['cp']) ? trim($_POST['cp']):'';

$queryParts = array();

if ($nom != '') {
  $queryParts[] = 'nom like \'%' . mysql_real_escape_string(str_replace(array('%', '_'), array('%%', '\\_'), $nom)) . '%\'';
}

if ($commune != '') {
  $queryParts[] = 'commune like \'%' . mysql_real_escape_string(str_replace(array('%', '_'), array('%%', '\\_'), $commune)) . '%\'';
}

if ($commune != '') {
  $queryParts[] = 'cp like \'%' . mysql_real_escape_string(str_replace(array('%', '_'), array('%%', '\\_'), $cp)) . '%\'';
}

$avance_sql = 'select * from recherche';
if ($queryParts) {
  $avance_sql .= ' where ' . implode(' and ', $queryParts));
}

Tu construis petit à petit ta requête pour chaque critère.

Ici, c’est un and qui est fait (genre : Toto AND Paris pour tous les toto à Paris).

-> j’ai aussi ajouté mysql_real_escape_string pour éviter les injections SQL, et remplacer % par %%, et _ par _ pour éviter les jokers SQL (% = *, _ = ?).

Bonsoir, je te remercie de ta réponse et de ton code,

Honnêtement j’ai dur a le comprendre et je vais essayer d’étudier ca de près car c’est intéressant :slight_smile:

voilà, donc je me suis empresser de tester ton code.
que j’ai recopier exactement comme ceci:


<?php
						mysql_connect("localhost","root","mysql");
mysql_select_db ("belgitopia");

$nom = isset($_POST['nom']) ? trim($_POST['nom']):'';
$commune = isset($_POST['commune']) ? trim($_POST['commune']):'';
$cp = isset($_POST['cp']) ? trim($_POST['cp']):'';

$queryParts = array();

if ($nom != '') {
 $queryParts[] = 'nom like \'%' . mysql_real_escape_string(str_replace(array('%', '_'), array('%%', '\\_'), $nom)) . '%\'';
}

if ($commune != '') {
 $queryParts[] = 'commune like \'%' . mysql_real_escape_string(str_replace(array('%', '_'), array('%%', '\\_'), $commune)) . '%\'';
}

if ($commune != '') {
 $queryParts[] = 'cp like \'%' . mysql_real_escape_string(str_replace(array('%', '_'), array('%%', '\\_'), $cp)) . '%\'';
}

$avance_sql = 'select * from recherche';
if ($queryParts) {
 $avance_sql .= ' where ' . implode(' and ', $queryParts))
}		
					?>
					<hr id="recherche_haut_hr" style="color: #f7b309;">
					<center><img src="<?php echo $avance['images']; ?>" width="500px"></img></center>
					
					<table width="100%">
						<tr><td valign="top" width="30%"><h2><?php echo $avance['type_activite']; ?></h2><td width="5%"></td><td valign="top" width="30%"><h2><?php echo $avance['nom']; ?></h2>
							<td width="5%"></td><td width="30%"><?php echo $avance['lien_site']; ?></td></tr>
						<tr><td valign="top" width="30%" style="border: dotted 1px #f7b309;"><?php echo $avance['descriptions']; ?></td><td width="5%"></td>
							<td valign="top" width="30%"><?php echo $avance['tel']; ?> <br/> <?php echo $avance['fax']; ?><br/><?php echo $avance['horaires']; ?></td>
							<td width="5%"></td><td valign="top" width="30%"><?php echo $avance['adresse']; ?><br/><?php echo $avance['cp']; ?><br/><?php echo $avance['commune']; ?><br/>
							<?php echo $avance['mail']; ?><br/>
							<?php //echo $avance['plan_acces']; ?></td>
						</tr>
					</table>
				<?php
				
				
				mysql_close();
				?>

Le vilain me dit que il y a une erreur à la ligne 134 c’est a dire celle -ci:
$avance_sql .= ’ where ’ . implode(’ and ', $queryParts))
}

Honnêtement comme je suis débutant je ne sais pas du tout ou est l’erreur :yeux1:

Peux-tu encore m’aider stp?

Encore merci a toi d’essayer de m’aider :slight_smile:

ps: Le critère demandé est bien and :slight_smile:
Edité le 01/05/2009 à 01:31

Genre il te dis "unexpected }, expecting ; " ou un message du genre?

Lis bien la fin de ligne, tu verras :slight_smile:

Hello,

Non il me met Parse error: parse error in E:\LST\EasyPHP 3.0\www\LST creation\belgitopia\recherche.php on line 134.

et je cherche depuis hier comme un blaireau mais je trouve pas lol

j’ai trouver une erreur

mais maintenant quand je fais la recherche il ne m’affiche que des S

bizarre :confused:


[quote="gabi1202"] j'ai trouver une erreur

mais maintenant quand je fais la recherche il ne m’affiche que des S
et apparemment il ne prend que le champs nom,
car que j’inscris des données dans les autres champs il n’affiche rien

bizarre :confused:
[/quote]

c’est ok pour les champs de recherche il trouve bien quelque chose quand je rempli les champs 1 par 1,
mais il m’affiche tj que des S lol

Voila pour finir cela fonctionne enfin, mais j’ai fait autrement.
Je ne sais pas si c’est la meilleur solution mais cela fonctionne bien.
peut etre y a t’il des critique a faire sur mon code mais je suis tout prêt a les entendres car je demande pas mieux d’apprendre.
voici mon code


<?php
if (isset($_POST['nom'])){
if (isset($_POST['commune'])){
if (isset($_POST['cp'])){
if (isset($_POST['type'])){
mysql_connect("localhost","root","mysql");  
mysql_select_db ("belgitopia");  
 
$avance_nom = $_POST['nom']; 
$avance_commune = $_POST['commune'];
$avance_cp = $_POST['cp'];
$avance_type = $_POST['type']; 
$avance_sql ="SELECT * FROM recherche WHERE nom LIKE '%$avance_nom%' AND commune LIKE '%$avance_commune%' AND cp LIKE '%$avance_cp%' AND type_activite LIKE '%$avance_type%'";  
 $avance_req=mysql_query($avance_sql) or die(mysql_error());  
 mysql_close();  
 while($avance=mysql_fetch_array($avance_req)){  
 ?>
 <hr id="recherche_haut_hr" style="color: #f7b309;">
 <center><img src="<?php echo $avance['images']; ?>" width="500px"></img></center>
  
 <table width="100%">
 <tr><td valign="top" width="30%"><h2><?php echo $avance['type_activite']; ?></h2><td width="5%"></td><td valign="top" width="30%"><h2><?php echo $avance['nom']; ?></h2>
 <td width="5%"></td><td width="30%"><?php echo $avance['lien_site']; ?></td></tr>
 <tr><td valign="top" width="30%" style="border: dotted 1px #f7b309;"><?php echo $avance['descriptions']; ?></td><td width="5%"></td>
 <td valign="top" width="30%"><?php echo $avance['tel']; ?><br/><?php echo $avance['fax']; ?><br/><?php echo $avance['horaires']; ?></td>
 <td width="5%"></td><td valign="top" width="30%"><?php echo $avance['adresse']; ?><br/><?php echo $avance['cp']; ?><br/><?php echo $avance['commune']; ?><br/>
 <?php echo $avance['mail']; ?><br/>
 <?php //echo $avance['plan_acces'];?></td>
 </tr>
 </table>
 <?php
 } 
}
}
}
} 
 
 ?>

Merci encore a sans nom de m’avoir aider et surtout pris de sont temps :slight_smile:

Non. Ce code est entièrement faux. Si quelqu’un rentre un ’ dans un des champs il fait planter la requête.

ah bon :frowning: snif, je l’ai tester chez moi pourtant et cela fonctionne…

faut que je m’y met plus en profondeur je pense.

honnêtement ton code me paraissait vraiment bien mais je n’arrive pas a le faire fonctionné :frowning:

Ben, il manquait juste un “;” à la fin de la ligne que tu mentionnais…

Bonjour,

ok je vais tester ça se soir .
Pour le moment je suis sur un nouveau problème avec une fonction javascript lol.

dur dur d’apprendre la programmation :slight_smile: