itfarms
9.03.2017 - 23:21
Здравствуйте. Есть такая проблема: файлу передается методом 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
10.03.2017 - 00:38
Цитата |
Ничего не получается |
А что получается?, что в переменной POST приходит?, а если в ПОСТ придет пробел? и т.д., в начало страницы добавь показ ошибок... или логирование в файл...
зы: имена таблицы, колонок и т.д. обрамляем апострофом, т.е. :
$query = mysql_query("SELECT * FROM `articles` WHERE `category` IN ('".$array."')") or die($db_error);
Цитата (itfarms @ 9.03.2017 - 23:21) |
Где я ошибаюсь? |
везде.
почему нет обработки от инъекции?
почему в запрос идет массив вместо строки?
какая разница между explode и implode?
itfarms
10.03.2017 - 08:06
deppМне пока главное понять, где ошибка.
Если я правильно понимаю, explode создает массив из строки, implode действует в обратном направлении.
Правильно ли я понимаю, что должен искать в получаемой строке $mass?
Мне необходимо отобрать все статьи, где категория попадает в переданный массив значений
walerusВ POST приходит все хорошо, но запрос дает нулевой результат, то есть он в БД ничего не находит.
Игорь_Vasinsky
10.03.2017 - 09:31
include("settings.php");
$mass = $_POST['mass'];
$array = explode(".",$mass);
$array = array_map("trim", $array);
$array = array_map("integer", $array);
$string = implode(",", $array);
$query = mysql_query("SELECT * FROM `articles` WHERE category IN (".$string.")");
if(!$query){
}
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
10.03.2017 - 09:39
Игорь_Vasinsky, по хорошему $_POST['mass'] уже должен приходить массивом
_____________
Стимулятор ~yoomoney - 41001303250491
itfarms
10.03.2017 - 10:20
Игорь_Vasinsky$array = array_map("integer", $array);
Здесь ругается, я заменил на
$array = array_map("intval", $array);
Надеюсь, я прав.
Но после выполнения запроса, возвращает только одно значение :huh:
Игорь_Vasinsky
10.03.2017 - 10:49
ой пардоньте) действительно 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
10.03.2017 - 10:50
Цитата |
Игорь_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
10.03.2017 - 11:08
Не могу понять, почему он возвращает всего одно значение, хотя переменная $string принимает верное значение?
И еще такой вопрос: если id=2, а в строке есть, и 2, и 22, это не вызовет какой-нибудь конфликт?
Игорь_Vasinsky
10.03.2017 - 11:11
нет оператор 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
10.03.2017 - 11:19
У меня в БД две записи: у одной категория - 1, у второй - 2. При таком раскладе запрос выдает всего один результат, если сделать у записей одну категорию, выводит две записи. В чем тут может быть дело:?
$sql = "SELECT * FROM `articles` WHERE category IN (".$string.")";
echo '<br>'.$sql;
$query = mysql_query($sql);
запостите сюда строку запроса.
itfarms
10.03.2017 - 11:40
Kusss
Получается, вот такая строка
SELECT * FROM `articles` WHERE `category` IN (1,3,4,5,6,7,8,9,10)
Все нормально.
Если эту строку выполнить в phpmyadmin - результатом будет несколько строк или одна ?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.