2009-10-09 7 views
1

J'ai un formulaire de recherche, je veux $ _REQUEST les termes de recherche comme un tableau afin que je puisse lister chaque terme de recherche, enveloppant chaque terme dans un intervalle de style. Comment je fais ça?

Modifier: Voici le code demandé.

<form action="http://localhost/wordpress" id="search" method="get"> 
<input type="text" size="30" id="s" name="s" value="Type and hit enter" onfocus="javascript:this.value='';" onblur="javascript:this.value='Type and hit enter';"/> 
<br/> 
<input type="submit" value="Search"/> 
</form> 

Mise à jour: Merci les gars pour les réponses. Je vais utiliser exploser, cela semble assez simple. De plus le nom sonne bien ^^

+2

Le contenu de $ _REQUEST dépend de la structure de votre formulaire. Postez votre formulaire afin que nous puissions voir ce que vous faites. – dnagirl

+1

$ _REQUEST est déjà un tableau associatif. Que voulez-vous dire exactement? Pourriez-vous montrer du code? –

+2

Notez qu'il est plus sûr d'utiliser $ _POST directement si vous avez affaire à une requête POST. – slikts

Répondre

4

Dans la forme:

<input type="text" name="terms[]" /> 
<input type="text" name="terms[]" /> 
<input type="text" name="terms[]" /> 

Dans le processeur de forme:

<? foreach($_REQUEST['terms'] as $term) { ?> 
    <span style="searchterm"><?= htmlspecialchars($term) ?></span> 
<? } ?> 
+0

Depuis que vous l'avez posté, la question a été modifiée pour ajouter un exemple. – Powerlord

0

Dans votre élément de formulaire HTML, vous pouvez attribuer le nom à un tableau, comme celui-ci :

<select id="MySelect" multiple="multiple" name="SearchTerms[]" class="MyClass"> 
    ... 
</select> 

puis lorsque vous traitez avec la forme après la soumission que vous pouvez faire quelque chose comme:

<?php 
    foreach($_REQUEST['SearchTerms'] as $SearchTerm) 
    { 
     Print("<span class=\"SearchTerm\">$SearchTerm</span>"); 
    } 
?> 
2

Je figure que vous souhaitez que l'utilisateur d'avoir une seule entrée d'entrée, que vous souhaitez ensuite diviser en un réseau de recherche séparée termes. Divisez votre entrée sur les espaces (en traitant les caractères blancs consécutifs comme un seul) pour en déduire des termes séparés.

Par exemple:

$termList = preg_split("/\s+/", trim($_REQUEST['s'])); 
foreach($termList as $term) { echo "<span>".htmlspecialchars($term)."</span>\n"; } 

Ofcourse n'oubliez pas de filtrer et échapper à l'entrée avant de l'utiliser.

2

Si vous souhaitez que l'utilisateur saisisse plusieurs termes de recherche dans des contrôles d'entrée distincts, les réponses ci-dessus devraient vous être utiles. Cependant, votre exemple de formulaire me conduit à me demander si vous souhaitez utiliser une seule zone de texte de saisie de phrase de recherche. Si c'est le cas, cela pourrait être ce que vous cherchez:

<?php 
    $searchTerms = preg_split("/[\s,]+/", $_REQUEST['SearchTerms']); 

    foreach($searchTerms as $term) { ?> 
    <span class="term"><?= htmlentities($term) ?></span> 
<? 
    } 
?> 
1

Si vous voulez briser votre recherche par des symboles de l'espace juste essayer ce code:

<?php 
    $search_terms = explode(" ", $_REQUEST['s']); 
    foreach($search_terms AS $search_term_item) { 
    echo "<span class=\"SearchTerm\">".htmlspecialchars($search_term_item)."</span>"; 
    } 
?>