Многостраничная разметка PHP

89
8

Это мой HTML-код


<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>

PHP-код


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

Что я должен добавить после И для числа, чтобы запрос работал? Я попробовал foreach, но он не работал точно в запросе.

спросил(а) 2009-11-17T07:35:00+03:00 10 лет, 10 месяцев назад
1
Решение
57

Как насчет:

$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);

ответил(а) 2009-11-17T07:39:00+03:00 10 лет, 10 месяцев назад
57

что-то вроде этого, я полагаю,


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

implode документация


также, пожалуйста, не следует быть осторожным с тем, чтобы избегать данных, поступающих от пользователей, или ваш веб-сайт будет SQL-инъекция уязвима.

ответил(а) 2009-11-17T07:42:00+03:00 10 лет, 10 месяцев назад
41

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

поместите это в ваш цикл

ответил(а) 2009-11-17T07:38:00+03:00 10 лет, 10 месяцев назад
-6

Мой подход будет примерно таким:


<?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());
}
?>

ответил(а) 2009-11-17T07:56:00+03:00 10 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема