2015-05-17 5 views
-1

У меня есть форма поиска, в результате которой результаты поиска. Каждый результат имеет идентификатор, соответствующий id в mysql. Чтобы получить полный результат за поле mysql, я использую ссылку для fullresult.php? Id = 569как перейти к следующему индексу в массиве?

При возврате результатов я помещаю все соответствующие идентификаторы в $ _SESSION ['идентификаторы'], которые выглядят следующим образом:

array(41) { 
    [0]=> 
    string(3) "569" 
    [1]=> 
    string(4) "1085" 
    [2]=> 
    string(3) "289" 
    [3]=> 
    string(3) "221" 

Когда я на странице, отображаемой fullresult.php? Id = 569, мне нужно создать ссылку на fullresult.php? Id = 1085.

Пытается зацикливать кошелек $ _SESSION ['ids'], пытаясь получить текущий индекс и перейти к следующему индексу, похоже, не работает. Или, по крайней мере, я не понимаю, как это сделать.

я в настоящее время сделать это:

$id_now = $_GET['id']; 
$liste_ids = $_SESSION['ids']; 
if(($ida_now = current($liste_ids)) !== FALSE){ 
    $nxt = next($liste_ids); 
    echo$nxt; 
} 

Проблема заключается в том, что в настоящее время ($ liste_ids) всегда является 569 (первый индекс => значение в $ liste_ids) и, следовательно, $ NXT всегда 1085.

То, что я хочу делать, когда я нахожусь на fullresult.php? Id = 1085, состоит в том, чтобы отыскать ** следующую ** строку $ liste_ids, чтобы возвратить 289 из $ liste_ids и так далее.

+1

Таким образом, вы получаете идентификатор через '$ _GET' и хотите распечатать ссылку со следующим id в массиве, * right *? Также покажите свои попытки. – Rizier123

+0

Я вижу здесь 3 вещи. 'id',' ida' и 'idas'? – Kishor

+0

Спасибо Kishor. Исправленный. В этом примере должны быть id и liste_ids только – thiebo

ответ

1
// Make sure the session is started 
if(!session_id()) 
    session_start(); 

// Make sure the user entered the id on the URL 
if(empty($_GET["id"])) 
    die("Please enter the id of the result"); 

$resultId = $_GET["id"]; 

// Validate the id 
if(!is_numeric($resultId)) 
    die("Invalid id, it most be an integer"); 

if(empty($_SESSION["ids"])) 
    die("No ids to follow"); 

// First the index of the $resultId 
$resultIndex = array_search($resultId, $_SESSION["ids"]); 

if($resultIndex === false) 
    die("Couldn't find ". $resultId); 

$resultIndex++; 

if(empty($_SESSION["ids"][$resultIndex])) 
    die("Reached end"); 
else 
    echo "Your link is " . "/fullresult.php?id=" . $_SESSION["ids"][$resultIndex]; 
+0

, $ resultIndex - текущий индекс. Я ищу следующее значение ... – thiebo

+0

Просто измените его на '$ _SESSION ['ids'] [$ resultIndex + 1]', и он должен работать. Кроме того, некоторые проверки, если ключ существует, были бы крутыми. –

+0

Мой плохой, код обновлен. – Ido

0

Это должно работать до тех пор,

  • У вас есть уникальный массив.
  • вы получаете значение в массиве из параметра GET
  • у вас есть все индексы.

Это может быть сделано намного проще, если вы уверены, что присутствуют все индексы массива. Тогда это будет

$needle = $_GET['id']; //id in your url has value, not index. 
$index = array_search('$needle', $array);//get the index. 
$value = $array($index+1); 
echo $value; 

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

$needle = $_GET['id']; 
$index = array_search('$needle', $array); 
while (key($List) !== $index){ 
$value = next($index); 
} 
echo $value; 

Пожалуйста, проверьте код, как я его протестировал. Кроме того, необходимо предпринять любые оборонительные шаги. Как пользователь вручную меняет URL-адрес на значение, которое не находится в массиве. И так далее.

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