Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 18.08.2017, 12:15
Новичок на форуме
Отправить личное сообщение для griga Посмотреть профиль Найти все сообщения от griga
 
Регистрация: 18.08.2017
Сообщений: 8

мы на верном пути!
Теперь в теге
<select>
выдается валидное количество опций подкатегорий, но все они называются
Код:
[object Object]
Ответить с цитированием
  #32 (permalink)  
Старый 18.08.2017, 12:25
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

griga, посмотри, что передается функции «fillSubcatList», в начало этой функции засунь это:
console.log(elements);
Ответить с цитированием
  #33 (permalink)  
Старый 18.08.2017, 12:48
Новичок на форуме
Отправить личное сообщение для griga Посмотреть профиль Найти все сообщения от griga
 
Регистрация: 18.08.2017
Сообщений: 8

Nexus,
Вот сейчас вообще не понял(((
Снова выдает ошибку на строке
var Subcategories=JSON.parse(HTTPReq.responseText);

Ошибка:
Uncaught SyntaxError: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at XMLHttpRequest.HTTPReq.onreadystatechange

Команда
echo json_encode($output);

в файле page.php возвращает следующий результат:
[{"9":"\u0420\u0430\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u043a\u0430"},{"14":"\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438"},{"16":"\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442"}]
Ответить с цитированием
  #34 (permalink)  
Старый 18.08.2017, 12:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

griga,
в page.php while замените на это и все будет работать:
while($row=$result->fetch_assoc()){
    $output[$row['id']]=addslashes($row['subcategory']);
};
Ответить с цитированием
  #35 (permalink)  
Старый 18.08.2017, 13:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Nexus
addslashes($row['subcategory']);
Зачем?
Ответить с цитированием
  #36 (permalink)  
Старый 18.08.2017, 13:16
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Сообщение от laimas Посмотреть сообщение
Зачем?
согласен, нужно убрать «addslashes».
Ответить с цитированием
  #37 (permalink)  
Старый 18.08.2017, 13:28
Новичок на форуме
Отправить личное сообщение для griga Посмотреть профиль Найти все сообщения от griga
 
Регистрация: 18.08.2017
Сообщений: 8

Итак,
Теперь код page.php выглядит так:
if(!array_key_exists('category', $_GET)) die();

include('scripts/connect.php');

$query = "SELECT id, subcategory FROM expenses_cat WHERE category='" . $_GET['category'] . "' AND inmenu = 1";
$result = $conn->query($query);
$output = array();

while($row=$result->fetch_assoc()){
    $output[$row['id']]=$row['subcategory'];
};

echo json_encode($output);
exit;

Если заменить $_GET['category'] на одно из реальных значений категории, на выходе получаем данные типа
{"9":"\u0420\u0430\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u043a\u0430","14":"\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438","16":"\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442"}

В самой же форме при выборе категории консоль отображает ошибку на строке
var Subcategories=JSON.parse(HTTPReq.responseText);

VM3836:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at XMLHttpRequest.HTTPReq.onreadystatechange

Может проблема кроется в передаче данных на обработку посредством $_GET?
Ответить с цитированием
  #38 (permalink)  
Старый 18.08.2017, 13:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Nexus,
сервер отдает валидный json, а убрать кодирование многобайтных строк можно начиная с версии 5.4 опцией JSON_UNESCAPED_UNICODE.

Ошибка на клиенте потому, что до передачи json есть еще вывод в браузер.
Ответить с цитированием
  #39 (permalink)  
Старый 18.08.2017, 13:47
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Сообщение от laimas
сервер отдает валидный json, а убрать кодирование многобайтных строк можно начиная с версии 5.4 опцией JSON_UNESCAPED_UNICODE.
Сейчас - да, валидный, ранее - инвалидный, в посте №29 это видно.
Можно воспользоваться опцией, а можно убрать экранирование.
(Версия PHP вопрощающего неизвестна, а проверять её в коде - глупость.)

griga,
Сообщение от laimas
Ошибка на клиенте потому, что до передачи json есть еще вывод в браузер.
+ смотри пост №30:
$category=$conn->real_escape_string($_GET['category']);
$query = "SELECT id, subcategory FROM expenses_cat WHERE category='".$category."' AND inmenu = 1";

Сообщение от Nexus
PS. Рекомендую почитать статьи про SQL-инъекции, как минимум.
Статей по этой теме полно, вот первая попавшаяся: https://habrahabr.ru/post/148151/
Ответить с цитированием
  #40 (permalink)  
Старый 18.08.2017, 14:08
Новичок на форуме
Отправить личное сообщение для griga Посмотреть профиль Найти все сообщения от griga
 
Регистрация: 18.08.2017
Сообщений: 8

Сообщение от Nexus Посмотреть сообщение
$category=$conn->real_escape_string($_GET['category']);
$query = "SELECT id, subcategory FROM expenses_cat WHERE category='".$category."' AND inmenu = 1";
поправил, но на ошибку никак не влияет.
Что касается среды: локальный сайт на OpenServer:
Apache-PHP-7
PHP 7.0
MySQL 5.6

P.S. Про инъекции почитаю обязательно. Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск