проблема с добавлением параметров URL в переменную $ _GET с разделением запятыми

#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. Вы сказали, что если категория уже существует, ее следует удалить, если она не существует, ее следует добавить. Так что это правильное поведение.