Recherche pluri-critères PHP

Résolu
fast518 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
fast518 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Voilà j'ai essayé de réaliser une recherche avec plusieurs critères sur les pubs dans ma base de données. Pour cela dans la page du formulaire j'ai mis ce script pour éviter que le formulaire soit envoyé vide :

<script language="JavaScript">
//La fonction JavaScript qui vérifie si les champs obligatoirs du formulaire ont été bien remplis
<!--
function envoie(formulaire)
{
if ( (document.getElementById('Publicitaire').value.lenght>0) || (document.getElementById('Type').value.lenght>0) || (document.getElementById('Emplacement').value.lenght>0) || (document.getElementById('Datedebut').value.lenght>0) || (document.getElementById('Datefin').value.lenght>0))
{
formulaire.submit();
}else
alert('Impossible d\'effectuer une recherche, vous devez remplir au moins un champ !');
}
-->
</script>


Et on prends les champs remplis et on les mets comme des conditions de la requête SQL. Dans ce cas, les noms des attributs des tables de la BDD sont les mêmes que les names des input du formulaire :

<?php
$champs = array('Publicitaire','Type','Emplacement','Datedebut','Datefin');

$sql='SELECT * FROM Publicite LEFT JOIN Emplacementpub
ON Publicite.idPublicite = Emplacementpub.idPublicite
WHERE ';

$i=1;

foreach ( $champs AS $champ ) {
$i;
if ( isset($_POST[$champ]) && $_POST[$champ] !== '' ) {
if ($i = count($champs)){
$sql .= "$champ = '{$_POST[$champ]}'" ;}
else{
$sql .= "$champ = '{$_GET[$champ]}' AND" ; }
}
$i++;
}

$sql .=";";
$result = mysql_query($sql) OR die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
?>

Je ne vois pas d'incohérence, mais le code ne marche pas. Si vous avez des idées !
Merci
A voir également:

2 réponses

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
qqs erreurs:

test égalité c'est == et pas =

tu as mélangé du $GET et du $_POST

si tu mets $i; ça va faire quoi à la variable ?

essayes comme ça:

$array_champs=array();
foreach ( $champs AS $champ ) {

	if ( isset($_POST[$champ]) && $_POST[$champ] !== '' ) {
		
		$array_champs[$champ]=$_POST[$champ]; //on empile dans un array les valeurs sasisies avec comme index les noms des champs
	}
}

$i=1;
foreach	($array_champs as $champ=>$value){
	if ($i == 1){
		$sql .= " $champ = '$value'" ;
	}
	else{
		$sql .= " AND $champ = '$value'" ; }
	}
$i++;
} 
1
fast518 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Oh oui tu as raison (pour le == c'est juste une faute de frappe) par contre ta façon de faire est meilleure : moi je mettais un AND à la fin et ça donnait toujours des AND à la fin de la requête sauf si le dernier élément est bien rempli.
Pour le deuxième GET c'est un POST encore une fois une faute de frappe.

Merci beaucoup Alain.
0