2013-07-23 3 views
0

У меня есть страница индекса, на которой включена страница поиска, и когда я отправляю ее, она передает значения find.php через сообщение о действии и методе. Код нижеКак сохранить значение пост-переменных

if($_POST['searchsubmit']=="Search"){ 
$cat=$_POST['searchcategory']; 
$area=$_POST['searcharea']; 
$term=$_POST['searchbox']; 
} 

выше код написан на find.php, сейчас, когда я пытаюсь реализовать подкачку через основной метод подкачки с, где условия, чтобы наши правила поискового запроса

$where="where approved='yes'"; 
     if($term!=""){ 
      $where.=" and name like '%$term%'"; 
     } 
     if($cat!=""){ 
      $where.=" and category like '%$cat%'"; 
     } 
     if($area!=""){ 
      $where.=" and area like '%$area%'"; 
     } 
     $start=0; 
     $end=5; 
     if($_GET['page']!="") 
     { 
      $start=$_GET['page']*$end; 
     } 

Где $ старт мой начальный предел, а $ end - это количество записей. Для первой страницы подкачки, я прохожу переменную страницу с 0 для первой страницы

<a href="find.php?page=<?php echo 0;?>">First</a> 

и мой поисковый запрос теперь становится

$que="select * from shops ".$where." ORDER BY likes DESC limit $start,$end"; 

Как только я нажимаю на «первый», Мой новый канал стать «/find.php?page=0» , а значения столбца, которые я выписал из строки поиска на индексной странице, теряются.

Есть ли способ сохранить эти значения? Два метода, которые, хотя я отправляю их снова через URL с помощью GET, или наоборот - хранить их в сеансе. Есть ли какой-либо третий способ?

+2

Вы уязвимы для [SQL-атак] (http://bobby-tables.com). НЕ ИСПОЛЬЗУЙТЕ ЭТОТ КОД, КАК ЕСТЬ. Чтобы сохранить ваши значения post, храните их в $ _SESSION, тогда они будут доступны для всех последующих загрузок страниц. –

+2

http: // xkcd.com/327/ – GordonM

+0

, так как вы жестко кодируете значение страницы, вы всегда будете на странице 0 (или сначала согласно вашей логике). – Maximus2012

ответ

1

Марк абсолютно прав. Не используйте код так, как есть.

В качестве альтернативного решения вашей проблемы -

  • Ваша страница index.php (форма поиска) представляет себе
  • Соберите свой поисковый запрос в строку запроса в index.php, если его пост
  • Перенаправить на find.php с собранным запросом
  • Каждая поисковая информация всегда будет в строке запроса.
  • Используйте свою разбивку на страницы счастливо.
+0

Хорошо, но я проиграл в «Перенаправление на find.php с собранным запросом», как это сделать? window.location = "find.php" , но как взять собранный запрос? – user2454340

+0

@ user2454340 Для перенаправления вы можете использовать функцию 'header' для php. Чтобы собрать запрос, вы можете просто пропустить переменные post и построить цепочку: // что-то вроде foreach ($ _ POST как $ key => $ val) { $ myquerystring = $ myquerystring. '&'. $ key. '='. $ val } – user2588578

0

Комментарии верны.

Использование:

// Start the session 
session_start(); 
// Save variables into session 
$_SESSION['somevalue'] = $_POST['value']; 

Затем, когда все вызовы страницы session_start она будет иметь доступ к $ _SESSION [ 'SomeValue']

Кроме того, вы широко открыты для инъекции SQL. Санируйте свои значения, чтобы никто не мог помещать произвольный код sql в строку. если вы используете MySQLi она должна, просто, как это:

// After connecting to the DB 
$_POST['somevalue' = $mysqli->real_escape_string($_POST['somevalue']); 

Тогда обязательно жёстко кавычки строковые значения, как вы делаете.

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

Надеюсь, это поможет.

+0

Теперь я использую обход phpmyadmin, и я думаю, что sanitize означает проверку данных перед использованием в запросе? – user2454340

+0

Да. Чтобы санировать, нужно убедиться, что запрос, который генерируется, делает то, что вы хотите, а не то, что хочет его хакер/ребенок. Если бы у меня был запуск скрипта, который сделал это: «SELECT * from mytable WHERE name = $ somevariable», он будет работать отлично. Но если пользователь делает $ somevariable равным; DROP mytable; то первая строка запроса просто выйдет из строя, а затем моя таблица будет DROP. Это простой пример, но он может и случится. mysqli_real_escape экранирует символы likei; «так что никто не может вырваться из запрошенного запроса с использованием этих специальных символов. – Bil1

+0

Просто переключился с ** MySQLi ** на ** PDO **, порекомендовал бы его. ** PDO :: prepare() ** * помогает предотвратите атаки SQL-инъекций, исключив необходимость вручную указывать параметры. * – Leo

Смежные вопросы