Besoin d'aide : intégration lien d'une requete mysql

loufpad

WRInaute discret
Salut la Troupe :wink:
Je m'attaque pour la 1ère fois aux requêtes mysql que je récupère d'un formulaire sous forme de liste.
Il s'agit d'une requête multicritères (3 formulaires) . Pour l'instant ça fonctionne bien...
Je me frotte à tous les tutos sur le net depuis plus d'une semaine et j'avance petit à petit.
Mais il reste une énigme... Je vous explique :

Voici mon 1er formulaire
Code:
<form method="post" action="resultat.php">
Zone1 <br><select name="zone1"> 
<option value="OUI">OUI</option>  
<option value="NON">NON</option> 
</select>
L'utilisateur a le choix entre OUI en NON.

Puis je vais chercher dans la base pour afficher les résultats et ça marche

Dans ma page resultat.php, je déclare les variables de cette manière :
Code:
if(isset($_POST['zone1']) ){
$zone1 = $_POST['zone1'];
}else{
echo "Vous n'avez pas fourni les bons paramètres";
$zone1 = "erreur de données garantie plancher";
}

Et je les affiche :
Code:
$query = "SELECT * FROM `base` WHERE zone1 = '$zone1' AND zone2 = '$zone2' AND zone3 <'$zone3'";
$result = mysql_query($query, $link) or die($query . " - " . mysql_error());
(la zone3 est une zone numérique)

Là où je sèche c'est que j'aimerai pouvoir intégrer une troisième option dans mon formulaire qui serait le choix "Indifférent" et qui afficherait donc tous les résultats de la table concernée, sans filtrer par OUI ou par NON.
Ca donnerait donc ça dans mon formulaire :

Code:
<form method="post" action="resultat.php">
Zone1 <br><select name="zone1"> 
<option value="[je ne sais pas]">Indifférent</option>  
<option value="OUI">OUI</option>  
<option value="NON">NON</option> 
</select>

Quelqu'un peut-il m'aider à trouver la bonne formule à utiliser pour cette option. J'ai essayé plein de possibilités à base de LIKE, NOT LIKE, =, !=, %,etc... sans trouver.

Merci beaucoup :wink:
 

ptit_mousse

WRInaute discret
Si j'ai bien compris l'énoncé du problème, il te suffit de ne pas mettre le champ zone1 dans ta requête si l'utilisateur à choisi [je ne sais pas], ce qui donnerai

Code:
if(isset($_POST['zone1']) ){ 
$zone1 = $_POST['zone1']; 
}else{ 
echo "Vous n'avez pas fourni les bons paramètres"; 
$zone1 = "erreur de données garantie plancher"; 
}
$query = "SELECT * FROM `base` WHERE  zone2 = '$zone2' AND zone3 <'$zone3'";
if ($zone1 != '[je ne sais pas]') {
$query.= " AND zone1 = '$zone1'";
}
$result = mysql_query($query, $link) or die($query . " - " . mysql_error());
 

loufpad

WRInaute discret
Merci pour ta réponse.
C'est effectivement ce que j'ai fait.
Mais j'ai 4 critères de sélection et pour chacun le choix "indifférent" est disponible.
Ce qui fait que je dois définir pour chaque cas ou un "indifférent" est saisi un $query spécifique, ce qui donne un nombre d'hypothèses non négligeables...
Surout que je souhaite passer mes critères de recherche à 8...

Si je dois définir chaque hypothèse "manuellement" je le ferai mais je me demande s'il n'existe pas une fonction qui serait du genre :

- si valeur_choix="" (indifférent), alors choix = OUI + NON
- autrement valeur_choix=valeur_choix

A votre écoute :wink:
Merci
 

ptit_mousse

WRInaute discret
Code:
$param = '';
for ($i = 1 ; $i <= 8 ; $i++) {
   if(isset($_POST["zone$i"]) ){ 
      $zone[$i] = $_POST["zone$i"]; 
   }
   else{ 
      echo "Vous n'avez pas fourni les bons paramètres"; 
      $zone[$i] = "erreur de données garantie plancher"; 
   }
   if ($zone[$i] != '[je ne sais pas]') {
      if (strlen($param) == 0) {
         $param.="WHERE zone$i = $zone[$i]";
      }
      else {
         $param.=" AND zone$i = $zone[$i]";
      }
   }
}
$query.= "SELECT * FROM `base`$param"; 

$result = mysql_query($query, $link) or die($query . " - " . mysql_error());
 

ptit_mousse

WRInaute discret
Deux autre solution :
1) mettre ... WHERE zone1 in ('OUI', 'NON') ...
2) au lieu d'incrire 'OUI' ou 'NON' dans ta base de données, tu écris 0 ou 1, tu pourras alors simplement faire un >= 0 lorque le choix est indiférrent.
 

loufpad

WRInaute discret
Merci :wink:
Mais j'avoue ne pas tout comprendre (voire pas du tout :oops: )

Pour que ce soit plus simple pour moi, je repars d'une hypothèse plus simple.
1 formulaire de saisie avec 3 choix possibles (indifférent, oui ou non). (<select name="choix1">)
1 table avec 1 champ (nommé lui aussi choix1) dans lequel j'ai 2 valeurs possibles (1 pour oui et 2 pour non).

La requête marche bien si l'utilisateur choisit oui ou non.
Mais je bloque toujours si le choix est "indifférent". Ma requête n'affiche aucun résultat alors qu'au contraire je voudrais qu'elle affiche tous les résultats du champ...

Voilà où j'en suis :

Code:
if ($_POST['choix1'] == '1' OR '2')
    {
    $choix1 = $_POST['choix1'];
    }
else
    {
    $choix1 = '1' OR '2' ; [b][hors code : CE QUI NE MARCHE PAS... ][/b]
    }
	
// REQUETES


$query = "SELECT * FROM `table1` WHERE choix1= '$choix1'";


$result = mysql_query($query, $link) or die($query . " - " . mysql_error());
?>

Merci pour votre aide :wink:
 

ptit_mousse

WRInaute discret
Alors pour faire simple....

Code:
if (($_POST['choix1'] == '1') OR ($_POST['choix1'] ==  '2')) 
    { 
    // On recopie le choix dans lans variable
    $choix1 = $_POST['choix1']; 
    } 
else 
    {
    // Le client à choisi indifférent, on recopie les deux choix possible dans la variable
    $choix1 = '1, 2';
    } 
    
// REQUETES avec IN qui retournera toutes les lignes de table1 dont la colonne choix1 correspondra au contenu de la variable $choix1
// pour $_POST['choix1'] == 1  -> choix1 IN (1)
// pour $_POST['choix1'] == 2  -> choix1 IN (2)
// pour $_POST['choix1'] != 1 ET != 2 -> choix1 IN (1, 2)


$query = "SELECT * FROM `table1` WHERE choix1 IN ($choix1)"; 


$result = mysql_query($query, $link) or die($query . " - " . mysql_error());

Bon j'espère que ce code là est plus clair pour toi.
 

loufpad

WRInaute discret
Je ne peux que me prosterner et louer ton efficacité :lol:

Ca marche nickel.
Je viens de tester en rajoutant mes autres critères ( définition de variables + ajout dans la requête $query) et les résultats sont bons.
Je compte aller jusqu'à 8 critères avec à chaque fois le choix "indifférent".
Y a-t-il une raison qu'à force d'en ajouter ça puisse faire planter la requête ?
Je ne verrais pas pourquoi mais d'un autre côté je ne voyais pas comment faire non plus, donc... :oops:

ENCORE MERCI ! :D
 

loufpad

WRInaute discret
Le serveur est OK et la table contiendra grossomodo 200-250 lignes.

AU fait, je te l'ai déjà dit ? MERCI ! :wink:
 

loufpad

WRInaute discret
Me revoilà,
J'ai changé le titre du topic pour qu'il colle avec mon petit souci.
Je souhaite intégrer le résultat issu de ma requête sous forme de lien.
Dans le champ "cat3" j'ai stocké mes différentes url et je souhaite qu'elles s'affichent sous forme de lien.
Le mise en forme se fait sous forme de tableau

Voilà mon code que me renvoie une erreur (pb de syntaxe apparement)
Code:
if($nbResults) {
?>


<br>
<?php
echo '<table width="82%" border="0" cellspacing="0">'."\n";

        echo '<tr>';
        echo '<td width="53%"><div align="center">CAT1</div></td>';
        echo '<td width="25%"><div align="center">CAT2</div></td>';
        echo '<td width="22%"><div align="center">CAT3</div></td>';
        echo '</tr>'."\n";

while ($tab = mysql_fetch_array($result)) {

echo '<tr>';
        echo '<td width="53%">'.$tab['cat1'].'</td>';
        echo '<td width="25%">'.$tab['cat2'].'</td>';
        echo '<td width="22%">'<a href=".$tab['cat3']."target="_blank">Consulter la fiche technique</a>'</td>';
        echo '</tr>'."\n";

echo "<br /><br >";}
 echo '</table>'."\n";
    // fin du tableau.
	} 

else echo '<h1>Aucun résultat</h1>';

mysql_close($link);
?>


Le problème se situe ici :
Code:
echo '<td width="22%">'<a href=".$tab['cat3']."target="_blank">Consulter la fiche technique</a>'</td>';
Je tourne en rond avec les ', les " et tout le reste. :cry:
Voilà le message d'erreur :
Code:
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in...

Une petite aide serait très sympa.

Merci :wink:
 

ptit_mousse

WRInaute discret
Avec le message d'erreur de php avec la ligne correspondante, cela aurait été plus simple... enfin a priori la correctiov de l'erreur est :
Code:
echo '<td width="22%"><a href="'.$tab['cat3'].'" target="_blank">Consulter la fiche technique</a></td>';
ou pour être plus joli :
Code:
echo "<td width=\"22%\"><a href=\"$tab[cat3]\" target=\"_blank\">Consulter la fiche technique</a></td>";
 

loufpad

WRInaute discret
Ah oui, désolé... j'ai oublié la référence du message d'eereur... :oops:
Maintenant, la syntaxe est bonne. Merci à toi encore une fois.

Et si j'osais :wink: je poserais bien une dernière question :
Je sors donc mes résultats sous forme de tableau.
Pour assurer une bonne visibilité, j'aimerais que la couleur de fond de mon tableau change d'une ligne à l'autre.
Exemple :
1ère ligne de résultat : couleur de fond bleue
2e ligne de résultat : couleur de fond grise
3è : bleue
4è : grise
et ainsi de suite...

Je n'arrive pas à paramétrer 2 couleurs de fond de tableau qui alternent, toujours en partant du code que je donne au-dessus.
Est-ce possible à réaliser ?

Merci :wink:
 

ptit_mousse

WRInaute discret
L'ideal c'est d'utiliser deux classes css (bleu et gris) avec un background-color différent et ensuite de faire un truc du style
Code:
$i=0;
while ($arr = mysql_fetch_assoc($result)) {
    if ($i == 0) {
        $ligne_couleur = 'gris';
    }
    else {
        $ligne_couleur = 'bleu';
    }
    echo "<tr class=\"$ligne_couleur\"><td>hfezfuihueza fuizae hf</td></tr>";
    $i = 1 - $i;
}
 

Discussions similaires

Haut