Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Множественный выбор (https://javascript.ru/forum/misc/68638-mnozhestvennyjj-vybor.html)

Sakhet 28.04.2017 17:32

К сожалению, первый вариант в адресной строке выдает:
?tag1=Тег1&tag2=Тег2


а второй
Просит подтверить действие "cat=1&tag=Тег2+Тег3" и ничего не происходит потом.

Sakhet 28.04.2017 17:35

Цитата:

А о том, что сервер должен проверять данные извне, а вы таким образом усложняете проверку пришедших данных, вы не думали?
Скрипт будет встроен в шаблон Wordpress, и всё, что от него (WP) требуется, это обработать запрос. Если ручками прописать в адресной строке то, что я написала вверху, всё работает. Т.е. сам WP понимает такой запрос, а вот как это автоматизировать для конечного пользователя сайта - неизвестно :(

laimas 28.04.2017 18:14

Да дело то не в запросе, а в проверке данных, то есть я могу отправить и такое cat=1&tag=труля-ля+опа-на, такое будет корректно?

Dilettante_Pro 28.04.2017 18:22

Цитата:

Сообщение от Sakhet (Сообщение 451292)
К сожалению, первый вариант в адресной строке выдает:
?tag1=Тег1&tag2=Тег2


а второй
Просит подтверить действие "cat=1&tag=Тег2+Тег3" и ничего не происходит потом.

Не может быть.
Первый вариант
cat=1&tag=Тег1+Тег2
Что-то не так скопировали из примера.
Я проверял комплексную работу на макете
HTML
<!DOCTYPE html>
<html>
<head>
    <title>Test Tags</title>
</head>
<body>
<form>
   Тег 1<input type="checkbox" name="tag1" value = "Тег1"><br>
   Тег 2<input type="checkbox" name="tag2" value = "Тег2"><br>
   Тег 3<input type="checkbox" name="tag3" value = "Тег3"><br>
   <input type="submit" value="Отправить">
</form>
<script>
    document.querySelector('form').onsubmit = function (e) {
        e.preventDefault();
        var data = "cat=1&tag=";
        var boxes = document.querySelectorAll('input[type="checkbox"]:checked');
        for (var i = 0; i < boxes.length; i++) {
            data += (i == 0 ? "" : "+") + boxes[i].value;
        }
         var req = new XMLHttpRequest();
        req.open("GET", "test.php/?" + data, true);
        req.addEventListener("load", function () {
            alert("Done: " + req.responseText);
        });
        req.send(null);
    }
</script>
</body>
</html>

test.php
<?php
$tag="NoTag"; 
if(isset($_GET['tag'])) {
 $tag=$_GET['tag'];
 }
echo   $tag ;
?>


И все прекрасно отрабатывает.
По второму варианту: Кто просит подтвердить действие?
Что делает обработчик запроса на сервере?

Sakhet 28.04.2017 18:59

Цитата:

Да дело то не в запросе, а в проверке данных, то есть я могу отправить и такое cat=1&tag=труля-ля+опа-на, такое будет корректно?
Да, если есть теги "труля-ля" "опа-на". Поставьте себе Wordpress куда-нибудь и вы сами увидите. Я не обманываю.


Вот ошибка, её показывает браузер.


Дальше я подтверждаю действие и ничего. Вообще ничего.
Тестирую не на сервере, а на своем компьютере в браузере. Но сервер мне тут и не нужен, т.к. javascript исполняется в брауере у клиента, и уже дальше отправляет нужный запрос.

Вот, к примеру я пробовала так сделать:

<form action="http://localhost/wp/" method="get">
<div><select  name='cat' id='category' class='postform' >
	<option value='0'>Выберите категорию</option>
	<option value="1">Категория 1</option>
	<option value="2">Категория 2</option>
</select>
<select name="tag">
	<option value=''>Выберите тэг</option>
	<option value="tag1">Тэг1</option>
	<option value="tag2">Тэг2</option>
	<option value="tag3">тэг3</option>
</select>
<input type="submit" value="Submit">
</div></form>


И такой вариант работает прямо в браузере, но WP ищет только по одной категории и одному тэгу. А вот, чтобы по одной категории и нескольким тегам, нужно разделять их плюсами. И вот сделать так, чтобы были "+" не получается.

Если добавить в мой код еще раз:

<select name="tag">
	<option value=''>Выберите тэг</option>
	<option value="tag1">Тэг1</option>
	<option value="tag2">Тэг2</option>
	<option value="tag3">тэг3</option>
</select>


То форма выдаст в адресную строку: http://localhost/wp/?cat=1&tag=1&tag=2

Такой вариант тоже работает в WP, но ищет как попало. С плюсами же, ищет как надо.

laimas 28.04.2017 19:12

Цитата:

Сообщение от Sakhet
Да, если есть теги "труля-ля" "опа-на". Поставьте себе Wordpress куда-нибудь и вы сами увидите. Я не обманываю.

Wordpress, это просто CMS, он также обязан проверять входные данные, что и делает. Если это допускает ввод любого что угодно, тогда нет вопросов.

Sakhet 28.04.2017 19:22

Допускает ввод того, что я написала в первом сообщении. Не о нем речь. Всё, что нужно, это сформировать строчку с запросом в браузере.

Sakhet 28.04.2017 19:26

Я пробовала вот этот вариант. Не работает, а переделать я не знаю как, т.к. не знаю языка.

Находила вот такой вариант, но куда его засунуть никто нигде не пишет.

laimas 28.04.2017 19:42

Цитата:

Сообщение от Sakhet
Находила вот такой вариант, но куда его засунуть никто нигде не пишет.

Это РНР код, на клиента его не вставить. Причем этот код куда разумнее, так как он получает массив данных $_POST['tags'], который и проверить проще, и если уж надо "склеить", то тоже не сложно. Только вот вопрос как производится выборка по тегам и нужно ли "склеивать".

Sakhet 28.04.2017 20:49

Я не понимаю, что значит склеивать. И куда вставлять код я так и не поняла. В шаблон, в плагин, в код WP?


Часовой пояс GMT +3, время: 02:52.