Page 1 sur 1

Valeur de recherche differente selon champ

Posté : 01 juin 2005, 09:06
par castelli
Bonjour a tous
Je dois faire une recherche dans ma base de donné et jaurai voulu la faire selon un nom ressemblant a un champ defini auparavant , j'ai reussit cela mais maintenant jaurai aimé approfondir en definissant deux criteres de recherche selon que le champ correspond a la varibale 1 ou qu'il apparatient a la varible deux

exemple = si le champ nom appartien a la variable 1 => ma recherche cherche tout les noms ayant une partie du mot clef dans leur nom
si le champ reference appartient a la variable 2 =>la recherche cherche exactement le nom ayant comme reference le mots clef et pas qu une partie de celui ci

(jesper que c'est clair)

Code : Tout sélectionner

$motsclef=$_POST['motsclef']; $methode = $_POST['methode']; $motsclef = explode(" ",$motsclef); $nbr_mots = count($motsclef); $var1 = 'nom,formule'; $var2 = 'reference,numero_cass'; $select = 'SELECT count(nom) FROM produit2'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); $row = mysql_fetch_row($result); $total = $row[0]; $select="SELECT nom,formule,reference,disponibilite,localisation,quantite,numero_cass FROM produit2"; if (isset($_POST['methode']=$var1)){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']=$var2)){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef']."; } $select .= " ORDER BY nom"; $select .= " ASC limit ".$limite.','.$nombre; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

Posté : 01 juin 2005, 09:21
par castelli
En faite le probleme c'est que j'ai une erreur a la ligne

Code : Tout sélectionner

if (isset($_POST['methode']=$var1)){
et je trouve pas.. quelqun aurait il une idée?

Posté : 01 juin 2005, 09:25
par castelli
j'ai deja reussit a corriger un peu

Code : Tout sélectionner

if (isset($_POST['methode']==$var1)){
mais jobtient cette erreure

Parse error: parse error, unexpected T_IS_EQUAL, expecting ',' or ')' in

une idée?

Posté : 01 juin 2005, 09:31
par sadeq
il faut afficher aussi le code HTML du formulaire de recherche. ton code n'est pas suffisant.
En attendant, t'as des erreurs dans ton code :
1. l'utilisation de isset() n'est pas correcte car c'est une fonction qui s'applique aux variables. Elle s'écrit : isset($variable) et revoit vrai si la variable existe.

Correction :
if (isset($_POST['methode']) && $_POST['methode'] == $var1){ 
$select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; 
} 
En suite la clause SQL "limit" utilise deux variables $limite et $nombre qu ne sont pas déclarées dans le code que tu as fourni.

Et enfin, pour quoi lancer deux requêtes succèssives sur la même table alors qu'on peut se contenter d'une surtout que ça n'affecte pas la logique de ton algorithme. Je pense à :
$select = 'SELECT count(nom) FROM produit2'; 

$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); 

$row = mysql_fetch_row($result); 

$total = $row[0]; 

$select="SELECT nom,formule,reference,disponibilite,localisation,quantite,numero_cass FROM produit2"; 
qui peut être simplifié :
$select="SELECT count(nom) as total, nom,formule,reference,disponibilite,localisation,quantite,numero_cass FROM produit2"; 

$row = mysql_fetch_row(mysql_query($select,$link)) or die ('Erreur : '.mysql_error() ); 

$total = $row[0]; 
....

Posté : 01 juin 2005, 10:05
par castelli
merci SADEQ ce que tu ma di de faire marche nikel ;)

sa donne sa maintenant

Code : Tout sélectionner

$motsclef=$_POST['motsclef']; $methode = $_POST['methode']; $motsclef = explode(" ",$motsclef); $nbr_mots = count($motsclef); $var1 = 'nom'; $var2 = 'reference'; $var3 = 'formule'; $var4 = 'numero_cass'; $select = 'SELECT count(nom) FROM produit2'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); $row = mysql_fetch_row($result); $total = $row[0]; $select="SELECT nom,formule,reference,disponibilite,localisation,quantite,numero_cass FROM produit2"; if (isset($_POST['methode']) && $_POST['methode'] == $var1){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']) && $_POST['methode'] == $var3){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']) && $_POST['methode'] == $var2){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } if (isset($_POST['methode']) && $_POST['methode'] == $var4){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } $select .= " ORDER BY nom"; $select .= " ASC limit ".$limite.','.$nombre; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); $limitesuivante = $limite + $nombre; $limiteprecedente = $limite - $nombre;
sinon mon formulaire c'etait sa :

Code : Tout sélectionner

<center><table width="50%"> <!-- On declare le formulaire --> <form method="POST" action='truc4.php' <!-- Le champs à remplir par le visiteur --> <tr><td><input type="text" name="motsclef"></td> <td><select name="methode"> <option value="nom">Par nom</option> <option value="reference">Par reference</option> <option value="formule">Par forumule brute</option> <option value="numero_cass">Par numero de CAS</option> </select> </td></tr> <tr><td><input type="submit" value="Rechercher"></td></tr> </form></table></center>
et la variable nombre et limite serve a defnir le nombre de resultat par page et les boutons suivant et precedent

Code : Tout sélectionner

$nombre = 20; // on va afficher 20 résultats par page. if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois // on met limite à 0.

Code : Tout sélectionner

echo "<table border=\"0\">";echo "<tr>"; if($limite != 0) { echo '<form action="'.$page.'" method="post">'; echo "<input type='hidden' value='".$_POST['motsclef']."' name='motsclef'>"; echo '<input type="submit" value="précédents">'; echo '<input type="hidden" value="'.$limiteprecedente.'" name="limite">'; echo '</form>'; }echo "</tr>"; echo "<tr>"; if($limitesuivante < $total) { echo '<form action="'.$page.'" method="post">'; echo "<input type='hidden' value='".$_POST['motsclef']."' name='motsclef'>"; echo '<input type="submit" value="suivants">'; echo '<input type="hidden" value="'.$limitesuivante.'" name="limite">'; echo '</form>'; }echo "</tr>"; echo "</table>";
Par contre dans ces meme boutons j'ai une erreure ..
Lorsque j'appuis sur suivant , jobtient pas la suite de resultat mais la premiere page par ordre alphabetique de nom...

une idée?