2010-05-05 3 views
0

Fondamentalement, je développe un (très) simple moteur de recherche. Vous pouvez entrer un terme de recherche et vous êtes redirigé vers la page de résultats, qui fonctionne correctement. Cependant, sur la page de résultats, j'ai un bouton qui vous mènera aux 10 résultats suivants: où $ term est la valeur de $ _POST ['term'].Problème de transmission de chaînes avec PHP post

echo "<input type='hidden' name='term' value='" . $term . "'>"; 

Cela provoque le problème suivant le terme est par exemple « Aidan ». Lorsque vous cliquez sur le bouton 10 suivant, le terme devient «helpan» et aucun autre résultat n'est trouvé.

Je ne fais rien à $ terme.

J'utilise généralement Java, mais je dois utiliser PHP pour cette tâche!

Toute aide serait grandement appréciée.

Répondre

0

Si vous utilisez des guillemets, vous n'avez pas à casser votre chaîne lorsque vous utilisez une variable. Vous pouvez également utiliser diverses options, telles que celles déjà mentionnées ou htmlentities() ou urlencode(). Je voudrais utiliser le plus tard, juste parce que. Donc, vous finiriez avec:

$term = urlencode($term); 
echo "<input type='hidden' name='term' value=\"$term\">"; 
0

Vous devez htmlspecialchars()chaque bit de données que vous sortie à votre page. Une installation comme la vôtre est la raison pour laquelle tant de vulnérabilités XSS existent dans le monde, et vous ne devriez pas y contribuer.

echo "<input type='hidden' name='term' value='" . htmlspecialchars($term) . "'>"; 

Une fois que vous l'avez, vous n'aurez plus besoin de addslashes obscurs/quote escaping/whatever.

Pour rendre cela plus facile tout au long de votre code, définissez

function h($s) { htmlspecialchars($s); } 

echo "<input type='hidden' name='term' value='" . h($term) . "'>"; 
-1

Je pense que la meilleure façon est de ne pas mettre $ terme comme un champ caché du tout. Pour la pagination, vous pouvez conserver la mémoire du terme recherché dans la session.

+0

mauvaise idée. aucun des moteurs de recherche n'utilise des sessions pour transmettre une chaîne de recherche pour des raisons évidentes. –

+0

Quelles sont les raisons évidentes? Excusez ma question naif, mais je ne vois pas de problèmes avec ça. – Andrea

0

La fonction que vous recherchez est htmlspecialchars(). Toutefois, pour que cela fonctionne, vous devez utiliser des guillemets pour envelopper le paramètre. De plus, s'il y a des barres obliques, la fonction stripslashes() peut être nécessaire.

Alors:

$term = htmlspecialchars(stripslashes($term)); 

echo '<input type="text" name="term" value="' . $term . '" >'; 
0
  1. Toujours utiliser la méthode GET pour la recherche, pas de poste.
  2. Désactivez les guillemets magiques ou supprimez les barres manuellement
  3. Utilisez htmllspecialchars avec le paramètre ENT_QUOTES pour coder la valeur du champ du formulaire.
  4. Tenir compte pour imprimer du HTML comme, ne pas utiliser l'écho de PHP, pour se débarrasser de tout cela cite engouement
  5. partie la plus importante. Si vous citez votre terme pour la recherche dans la base de données, n'utilisez pas de variable entre guillemets dans votre formulaire.

si

if (isset($_GET['term'])) { 
    if (get_magic_quotes_gpc()) $_GET['term'] = stripslashes($_GET['term']); 
    //$term=mysql_real_escape_string($_GET['term']); 
    //perform search here. 
    // 
    $term = htmlspecialchars($_GET['term'],ENT_QUOTES); //from $_GET again 
    ?> 
    <input type="hidden" name="term" value="<?php echo $term?>"> 
    <? 
}