2009-11-17 5 views
0

Dropdown Ceci est mon html code partielPHP Multiple

<select name="number[]" style="width: 350px;" multiple="multiple" size="2"> 
<option value="one">one</option> 
<option value="two">two</option> 
<option value="three">three</option> 
<option value="four">four</option> 
</select> 

code PHP

$name = $_POST["name"]; 
$number= $_POST["number"]; 
$sql = mysql_query("SELECT * FROM users WHERE name LIKE '%$name%' AND "); 

Que dois-je ajouter après et pour le nombre de sorte que la requête va fonctionner? J'ai essayé foreach mais cela n'a pas fonctionné exactement dans la requête.

+0

WTF: comme downvoting bonnes réponses première fois – RageZ

+0

Il était pas de bonnes réponses. Ils laisseraient son site web ouvert sur la sécurité. – phidah

+1

@phidah: même si l'utilisateur a activé 'magic_quotes' ou quoi que ce soit + si chaque réponse doit signaler des problèmes de sécurité, la plupart des questions ne seraient pas prises en compte ... Je suis d'accord avec vous downvoting évidemment mauvaise réponse, après seulement la guerre et même downvoting choses approuvées par l'affiche est une question différente. – RageZ

Répondre

1

Que diriez-vous:

$name = $_POST["name"]; 
$number= $_POST["number"]; 

if(!is_array($number)){ 
    // some error message or what. 
} 

$squery = ''; 
$a = array(); 
foreach($number as $n){ 
    // do some validation for $n 
    // $number should be an array, so don't validate it. 
    $a[] = "`number` = '$n'"; 
} 
$squery = implode(' OR ',$a); 
unset($a); 

$query = "SELECT * FROM users WHERE `name` LIKE '%$name%' AND (".$squery.")"; 
$res = mysql_query($query); 
+0

Slick, merci –

+2

@UFOman: pouvez-vous upvote au moins le bon validé par la réponse de l'utilisateur n'aura pas de -1, tks à @phildah – RageZ

+1

Toujours ne contient pas de sortie d'échappement, donc mon -1 reste. – phidah

0
$number= $_POST["number"][i]; 

mettre ceci dans votre boucle

1

quelque chose comme ça je suppose

$sql = mysql_query("SELECT * FROM users WHERE name LIKE '%$name%' AND number IN (" . implode(',', $_POST['number']) . ')'); 

la documentation implode

aussi s'il vous plaît pas vous devriez faire attention à échapper les données provenant des utilisateurs ou votre site Web va être SQL injection vulnerable.

+0

@phidah: essayez-vous d'être un peu ayatollah ou? – RageZ

-2

Mon approche serait quelque chose comme ceci:

<?php 
if(is_array($_POST['number'])) 
{ 
    $numbers = implode("','", array_walk($_POST['number'],' mysql_real_escape_string'))); 
    $result = mysql_query("SELECT * FROM users WHERE name LIKE '%" . mysql_real_escape_string($name%) . "' AND number IN ('" . $numbers . "')") or die(mysql_error()); 
} 
?> 
+1

@phidah: pour l'enregistrement votre première réponse a utilisé 'addslashes' qui n'est pas un échappement correct – RageZ

+0

-1 pour le code désordonné. – mauris

+0

RageZ si vous pouviez laisser tomber le hetz Stackoverflow serait un meilleur endroit. Au moins, j'ai utilisé _any_ s'échapper initialement :) – phidah