IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Probleme pour intérroger une base avec "%" (Tous)


Sujet :

PHP & Base de données

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 097
    Points : 944
    Points
    944
    Par défaut Probleme pour intérroger une base avec "%" (Tous)
    Bonjour,
    tous marchais et j'ai du faire un truc que je n'arrive pas retourver!!!!!
    J'ai un formulaire a 4 champs
    Quand on fait "envoyé" il va intérroger une base et affiche les info en fonction de ce qui a été sélectionner dans le focrmulaire.
    Pas tres compliquer.
    Mon probleme c'est dans on dernier champs, quand je laisse "tous" tout est filtré. C'est dire il y a rien qui est retourné. C'est drolement etrange car il est identique au champs précédent:

    Précision important:
    Si le champs f_prix, je le laisse sur tous (donc %) il me filtre tous, mais tous. Il y a rien qui afficher sur ma page web. PAR CONTRE, si je selction une valeur, par exemple < 900, il me retourne et correctement tous ce qui est en dessous de 900. Si j'ajoute un autre filtre, motos, par exemple, il me retourne que les motos en dessous de 900.
    Mais quand je laisse "Tous", tout est filtré.
    Pourtant le champs f_prix et f_cylindree ont la meme "configuration". A moin que j'aie loupé un truc.

    Voici mon code:
    Le formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    					<form method="post" action="">
    					<input type="hidden" value="1" name="f_sent">
    					<table border="0" cellpadding="0" cellspacing="0">
     
    					  <tr>
    						<td class="td-occasion">Type : </td>
    						<td>
    						  <select size="1" name="f_type" onFocus="javascript:this.style.backgroundColor=#ffffff">
    							  <option value="%" selected>Tous</option>
    							  <option value="Motos">Motos</option>
    							  <option value="Scooters">Scooters</option>
     
    						  </select>
    						</td>
    					  </tr>
    					  <tr>
    						<td>Marque : </td>
    						<td>
    							<select size="1" name="f_marque">
    								<option value="%" selected>Tous</option><option value='Aprilia'>Aprilia</option><option value='Kymko'>Kymko</option><option value='Peogeot'>Peogeot</option><option value='SYM'>SYM</option><option value='Yamaha'>Yamaha</option> 							</select>
     
    						</td>
    					  </tr>
    					  <tr>
    						<td>Cylindrée : </td>
    						<td>
    							<select size="1" name="f_cylindree">
    								<option value="%" selected>Tous</option><option value='50'>50 ccm et moins</option><option value='125'>50 ccm et 125 ccm</option><option value='400'>125 ccm et 400 ccm</option><option value='601'>600 ccm et 1000 ccm</option><option value='1000'>1000 ccm et plus</option> 							</select>
     
    						</td>
    					  </tr>
    					  <tr>
    						<td>Prix : </td>
    						<td>
    							<select size="1" name="f_prix">
    								<option value="%" selected>Tous</option><option value='900'>< 900</option><option value='1500'>< 1500</option><option value='1900'>< 1900</option><option value='2900'>< 2900</option><option value='3390'>< 3390</option><option value='4900'>< 4900</option><option value='6900'>< 6900</option><option value='9900'>< 9900</option> 							</select>					
    						</td>
     
    					  </tr>
    					  <tr>
    					  <td colspan="2">&nbsp;
     
    					  </td></tr>
    					  <tr>
    						<td colspan="2">
    							<input type="submit" value="Envoyer" name="send" class="bouton">
    							<input type="reset" value="Rétablir" name="reset" class="bouton">
    						</td>
     
    					  </tr>
    					</table>
    					</form>
    et mon code PHP qui va trier dans la bas
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    $sql= 'SELECT * FROM tb_scootershop WHERE fd_type LIKE "'.$type.'" AND fd_marque LIKE "'.$marque.'" AND fd_cylindree LIKE "'.$cylindree.'" AND fd_prix <= "'.$prix.'"';
    							$query=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    							$nb = mysql_num_rows($query);
    							if ($nb < 1) {  
    								echo 'Aucun enregistrement selon vos critères de recherche';
    							} else {
    								echo '<table class="occasion" cellspacing="0" cellpadding="0"><tr>
    											<td class="red">Type</td>
    											<td class="red">Marque</td>
    											<td class="red">Modèle</td>
    											<td class="red">Cylindree</td>
    											<td class="red">Prix</td>
    											<td class="red">Description</td>
    											<td class="red">Photo</td>
    										</tr>';
    									while($data = mysql_fetch_assoc($query)){
    										echo '<tr class="hover"><td>';
    										echo ucfirst($data['fd_type']);
    										echo '</td><td>';
    										echo '<strong>'.ucfirst($data['fd_marque']).'</strong>';
    										echo '</td><td>';
    										echo $data['fd_modele'];
    										echo '</td><td>';
    										echo $data['fd_cylindree'];
    										echo '</td><td>';
    										echo $data['fd_prix'];
    										echo '</td><td>';
    										echo $data['fd_desc'];
    										echo '</td><td>';
    										echo '<a href="img/occasions/'.$data['fd_image'].'" target="_blank" rel="lightbox" title="'.$data['fd_marque'].', '.$data['fd_modele'].', Sfr. '.$data['fd_prix'].'"><img src="img/camera.gif" /></a>';
    										echo '</td></tr>';
    									}
    								echo '</table>';
    							}

    Mas base st comme ceci,

    Tous les champs sont de "varchar" à l'exption de :
    id => int(4)
    fd_prix => smallint(10)
    fd_cylindree => smallint(10)

    Mais pourquoi mon champs f_prix (fd_prix) me cause un probleme????

  2. #2
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 097
    Points : 944
    Points
    944
    Par défaut
    La modif que j'ai faite:

    Avant tous mes champs etaient en varchar(noumbre) sauf le champs id qui est et toujouts en int(4)

    Dans mon champs fd_cylindree, j'avais des valeurs:
    50
    125
    600
    1200
    etc.

    Dans mon champs fd_prix j'avais des valeurs:
    1'900
    900
    1'200
    9'900
    Vu que ces deux champ de repondait pas a OREDER BY xx ASC,

    Je les ai mis en int().

    Tous mes valeurs apres le ' ont ét changée comme ceci
    900 -> 900
    1'200 -> 1
    9'900 -> 9
    J'ai donc directement modifié ces valeur dans ma base pour retrouver ceci:

    900
    1200
    9900
    Depuis j'ai mon probleme!!

    Je serait un peu étonné que ca soit a cause de ca mais vu que je trouve la solus de mon probleme j'admets toute hypotese, et je viens a vous!!!!

  3. #3
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Cette portion de la requête ci-dessous retourne un résultat valide ? O_o
    A la limite, si $prix vaut % c'est à dire tous, autant ne pas mettre ce bout de requête. Le cas contraire, tu concatènes ça à ta requête.

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 097
    Points : 944
    Points
    944
    Par défaut
    oups je vois pas trop ce que tu veux dire par concatené. mais je cible la source du problème.

    En fait il peux pas faire de comparaison avec "%", mais avec 900 oui, en fait je nage un peu....

    Je regarde..

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 097
    Points : 944
    Points
    944
    Par défaut
    En fait je vais remplace ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select size="1" name="f_prix">
    								<option value="%" selected>Tous</option>
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select size="1" name="f_prix">
    								<option value="50000" selected>Tous</option>
    et ca marche.

    Mais y aurait eu une solution?

  6. #6
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    je pense que c'est du à un problème d'encodage, et que ton % n'est plus reconnue comme tel

  7. #7
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Ben, c'est ça qu'il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select size="1" name="f_prix">
        <option value="all" selected>Tous</option>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql= 'SELECT * FROM tb_scootershop WHERE fd_type LIKE "'.$type.'" AND fd_marque LIKE "'.$marque.'" AND fd_cylindree LIKE "'.$cylindree.'"';
    if (is_numeric($prix))
        $query .= ' AND fd_prix <= "'.$prix.'"';

Discussions similaires

  1. Réponses: 12
    Dernier message: 25/05/2011, 15h47
  2. Probleme pour créer une base de données
    Par za_za dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/07/2009, 18h32
  3. probleme pour creer une base de donnee
    Par caroen dans le forum MySQL
    Réponses: 5
    Dernier message: 06/11/2008, 13h50
  4. probleme pour tracer une ligne avec OleExcel
    Par blondelle dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/08/2006, 19h10
  5. Probleme pour reattacher une base
    Par bisounours75012 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/02/2006, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo