8768 sujets

Développement web côté serveur, CMS

Salut à tous,

J'aimerais savoir si il est possible de donner plusieurs valeurs (values) à un input ?

En gros, mon moteur de recherche ressemble à ca :

<form action="recherche-rapide.php" method="post" enctype="application/x-www-form-urlencoded" >
<input type="hidden" name="valid" value="3" /><input type="hidden" name="ppc" value="rd" />
<input name="nom" id="contenu2" onFocus="javascript:this.value=''" onkeyup="copy();" placeholder="Nom du médecin" role="textbox">
<input name="cp" id="contenu4" placeholder="code postal"/><input type="hidden" name="ville" value="" /><input type="hidden" name="category" value="" />
<input name="image2" type="image" onMouseOver="this.src='img/go.png';"  onmouseout="this.src='img/go.png';" src="img/go.png" id="search"/>
</form>

(Dessous, le traitement de la recherche sur la page recherche-rapide.php)

Or, ce que je souhaite faire c'est lorsqu'1 visiteur entre un "nom" ou une "category" (aujourd'hui caché) dans le champs "nom", cela réalise la recherche.

Est-ce possible, si oui comment ? Smiley smile
Un peu comme on voit un peu partout sur les annuaires "Qui, Quoi" dans un seul et même champs...

Merci de votre aide.
@plus
Zed1


<?php	  extract($_POST,EXTR_OVERWRITE);
		  $nombre =44 ;
		  $total=0;
		  if (!isset($limite)) $limite = 0;
		  $limitesuivante = $limite + $nombre;
		  $limiteprecedente = $limite - $nombre;
		  $sql="select * from membres where nom like '%$nom%' and ville like '%$ville%'  and cp like '$cp%' and category like '$category%' ";
		  if (isset($online)){$sql.=" and online=1";}else{$online=0;}
		  $repvide="<b>' $nom $cp $ville'</b>";
		  $repvides1="$nom";
		  $repvides2="$cp";
		  $repvides3="$ville";
		  $repvides4="$category";
		  $req=mysql_query($sql);
		  $total = mysql_num_rows($req);
....

Modifié par Zed1 (09 Apr 2014 - 09:07)
Si je comprends bien ce que tu veux faire, tu aimerais pouvoir détecter si l'utilisateur a saisi un nom ou une catégorie, et placer la saisie dans le bon champ en fonction.

- Soit tu détectes ça en javascript et tu copies si besoin la saisie en cours dans le champ catégorie
- Soit tu détectes ça côté serveur et tu modifies ta requête

Le plus simple sera sans doute de faire une recherche des mots saisis à la fois dans nom et dans catégorie; dans nom en priorité, et dans catégorie au cas où aucun nom n'est trouvé, par exemple. A moins que tu aies un moyen de détecter facilement et sans ambiguïté ce qui a été saisi (dans l'exemple nom vs numéro de téléphone c'est facile, mais ici probablement pas)

Par contre en voyant ton code, j'ai plein de remarques en vrac :

<form action="recherche-rapide.php" method="post" enctype="application/x-www-form-urlencoded" >
enctype est inutile dans la mesure où c'est le format par défaut

<input name="nom" id="contenu2" onFocus="javascript:this.value=''" onkeyup="copy();" placeholder="Nom du médecin" role="textbox">
OÛ est l'attribut type="text" ? C'est recommandé de mettre cet attribut dans tous les cas (et je crois qu'il est obligatoire de toute façon)
Le role="textbox" deviendra alors inutile car implicite

onFocus="javascript:this.value=''"
C'est une très très mauvaise idée de vouloir effacer le contenu du champ dès qu'il prend le focus. Je devrais être en mesure de saisir ma recherche en plusieurs fois.
La bonne pratique consiste à le sélectionner (this.select()), mais surtout pas à l'effacer.
Heureusement que ton code ne marchera pas (pas de préfixe "javascript:" dans les onXXX inline; d'ailleurs les onXXX inline ne sont pas recommandés non plus)

<input name="image2" type="image" onMouseOver="this.src='img/go.png';" onmouseout="this.src='img/go.png';" src="img/go.png" id="search"/>
Où est l'attribut alt ? Indispensable pour la'ccessibilité et de toute manière obligatoire selon le standard.

extract($_POST,EXTR_OVERWRITE);
Je te conseille de revoir ton code php pour ne plus avoir besoin de cette ligne car c'est potentiellement très dangereux d'un point de vue sécuritaire (REGISTER_GLOBALS n'a pas été déprécié pour rien et les tentatives pour le réintroduire par un moyen détourné sont aussi déconseillées).

De même, la vieille bibliothèque mysql est dépréciée, ce serait bien de passer à PDO ou mysqli.