Recherche pluri-critères PHP
Résolu
fast518
Messages postés
18
Statut
Membre
-
fast518 Messages postés 18 Statut Membre -
fast518 Messages postés 18 Statut Membre -
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
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Easy php - Télécharger - Divers Web & Internet
- Recherche image - 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.