[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбор записей из БД по массиву
Страницы: 1, 2
itfarms
Здравствуйте. Есть такая проблема: файлу передается методом POST строка вида

1.4.5.10,

где числа - это идентификаторы категорий статей. Обрабатываю:

include("settings.php");

$mass = $_POST['mass'];
$array = explode(".",$mass);

$query = mysql_query("SELECT * FROM `articles`
WHERE category IN ('"
.$array."')") or die($db_error);
echo mysql_num_rows($query);;


Ничего не получается. Где я ошибаюсь?
walerus
Цитата
Ничего не получается

А что получается?, что в переменной POST приходит?, а если в ПОСТ придет пробел? и т.д., в начало страницы добавь показ ошибок... или логирование в файл...

зы: имена таблицы, колонок и т.д. обрамляем апострофом, т.е. :

$query = mysql_query("SELECT * FROM `articles` WHERE `category` IN ('".$array."')") or die($db_error);
depp
Цитата (itfarms @ 9.03.2017 - 23:21)
Где я ошибаюсь?

везде.

почему нет обработки от инъекции?
почему в запрос идет массив вместо строки?
какая разница между explode и implode?
itfarms
depp
Мне пока главное понять, где ошибка.
Если я правильно понимаю, explode создает массив из строки, implode действует в обратном направлении.
Правильно ли я понимаю, что должен искать в получаемой строке $mass?

Мне необходимо отобрать все статьи, где категория попадает в переданный массив значений huh.gif

walerus
В POST приходит все хорошо, но запрос дает нулевой результат, то есть он в БД ничего не находит.
Игорь_Vasinsky
include("settings.php");

$mass = $_POST['mass'];
//из строки в массив
$array = explode(".",$mass);
//убрали пробелы, если вдруг
$array = array_map("trim", $array);
//привели все данные в массиве к типу Integer- чтоб не одна мышь!
$array = array_map("integer", $array);

//обратно в строку, но чистую
$string = implode(",", $array);

$query = mysql_query("SELECT * FROM `articles` WHERE category IN (".$string.")");

if(!$query){
//во время разработки можешь смотреть echo $mysql_error();
//в работу - только сообщения об сбое + логирование - никаких подробностей для посетителей

}
else{
echo mysql_num_rows($query);
}



намного практичней принимать массив номеров статей - чтоб не гонять туда-сюда

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Valick
Игорь_Vasinsky, по хорошему $_POST['mass'] уже должен приходить массивом


_____________
Стимулятор ~yoomoney - 41001303250491
itfarms
Игорь_Vasinsky

$array = array_map("integer", $array);


Здесь ругается, я заменил на
$array = array_map("intval", $array);


Надеюсь, я прав.

Но после выполнения запроса, возвращает только одно значение :huh:
Игорь_Vasinsky
ой пардоньте) действительно intval()

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
Цитата
Игорь_Vasinsky, по хорошему $_POST['mass'] уже должен приходить массивом

Цитата

намного практичней принимать массив номеров статей - чтоб не гонять туда-сюда



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
itfarms
Не могу понять, почему он возвращает всего одно значение, хотя переменная $string принимает верное значение?

И еще такой вопрос: если id=2, а в строке есть, и 2, и 22, это не вызовет какой-нибудь конфликт?
Игорь_Vasinsky
нет оператор IN будет брать каждое значение из перечисленных и сравнивать его с теме что в БД, это же не LIKE ))

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
itfarms
У меня в БД две записи: у одной категория - 1, у второй - 2. При таком раскладе запрос выдает всего один результат, если сделать у записей одну категорию, выводит две записи. В чем тут может быть дело:?
Kusss
$sql = "SELECT * FROM `articles` WHERE category IN (".$string.")";
echo '<br>'.$sql;
$query = mysql_query($sql);

запостите сюда строку запроса.
itfarms
Kusss
Получается, вот такая строка

SELECT * FROM `articles` WHERE `category` IN (1,3,4,5,6,7,8,9,10)
Kusss
Все нормально.
Если эту строку выполнить в phpmyadmin - результатом будет несколько строк или одна ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.