Вопрос или проблема
Я использую 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
, когда вы вошли в систему, но по непонятной причине они недоступны при отсутствии входа в систему.
Возможные причины проблемы
-
Фильтрация параметров URL:
Вы выяснили, что установленный плагин Better WP Security фильтрует ваши URL-параметры. Эта проблема часто возникает из-за настроек безопасности, которые блокируют подозрительные строки запроса. Вы можете обратиться к административной панели (ACP) и изменить настройки фильтрации:- Перейдите в раздел Better WP Security → System Tweaks.
- Снимите отметку с параметра "Filter Suspicious Query Strings".
Важно обеспечивать безопасность сайта, поэтому действуйте осторожно и протестируйте новые настройки.
-
Настройки сервера:
Возможно, существуют ограничения конфигурации сервера, которые могут блокировать определенные запросы. Проверьте настройки.htaccess
и конфигурации вашего сервера, чтобы исключить такие проблемы. -
Ошибки в коде:
Хотя ваш код в целом выглядит правильно, стоит убедиться, что переменные, передаваемые через GET, правильно обрабатываются. Например, использование$_REQUEST['var']
может не обеспечить доступ к значениям в случае, если конфигурация PHP предотвращает это. Вместо этого используйте$_GET['var']
, чтобы гарантировать, что данные будут корректно извлечены.Пример:
$hoten = isset($_GET['hoten']) ? $_GET['hoten'] : ''; $location = isset($_GET['location']) ? $_GET['location'] : ''; $company = isset($_GET['company']) ? $_GET['company'] : '';
-
Кэширование:
Убедитесь, что кэш вашего веб-сервера или кэширование на уровне браузера не мешает передаче данных. Очистите кэш и повторите попытку.
Рекомендации по улучшению
-
Проверка на сервере: Добавьте обработку ошибок, чтобы видеть, какие данные поступают на сервер. Например, используйте
var_dump($_GET)
для отладки. -
Проверка безопасности данных: Используйте функции валидации и обработки данных, чтобы избежать проблем безопасности, таких как SQL-инъекции. Подумайте о том, чтобы использовать предварительно подготовленные выражения для работы с базой данных.
-
Использование пользовательских фильтров: Если вы разрабатываете сложные формы, рассмотрите возможность использования AJAX для отправки данных, что может повысить удобство пользования и избежать таких проблем.
Заключение
Выявление и устранение проблем с передачей данных через метод GET требует тщательного анализа. В вашем случае основная проблема заключалась в плагине, который фильтровал параметры URL. После отключения этого параметра вы должны снова проверить работу формы. Не забывайте тщательно тестировать любые изменения в настройках безопасности, чтобы избежать потенциальных рисков.
Если возникнут дальнейшие вопросы или сложности, не стесняйтесь обращаться за помощью или консультацией.