Recherche pluri-critères PHP

Résolu/Fermé
fast518 Messages postés 18 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 10 juillet 2009 - 29 juin 2009 à 18:36
fast518 Messages postés 18 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 10 juillet 2009 - 30 juin 2009 à 10:23
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 juin 2009 à 21:12
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 mardi 23 juin 2009 Statut Membre Dernière intervention 10 juillet 2009
30 juin 2009 à 10:23
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