8721 sujets

Développement web côté serveur, CMS

Bonjour,

Voici mon problème :
J'ai une table "item" avec
- id
- code
- title
- time
- album
- composer
- etc….

• Ce que j'arrive à faire :

Dans un formulaire je mets un champ de saisie pour "composer".
<form id="form" name="form" method="get" action="resultats-composer.php">
<input name="recherche" type="text" id="recherche" />
<input type="submit" name="Submit2" value="Search" class="bouton" />
</form>


Et je le renvoie sur la page contenant en requête :
$query_Resultats = sprintf("SELECT code, title, `time`, album, style, tempo, moods, master, publishing, composer, destination, territories, audio FROM item WHERE composer LIKE CONCAT('%%', %s, '%%') ORDER BY title ASC", GetSQLValueString($colname_Resultats, "text"));


La pas de soucis, il m'affiche bien les résultats.
Par ex, si je tape "BLEU" il me sort à la fois les résultats "BLEU" et "Mer BLEU".
Il recherche bien tous les éléments qui "contiennent" le terme placé dans le formulaire.

• Ce qui pose problème :

Je veux faire une recherche croisée à partir d'un formulaire contenant plusieurs champs.
mon formulaire :
<form method="get" action="resultats.php">
  <label>
    <select name="style" value="Choisissez">
      <option value="" selected="selected"></option>
      <option>Atmospheric</option>
      <option>Song</option>
      <option>Choir</option>
      <option>Classical</option>
      <option>Dark</option>
      <option>Electro</option>
      <option>Flute</option>
      <option>Glassharmonica</option>
      <option>Jazz</option>
      <option>Oriental</option>
      <option>Piano</option>
      <option>PPop</option>
      <option>Silent movie style</option>
      <option>String quartet</option>
      <option value="Symphonic">Symphonic</option>
      <option>Traditional</option>
      <option>Violin</option>
      <option>Pop India</option>
    </select>
  </label>
  <label>
    <select name="tempo" value="Choisissez">
      <option value="" selected="selected"></option>
      <option>Slow (60-80)</option>
      <option>Medium Slow (80-100)</option>
      <option>Medium (100-112)</option>
      <option>Medium fast (112-120)</option>
      <option>Fast (+120)</option>
    </select>
  </label>
  <label>
    <select name="moods">
      <option value="" selected="selected"></option>
      <option>Fun</option>
      <option>Love</option>
      <option>Bright</option>
      <option>Magical</option>
      <option>Building</option>
      <option>Tension/Suspens</option>
      <option>Dramatic</option>
    </select>
  </label>
  <label>
    <input name="title" type="text" id="title" />
  </label>
  <input type="submit" value="Valider"/>
</form>



Ma page de résultats :


extract($_GET);
$i = 0;
if(!empty($title)) { $choix[$i++] = "title = '$title'"; }
if(!empty($style)) { $choix[$i++] = "style = '$style'"; }
if(!empty($tempo)) { $choix[$i++] = "tempo = '$tempo'"; }
if(!empty($moods)) { $choix[$i++] = "moods = '$moods'"; }
if(!empty($artist)) { $choix[$i++] = "artist = '$artist'"; }
$critere = $choix[0]." ";
for($j=1;$j<$i;$j++) 
                {
                         $critere .= " AND ".$choix[$j]." ";
                 }



$colname_Resultats = "-1";
if (isset($_GET['recherche'])) {
  $colname_Resultats = (get_magic_quotes_gpc()) ? $_GET['recherche'] : addslashes($_GET['recherche']);
}
mysql_select_db($database_contenu, $contenu);

$query_Resultats = sprintf("SELECT * FROM item WHERE $critere ORDER BY code ASC", GetSQLValueString($colname_Resultats, "text")); 


Et là, soucis.
Car il affiche bien les réponses. Il retient uniquement les éléments qui sont exactement identiques à ce qui a été entré dans le formulaire.
Par exemple, en titre je tape "BLEU", il me sort l'élément "BLEU" mais pas "Mer BLEU"
J'ai essayé avec la même formule que la version du haut (composer) mais cela ne fonctionne pas.
Je me mélange complètement et ne sais plus quoi indiquer en fait...
Quelqu'un aurait-il une idée ?

PS je ne suis vraiment pas un pro de sql et m'en excuse…

Merci d'avance à vous
Bonjour à tous et à toutes,

J'ai découvert votre ce forum par hasard. Je ne regrette pas de l'avoir visité et je pense même le consulter souvent. Il est toujours apprécié de parcourir un forum qui présente des idées intéressantes, cela veut dire qu'il est d'une grande aide. Merci à l'administrateur de ce site.

Mariane fax par internet
Essaie avec champ like '%x%' plutôt que champ = 'x'

Sinon deux autres remarques HS:
1 - ON ne met pas de champ de formulaire à l'intérieur d'un <label>; le label se met juste avant ou juste après le champ, mais le champ ne va pas dedans. Le standard autorise certes cette construction mais elle est très mal supportée par les navigateurs et les aides techniques qui tirent profit des labels; en plus tes labels sont vides donc c'est à peu près comme s'il n'y en avait pas.
2 - extract($_GET), ça peut être une faille de sécurité potentiellement dangereuse; je schématise, mais qu'est-ce qui se passe si je passe admin=1 dans l'URL ?