Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1165 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Formulaire de recherche avec champs vides en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Formulaire de recherche avec champs vides en PHP

n°2183087
chocolatin​e_
Posté le 29-03-2013 à 00:47:40  profilanswer
 

Bonjour à tous !  :jap:  
 
Je reviens vers vous pour un problème sur lequel je me suis bien cassée la tête ^^
 
Voilà. Nous disposons d'une BDD de parcours. Via un formulaire, on peut filtrer ces parcours. Choisir la note, le pseudo du créateur, le temps, etc... Seulement on peut aussi décider de ne rien sélectionner comme pseudo de créateur par exemple.
J'ai pensé à une façon de faire qui marche, mais un curieux problème survient.
 
 
Voici d'abord la portion html correspondant au formulaire.
 

Citation :


<form name="parcours_temps" method="get" action="parcours_recherche.php" >
 
   
<label for="duree"> Durée</label><select name="temps" id="temps">
<option>Moins de 30 min</option>
<option>30 min - 1h</option>
<option>1h - 1h30</option>
<option>1h30 - 2h</option>
<option>Plus de 2h</option>
<option>Peu importe</option>
</select>
<br><br>
 
<label for="note">Note </label> <input type="number" name="note" id="note">
<br>
<label for="difficulte">Difficulte </label> <select name="difficulte" id="difficulte">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<br>
<label for="createur">Createur </label> <input type="text" name="login_createur" id="login_createur">
<br>
<br>
<label for="score">Score </label> <input type="number" name="score" id="score">
 
<input type="submit" name="recherche" value="Envoyer"><br><br>


 
 
 
Rien d'incroyable. Voici maintenant parcours_recherche.php
 
 

Citation :


 
<table border cellpadding = 10 cellspacing = 3>
 
<tr><td>Nom</td><td>Note</td><td>Difficulte</td><td>Temps (en min)</td><td>Description</td></tr>
 
<?php
include ("bdd.php" );
$choix_note = NULL ;
$choix_temps = NULL ;
$choix_difficulte = NULL ;  
$choix_login = NULL ;
$temps_min = 0;
$temps_max = 100000;
 
if($_GET['note'] != NULL )
 $choix_note = $_GET['note'] ;
 
if($_GET['note'] != NULL )
 $choix_login = $_GET['login_createur'] ;
 
if($_GET['difficulte'] != NULL && $_GET['difficulte'] != 0)
 $choix_difficulte = $_GET['difficulte'] ;
 
if($_GET['temps'] != NULL ) {
 $choix = $_GET['temps'] ;
 if ($choix == 'Moins de 30 min')
  {
  $temps_max = 30;
  }
 if ($choix == '30 min - 1h')
  {
  $temps_min = 30 ;
  $temps_max = 60;
  }
 if ($choix == '1h - 1h30')
  {
  $temps_min = 60 ;
  $temps_max = 90;
  }
 if ($choix == '1h30 - 2h')
  {
  $temps_min = 90 ;
  $temps_max = 120;
  }
 if ($choix == 'Plus de 2h')
  {
  $temps_min = 120 ;
  }
   
  echo $temps_min,'  -  ',$temps_max ;
 }
 
// if($_GET['lieu'] != NULL )
 // $choix_lieu = $_GET['lieu'];
 
echo $choix_note ;
 
$query = "SELECT IDparcours, nom, description, note, temps, difficulte, login FROM parcours, joueurs
WHERE joueurs.IDjoueur = parcours.IDcreateur AND temps <= $temps_max AND temps >= $temps_min  
AND difficulte = $choix_difficulte  
AND note >= $choix_note "
;
 
$result=mysql_query($query)  or die(mysql_error()) ;
 
 while ($row = mysql_fetch_row($result)) {
    $IDparcours = $row[0] ;
    $nom = $row[1] ;
    $description = $row[2] ;
    $note = $row[3] ;
    $temps = $row[4] ;
    $difficulte = $row[5] ;
    $login = $row[6];
         echo '<tr><td>',$nom,'</td><td>',$note,'</td><td>',$difficulte,'</td><td>',$temps,'</td><td>',$description,'</td></tr>';
       
     
} // boucle de lecture des réponses
 
 
?>


 
</table>
 
 
 
 
Ce code fonctionne sans la partie en rouge. Dès que je la rajoute, il me sort :

Citation :


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4


 
 
Quelque chose doit m'échapper. Pouvez-vous m'éclairer ?
 
 
Merci à vous !!

mood
Publicité
Posté le 29-03-2013 à 00:47:40  profilanswer
 

n°2183088
chocolatin​e_
Posté le 29-03-2013 à 00:48:49  profilanswer
 

Je précise : je n'ai ce message d'erreur que quand aucune note n'est saisie dans le formulaire. Sinon ça marche.

n°2183142
bistouille
Posté le 29-03-2013 à 12:55:08  profilanswer
 

Pour moi ça signifie que ton $_GET['note'] contient bien quelque chose par défaut.
D'ailleurs pourquoi un form en get plutôt qu'en post ?
 
On peut voir l'url lorsque tu as le message d'erreur mysql ?
 
Sinon, ce serait quand même plus judicieux de mieux contrôler tes données, empty, ctype_digit, et aussi utiliser des elseif  :o

n°2183189
rufo
Pas me confondre avec Lycos!
Posté le 29-03-2013 à 15:56:39  profilanswer
 

La construction de ta requête sql, c'est du n'importe quoi :/
Si tu mets pas une valeur dans le formulaire, t'aura NULL dans la requête sql, ce que Mysql va pas aimer puisque null en php, c'est aps pareil que la chaîne "NULL" écrite dans la requête sql.
 
En gros, si tas ça :
$MaVar = null;
$sql = "SELECT * FROM MaTable WHERE MonChamp = $MaVar";
 
quand tu vas exécuter ta requête, mysql va faire ceci :  
SELECT * FROM MaTable WHERE MonChamp =
 
Ca va pas trop lui plaire :/
 
Pour construire ta requête faut faire ceci d'abord :
$sql = "SELECT ... FROM .... WHERE joueurs.IDjoueur = parcours.IDcreateur";
$Where = "";
 
Puis pour chaque paramètre :
if ((isset($_GET['monchamp'])) && (!empty($_GET['monchamp']))) {
    $Where .= " AND monchamp = ".$_GET['monchamp'];
}
 
Evidemment, dans le $Where, tu mets le traitement approprié à contenu de $_GET['monchamp'] suivant que c'est un nombre, une chaîne de caractère...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2183219
chocolatin​e_
Posté le 29-03-2013 à 20:04:55  profilanswer
 

Ah bien vu l'idée de .=
 
je sentais bien que ce que je faisais était du bricolage, mais ça passait pour certaines requêtes..
Enfin là ça va être plus propre. Je teste ça, merci à vous !

n°2183264
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 29-03-2013 à 23:48:44  profilanswer
 

C'est pour l'exemple ou bien tes <option> ne retournent pas de value ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°2183268
chocolatin​e_
Posté le 30-03-2013 à 01:57:45  profilanswer
 

il faut croire que par défaut ça prend la valeur qui est comprise entre les balises <option>.

 

En tout cas maintenant ça marche super. Merci !


Message édité par chocolatine_ le 30-03-2013 à 01:58:11
n°2183353
rufo
Pas me confondre avec Lycos!
Posté le 31-03-2013 à 19:11:48  profilanswer
 

dans chaque option, ajoutes un attribut "value", ça sera mieux :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Formulaire de recherche avec champs vides en PHP

 

Sujets relatifs
innertHML et variable de session PHPTransfert de paramètres en PHP !
Recherche doc sur WinARES[PHP]paramètre pas fonctionnel dans une fonction
Contraintes Choco et PHPGénération de doc pdf sur base d'un formulaire
[Recrutement] Jeu vidéo sur mobile recherche un développeur C++[Résolu]Utilisation formulaire
Problème de validation de formulaireJe recherche un webmaster et un graphiste pour mon site Internet
Plus de sujets relatifs à : Formulaire de recherche avec champs vides en PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR