Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Выбор записей из БД по массиву
itfarms  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 43907
На форуме: 3 месяца, 19 дней
Карма:




Здравствуйте. Есть такая проблема: файлу передается методом 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);;


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

Это сообщение отредактировал itfarms - 9.03.2017 - 23:21
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2333
Пользователь №: 26852
На форуме: 6 лет, 3 месяца, 10 дней
Карма: 127




Цитата
Ничего не получается

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

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

$query = mysql_query("SELECT * FROM `articles` WHERE `category` IN ('".$array."')") or die($db_error);
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
depp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 388
Пользователь №: 40589
На форуме: 2 года, 6 месяцев, 22 дня
Карма: 22




Цитата (itfarms @ 9.03.2017 - 23:21)
Где я ошибаюсь?

везде.

почему нет обработки от инъекции?
почему в запрос идет массив вместо строки?
какая разница между explode и implode?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
itfarms  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 43907
На форуме: 3 месяца, 19 дней
Карма:




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

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

walerus
В POST приходит все хорошо, но запрос дает нулевой результат, то есть он в БД ничего не находит.

Это сообщение отредактировал itfarms - 10.03.2017 - 08:08
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




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 (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5625
Пользователь №: 35718
На форуме: 4 года, 7 месяцев, 6 дней
Карма: 173




Игорь_Vasinsky, по хорошему $_POST['mass'] уже должен приходить массивом


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
itfarms  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 43907
На форуме: 3 месяца, 19 дней
Карма:




Игорь_Vasinsky

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


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


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

Но после выполнения запроса, возвращает только одно значение :huh:
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




ой пардоньте) действительно intval()


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




Цитата
Игорь_Vasinsky, по хорошему $_POST['mass'] уже должен приходить массивом

Цитата

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



--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
itfarms  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 43907
На форуме: 3 месяца, 19 дней
Карма:




Не могу понять, почему он возвращает всего одно значение, хотя переменная $string принимает верное значение?

И еще такой вопрос: если id=2, а в строке есть, и 2, и 22, это не вызовет какой-нибудь конфликт?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




нет оператор IN будет брать каждое значение из перечисленных и сравнивать его с теме что в БД, это же не LIKE ))


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
itfarms  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 43907
На форуме: 3 месяца, 19 дней
Карма:




У меня в БД две записи: у одной категория - 1, у второй - 2. При таком раскладе запрос выдает всего один результат, если сделать у записей одну категорию, выводит две записи. В чем тут может быть дело:?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1571
Пользователь №: 28976
На форуме: 5 лет, 10 месяцев, 27 дней
Карма: 99




$sql = "SELECT * FROM `articles` WHERE category IN (".$string.")";
echo '<br>'.$sql;
$query = mysql_query($sql);

запостите сюда строку запроса.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
itfarms  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 43907
На форуме: 3 месяца, 19 дней
Карма:




Kusss
Получается, вот такая строка

SELECT * FROM `articles` WHERE `category` IN (1,3,4,5,6,7,8,9,10)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1571
Пользователь №: 28976
На форуме: 5 лет, 10 месяцев, 27 дней
Карма: 99




Все нормально.
Если эту строку выполнить в phpmyadmin - результатом будет несколько строк или одна ?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса