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 -
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
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:
- Recherche pluri-critères PHP
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Easy php - Télécharger - Divers Web & Internet
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche photo - Guide
- Je recherche une chanson - Guide
2 réponses
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:
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++; }
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.
Pour le deuxième GET c'est un POST encore une fois une faute de frappe.
Merci beaucoup Alain.