utilisation BETWEEN

Eléphant du PHP | 257 Messages

07 nov. 2011, 22:57

bonjour je suis tomber sur un superbe résultat avec ce topic et j'aimerais rajouter deux champs texte prix pour faire une recherche entre les deux avec BETWEEN

Merci de votre aide


post370588.html#p370588

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 nov. 2011, 23:09

salut,

et c'est quoi le problème ?

a tu testé quelque chose ?

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 1996 Messages

08 nov. 2011, 00:20

BETWEEN est simple à utiliser
$requete = "SELECT prix FROM tablePrix WHERE prix BETWEEN 1 AND 3";
un conseil ne met pas tes champs en texte mais en float ce sera plus simple pour gérer un prix (qui sera numérique)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 257 Messages

08 nov. 2011, 13:46

Bonjour dans le select je savais comment le mettre en place , mais si je le fait comment dans ton exemple les autres recherche ne se font plus ?

je me demandais si cela serai possible de le mettre dans les contrôles des choix mon BETWEEN .

Merci de vos réponse

ViPHP
xTG
ViPHP | 7331 Messages

08 nov. 2011, 13:50

N'aurais-tu pas tout simplement oublié un AND... Montres nous ta requête. ;)

Eléphant du PHP | 257 Messages

08 nov. 2011, 21:18

bonjour tu le placerai ou dans le select ici .
 if($i > 0)
                {
                        // requete de selection
                        $sql = "SELECT * FROM bdd WHERE $critere ORDER BY nom_fichier";
                        $requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
                }

ViPHP
xTG
ViPHP | 7331 Messages

08 nov. 2011, 21:37

Code : Tout sélectionner

... WHERE $critere AND prix BETWEEN 1 AND 3 ORDER BY ...

Eléphant du PHP | 257 Messages

08 nov. 2011, 22:41

voila ce que j'ai fait exactement
<?php
require_once("conf.php");
                               
                 // connexion
                        $cnx = mysql_connect($host,$user,$pass) or die("Impossible de se connecter");
                        $db = mysql_select_db("$bdd") or die("Impossible de se connecter");
                                if (mysql_connect ($host,$user,$pass))
                                {
                                        echo 'Connexion réussie'; echo '<br>';
                                }
                                else
                                {
                                        echo 'Connexion impossible...'.mysql_error(); echo '<br>';
                                }
                       
                // on récupère les critères sélectionnés
                extract($_POST);

                $i = 0;
         
                // si la variable est présente, on lui affecte une place dans le tableau 'choix[]', qui nous servira ensuite à construire le WHERE de la requête.
                if(!empty($type_bien)) { $choix[$i++] = "type_bien = '$type_bien'"; }
                if(!empty($objet)) { $choix[$i++] = "objet = '$objet'"; }
                if(!empty($province)) { $choix[$i++] = "ville = '$province'"; }
		if(!empty($ville)) { $choix[$i++] = "ville = '$ville'"; }
                if(!empty($indice)) { $choix[$i++] = "indice = '$indice'"; }
					
		//recherche entre deux champs prix ajout ////////////////////////////////////////////
		if (!empty( $_GET['prix']) AND !empty($_GET['prix1'])) 
                {
                $critereprix .= '`prix` BETWEEN '.$_GET['prix'].' AND '.$_GET['prix1'];              
                }
				//////////////////////////////////////////////////////////////////////////////////
                // on insère les éléments remplis dans une variable $critere, en commençant par la première occurrence, puis on boucle
                $critere = $choix[0]." ";
         
                for($j=1;$j<$i;$j++)
                {
                       $critere .= " AND ".$choix[$j]." ";		
                }
				
                // enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
                if($i > 0)
                {
                        // requete de selection
                        $sql = "SELECT * FROM immo WHERE $critere ORDER BY $critereprix";
                        $requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
                }

                // si $i = 0, alors l'utilisateur n'a pas saisi de critère, là soit on fait la même requete mais sans "WHERE $critere", soit on lui demande de saisir au moins un critère.
                else
                {
                        $sql = "SELECT * FROM immo ORDER BY $critereprix";
                }

                        //récupération avec mysql_fetch_array(), et affichage de nos résultats :
                        echo( "<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" align=\"center\">\n" );
                        echo( "<tr>
                        <td><div align=\"center\">Bien</div></td>
                        <td><div align=\"center\">Objet</div></td> 
                        <td><div align=\"center\">Province</div></td>
                        <td><div align=\"center\">Ville</div></td>
						<td><div align=\"center\">Indice d'isolement</div></td>
						<td><div align=\"center\">Prix</div></td>
						
                        </tr>" );
 
                        while( $result = mysql_fetch_array( $requete ) )
                        {      
                        echo( "<tr>\n" );
                        echo( "<td><div align=\"center\">".$result["bien"]."</div></td>\n" );
                        echo( "<td><div align=\"center\">".$result["objet"]."</div></td>\n" );
                        echo( "<td><div align=\"center\">".$result["province"]."</div></td>\n" );
                        echo( "<td><div align=\"center\">".$result["ville"]."</div></td>\n" );
                        echo( "<td><div align=\"center\">".$result["indice"]."</div></td>\n" );
						echo( "<td><div align=\"center\">".$result["prix"]."</div></td>\n" );
                        /*echo( "<td><div align=\"center\"><form method='post' action='telechargement.php'><input type='submit' value='Telechargement'/></form></div></td>\n" );*/
                        echo( "</tr>\n" );
                        }
                        echo( "</table><br>\n" );      
                ?>

ViPHP
xTG
ViPHP | 7331 Messages

09 nov. 2011, 08:22

Pas d'erreur ? Si tu affiches $sql cela donne quoi ?

Eléphant du PHP | 257 Messages

28 févr. 2012, 21:06

bonjour voilà j'ai une erreur
Notice: Undefined variable: critereprix in C:\Program Files\EasyPHP-5.3.8.1\hesbaye\search-val.php on line 34
ERREUR MYSQL numéro: 1064
Type de cette erreur: Erreur de syntaxe pr�s de '' � la ligne 1

Eléphanteau du PHP | 10 Messages

28 févr. 2012, 22:16

Salut,

Tu peux faire un
echo $sql;
comme ca on pourra voir la requete qui est envoyée à MySQL

ViPHP
xTG
ViPHP | 7331 Messages

29 févr. 2012, 09:35

Et en faisant cela tu verrais (comme l'erreur te l'indique) que $critereprix n'existe pas et donc qu'il n'y a pas de valeur après ORDER BY.

Mammouth du PHP | 2278 Messages

29 févr. 2012, 10:38

Ce doit être des réactions de dinosaure, du temps où on évitait les instructions inutiles mais :
1) j'ai du mal à saisir comment on peut mêler du $_POST et du $_GET
             extract($_POST);
...
                                     
                //recherche entre deux champs prix ajout ////////////////////////////////////////////
                if (!empty( $_GET['prix']) AND !empty($_GET['prix1']))
                {
                $critereprix .= '`prix` BETWEEN '.$_GET['prix'].' AND '.$_GET['prix1'];              
                }
Et donc d'où surgit $critereprix....
2) le for lui aussi n'a de sens que si $i > 0; il pourrait très bien se situer dans le if
      
      $critere = $choix[0]." ";   
    for($j=1;$j<$i;$j++)
                {
                       $critere .= " AND ".$choix[$j]." ";             
                }
                               
                // enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
                if($i > 0)
                {

    $critere = " ";   
                               
                // enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
                if($i > 0)
                {
                     $critere = $choix[0]." ";         
                       for($j=1;$j<$i;$j++)
                      {
                             $critere .= " AND ".$choix[$j]." ";             
                ....
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 257 Messages

29 févr. 2012, 12:24

bonjour , c'est ok c'est pour comparer ma fouchette de prix entre disons 50.000 et 100.000 et tous les bien entre c'est valeur doive être afficher .

Merci