Отправка данных с использованием метода GET работает неправильно.

Вопрос или проблема

Я использую WP 3.5.2 и WPMU. Я разрабатываю одну страницу http://baohiem.info/chon-mat-gui-vang.
Эта страница использует глобальный $wpdb для запроса таблицы _blogs. (_blogs была настроена, добавлены некоторые поля.)
Когда я отправляю форму, я использую метод GET, но когда я вхожу в систему, у меня есть данные ($_REQUEST; $_GET), но при отсутствии входа данных нет.
Почему? Я не понимаю, что происходит.
Может кто-нибудь помочь?

Спасибо.

<?php
get_header(); 
?>

        <form action="" method="get">
            <input id="searchfield-cmgv" type="text" name="hoten" placeholder="ФИО консультанта...." size="35" value="<?=$_REQUEST['hoten']?>"/>
            <!-- место-->
            <select name="location">
                <option value="">-------- Область/Город --------</option>
                <option value="Ханой" <?php if($_REQUEST['location']=='Ханой') echo 'selected';?> >Ханой</option>
                <option value="Хошимин" <?php if($_REQUEST['location']=='Хошимин') echo 'selected';?> >Хошимин</option>
                <!-- <option value="Хюэ" <?php if($_REQUEST['location']=='Хюэ') echo 'selected';?> >Хюэ</option>-->
                <option value="Дананг" <?php if($_REQUEST['location']=='Дананг') echo 'selected';?> >Дананг</option>
                <option value="Хайфонг" <?php if($_REQUEST['location']=='Хайфонг') echo 'selected';?> >Хайфонг</option>
                <option value="Донгнай" <?php if($_REQUEST['location']=='Донгнай') echo 'selected';?> >Донгнай</option>
                <!-- <option value="Донгтап">Донгтап</option>
                <option value="Гиа Лай">Гиа Лай</option> -->
                <option value="Хагьанг" <?php if($_REQUEST['location']=='Хагьанг') echo 'selected';?> >Хагьанг</option>
                <!-- <option value="Ханнам">Ханнам</option>
                <option value="Хатинь">Хатинь</option> -->
                <option value="Хай Дзянг" <?php if($_REQUEST['location']=='Хай Дзянг') echo 'selected';?> >Хай Дзянг</option>
                <option value="Нге Ан" <?php if($_REQUEST['location']=='Нге Ан') echo 'selected';?> >Нге Ан</option>
                <option value="Тхай Нгуен" <?php if($_REQUEST['location']=='Тхай Нгуен') echo 'selected';?> >Тхай Нгуен</option>
                <option value="Ен Бай" <?php if($_REQUEST['location']=='Ен Бай') echo 'selected';?> >Ен Бай</option>

           </select>
           <select name="company">
               <option value="">-------- Компания --------</option>
               <option value="Prudential" <?php if($_REQUEST['company']=='Prudential') echo 'selected';?> >Prudential</option>
               <option value="Manulife" <?php if($_REQUEST['company']=='Manulife') echo 'selected';?> >Manulife</option>
               <option value="AIA" <?php if($_REQUEST['company']=='AIA') echo 'selected';?> >AIA</option>
               <option value="Dai-ichi Life" <?php if($_REQUEST['company']=='Dai-ichi Life') echo 'selected';?> >Dai-ichi Life</option>
               <option value="ACE Life" <?php if($_REQUEST['company']=='ACE Life') echo 'selected';?> >ACE Life</option>
               <option value="Bảo Việt" <?php if($_REQUEST['company']=='Bảo Việt') echo 'selected';?> >Bảo Việt</option>
               <option value="Hanwha Life" <?php if($_REQUEST['company']=='Hanwha Life') echo 'selected';?> >Hanwha Life</option>
               <option value="Generali" <?php if($_REQUEST['company']=='Generali') echo 'selected';?> >Generali</option>
               <option value="Chưa có" <?php if($_REQUEST['company']=='Chưa có') echo 'selected';?> >Chưa có</option>
           </select>
            <input type="hidden" value="true" name="confirm" />
           <input id="searchbutton" value="Поиск" type="submit">
        </form>
        
           <?php
           global $wpdb;

            // получение информации о компании, ФИО, местоположении
            $company = $_GET['company'];
            $hoten = $_GET['hoten'];
            $location = $_GET['location'];

        if(!$company && !$hoten && !$location){

                // строковый запрос
                $strquery = '
                                        SELECT bh_blogs.blog_id
                                        FROM bh_blogs
                                        WHERE bh_blogs.blog_id >1
                                        AND bh_blogs.deleted =0
                                        ORDER BY bh_blogs.voted DESC        
                ';

                // получение результата
                $res = $wpdb->query($strquery);

                // отображение результата
                //
                //
        } else {
           //var_dump($location); var_dump($company); var_dump($hoten);
            $strquery = '
                SELECT bh_blogs.blog_id
                FROM bh_blogs
                WHERE bh_blogs.blog_id > 1 AND bh_blogs.deleted =0 ';

            if($hoten!='') $strquery .= ' AND bh_blogs.site_name LIKE "%'.$hoten.'%" ';
            if($company!='') $strquery .= ' AND bh_blogs.company="'.$company.'" ';
            if($location!='') $strquery .= ' AND bh_blogs.location="'.$location.'" ';

            $strquery .= ' ORDER BY bh_blogs.voted DESC ';

            //отображение результата
            //
            //
        }  

    get_footer(); 
?>

URL: http://baohiem.info/chon-mat-gui-vang/?hoten=&location=Хай+Фонг&company=Prudential не работает.
Я не могу получить [‘location’], [‘hoten’], [‘company’]


Решено:
Я использую плагин Better WP Security, и он фильтрует мой URL.

Чтобы разрешить передачу параметров, таких как: example.com?src=SomeSource&page=1…..
Войдите в свою ACP. Better WP Security/System Tweak и снимите галочку с опции “Фильтровать подозрительные строки запроса”.

Примечание: уделите внимание безопасности ваших параметров для вашего сайта 🙂

С Рождеством.

Ваш вопрос немного неясен. Какую конкретную информацию вы пытаетесь получить и можете ли вы привести пример кода?
Информация для входа задается через cookie, так что, возможно, это то, что вам нужно?
Это используется только для /wp-admin/ и хешируется, так что это может не работать для вашего примера.

Смотрите здесь для получения дополнительной информации: http://codex.wordpress.org/WordPress_Cookies

Ответ или решение

Отправка данных с использованием метода GET, которое не работает правильно: Проблемы и пути их решения

Введение

При разработке веб-страниц с использованием метода GET в PHP, особенно в контексте WordPress, могут возникать различные проблемы. Рассмотрим ситуации, с которыми вы столкнулись на странице с адресом http://baohiem.info/chon-mat-gui-vang. Вы упомянули, что при отправке формы данные доступны в массиве $_REQUEST и $_GET, когда вы вошли в систему, но по непонятной причине они недоступны при отсутствии входа в систему.

Возможные причины проблемы

  1. Фильтрация параметров URL:
    Вы выяснили, что установленный плагин Better WP Security фильтрует ваши URL-параметры. Эта проблема часто возникает из-за настроек безопасности, которые блокируют подозрительные строки запроса. Вы можете обратиться к административной панели (ACP) и изменить настройки фильтрации:

    • Перейдите в раздел Better WP SecuritySystem Tweaks.
    • Снимите отметку с параметра "Filter Suspicious Query Strings".

    Важно обеспечивать безопасность сайта, поэтому действуйте осторожно и протестируйте новые настройки.

  2. Настройки сервера:
    Возможно, существуют ограничения конфигурации сервера, которые могут блокировать определенные запросы. Проверьте настройки .htaccess и конфигурации вашего сервера, чтобы исключить такие проблемы.

  3. Ошибки в коде:
    Хотя ваш код в целом выглядит правильно, стоит убедиться, что переменные, передаваемые через GET, правильно обрабатываются. Например, использование $_REQUEST['var'] может не обеспечить доступ к значениям в случае, если конфигурация PHP предотвращает это. Вместо этого используйте $_GET['var'], чтобы гарантировать, что данные будут корректно извлечены.

    Пример:

    $hoten = isset($_GET['hoten']) ? $_GET['hoten'] : '';
    $location = isset($_GET['location']) ? $_GET['location'] : '';
    $company = isset($_GET['company']) ? $_GET['company'] : '';
  4. Кэширование:
    Убедитесь, что кэш вашего веб-сервера или кэширование на уровне браузера не мешает передаче данных. Очистите кэш и повторите попытку.

Рекомендации по улучшению

  1. Проверка на сервере: Добавьте обработку ошибок, чтобы видеть, какие данные поступают на сервер. Например, используйте var_dump($_GET) для отладки.

  2. Проверка безопасности данных: Используйте функции валидации и обработки данных, чтобы избежать проблем безопасности, таких как SQL-инъекции. Подумайте о том, чтобы использовать предварительно подготовленные выражения для работы с базой данных.

  3. Использование пользовательских фильтров: Если вы разрабатываете сложные формы, рассмотрите возможность использования AJAX для отправки данных, что может повысить удобство пользования и избежать таких проблем.

Заключение

Выявление и устранение проблем с передачей данных через метод GET требует тщательного анализа. В вашем случае основная проблема заключалась в плагине, который фильтровал параметры URL. После отключения этого параметра вы должны снова проверить работу формы. Не забывайте тщательно тестировать любые изменения в настройках безопасности, чтобы избежать потенциальных рисков.

Если возникнут дальнейшие вопросы или сложности, не стесняйтесь обращаться за помощью или консультацией.

Оцените материал
Добавить комментарий

Капча загружается...