#php #url
#php #url
Вопрос:
Это моя функция, я просто хочу вывести ссылку, подобную этой:
www.example.com/new?cat=22,23,27
Если значение категории уже существует, я хочу его удалить. Если она еще не существует, я хочу ее добавить.
Это моя функция:
function setorunset($value) {
if(isset($_GET['cat'])) { //wenn schon eine categorie da ist
if(strpos($value,$_GET['cat']) === false ) {
$_GET['cat'] .= ",".$value; }
else {
str_replace(",".$value, ",", $_GET['cat']);
}
echo http_build_query($_GET);
}
else {
echo http_build_query($_GET).'amp;cat='.$value;
}
}
Я просто не могу найти ошибку, почему это не должно работать:
Я вызываю эту функцию с:
setorunset(22);
Кто-нибудь нашел какую-нибудь ошибку?
Комментарии:
1. добавьте некоторую информацию. например, выходные данные
var_dump($_GET)
, чтобы мы могли видеть, что произойдет. Также —I simply cant find the error why this shouldnt work
Какая ошибка? Каков результат?2. Привет, если я нажимаю на ссылку более одного раза, она всегда добавляет 22: www.example.com/?cat=22 ,22,22,22
Ответ №1:
Не используйте strpos()
для этого. Если у вас есть cat=101,11
и вы вызываете setorunset(10)
, это будет соответствовать 10
in 101
.
Вместо этого используйте explode()
для создания массива из значения, обновите массив, а затем используйте implode()
для создания нового значения.
function setorunset($value) {
if(isset($_GET['cat'])) { //wenn schon eine categorie da ist
$cat = explode(',', $_GET['cat']);
$pos = array_search($value, $cat);
if ($pos === false) {
$cat[] = $value;
} else {
unset($cat[$pos]);
}
$_GET['cat'] = implode(',', $cat);
}
else {
$_GET['cat'] = $value;
}
echo http_build_query($_GET);
}
Комментарии:
1. Проблема с этим решением заключается в том, что если я добавляю функцию дважды на свою страницу, для более чем одной ссылки она добавляет 22 два раза — www.example.com/?cat=2222
2. Извините, я забыл
,
вimplode
.3. Извините, если я вызову эту функцию с разными значениями на одной странице, она добавит все значения в переменную GET. например, я вызываю setorunset(22), он будет отображать /?cat = 22 , если я вызываю setorunset(23), строка после него будет отображать /?cat = 22,23, НО вместо этого она должна отображать /?cat = 23. Есть предложения? Извините, плюс к моему вопросу выше 😉
4. Вы сказали, что если категория уже существует, ее следует удалить, если она не существует, ее следует добавить. Так что это правильное поведение.