2012-04-04 3 views
0

Мой включаемый файл (include.php) заключается в следующем:Почему мой включенный файл выполняется снова, когда isset (POST ['submit'])?

<?php 
$myarray=(a,b,c); 
shuffle($myarray); 
?> 

Мой главный файл PHP заключается в следующем:

include('include.php'); 

if isset($_POST['submit_button']){ 
     echo "Button was clicked"; 
     echo $myarray; 
     } 
else { 
    echo "Not clicked."; 
    echo $myarray; 
    } 
?> 

<form method='POST'><input type='submit' name='submit_button'></form> 

Почему элементы $myarray отображаются в другом порядке, после того, как я нажал на кнопку ? Разве это не перетасовывается только один раз?

Как предотвратить случайное выполнение тасования более одного раза? (чтобы я мог отображать элементы myarray в том же порядке, до и после нажатия кнопки)

+1

Не проверяйте наличие поля формы для обнаружения сообщения. Вместо этого используйте '$ _SERVER ['REQUEST_METHOD'] == 'POST''. –

ответ

2

Ваши PHP файлы интерпретируются при каждом запросе. Поскольку у вас есть это сейчас, в вашей системе нет памяти, так что ваши файлы не смогут «запомнить», что массив уже перетасован. Кроме того, если вы перетасовываете массив один раз, а затем загружаете страницу во второй раз и управляете , но не, чтобы перетасовать его, массив будет (a, b, c), поскольку переменная инициализируется (a, b, c) и никогда не перетасовывались.

Чтобы делать то, что вы хотите, если я правильно понимаю, вы можете использовать сеансы.

$myarray=(a,b,c); 

if (!isset($_SESSION['shuffled'])) { 
    shuffle($myarray); 
    $_SESSION['shuffled'] = $myarray; 
} else { 
    $myarray = $_SESSION['shuffled']; 
} 
+0

Привет, спасибо за ваш ответ. Никогда не думал об использовании сеансов для этого, но я пойду за вашим решением. С уважением – alexx0186

1

Это происходит потому, что каждый раз, когда вы загружаете страницу, включается файл, который также перемещает массив снова.

Попробуйте использовать serialize(), а затем POST массив в том порядке, в котором вы хотите. Получить его с помощью unserialize()

http://www.php.net/manual/en/function.serialize.php

+0

Привет, спасибо за ваш ответ. Когда вы говорите «POST массив», вы имеете в виду объявление чего-то вроде этого: $ _POST ['array'] = $ myarray? Большое спасибо – alexx0186

+0

Я имел в виду, что вы сериализуете массив и POST-результат как значение скрытого поля в вашей форме. Это позволит вам получить желаемый массив после отправки формы. –

+0

Привет Спасибо за ваш ответ. Я изучаю эту сериализованную ссылку. С уважением – alexx0186

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