Как управлять $ _POST [] и $ _SESSION [] для запоминания форм на нескольких страницах в PHP? - PullRequest
0 голосов
/ 26 декабря 2011

Я играю с небольшим упражнением, чтобы понять сессии и посты, но не могу заставить их вести себя вместе. Вы можете помочь?

Положение

У меня есть следующие страницы

  1. Страница 1
  2. Страница 2

На стр. 1 У меня есть одна форма ввода. Вводят флажок, например:

<input type="checkbox" name="test" >
  • Я хочу иметь возможность приехать на страницу 1 без получения ошибок

  • Мне бы хотелось, чтобы в невыбранном состоянии флажка было value of 0, а в выбранном состоянии - value of 1

  • Какое бы значение не было присвоено (посредством флажка), я бы хотел, чтобы это значение сохранялось в сеансе, который может перемещаться от стр. 1 до стр. 2 и назад .

  • После сохранения значения сеанса я хотел бы установить или снять флажок на стр. 1 , чтобы изменить значение, что позволяет переходить с стр. 1 на стр. 2 и назад с новым значением.


Вот мой код для этого (который не работает):

Страница 1

Примечание: у меня есть этот код на той же странице, что и форма. checkbox name="test"

if (isset($_POST['test']))
{
$_SESSION['test'] = $_POST['test'];
}

if (empty($_SESSION['test']))
{
$_SESSION['test'] = 0;
}   
else
{
$_SESSION['test'] = 1;
}

var_dump($_SESSION['test']);

Страница 2

var_dump($_SESSION['test']);

Заранее спасибо за помощь.


UPDATE

Если вы хотите увидеть полный код для обеих страниц, я разместил их здесь:

Страница 1:

http://www.diigo.com/item/note/17zt6/ux45

Страница 2:

http://www.diigo.com/item/note/17zt6/gv6k

Ответы [ 3 ]

1 голос
/ 26 декабря 2011
<?php

session_start();
if (isset($_POST['submit']) && isset($_POST['test']))
{
    $_SESSION['test'] = true; // sets the session if the checkbox was set
} elseif (isset($_POST['submit']) && !isset($_POST['test'])) {
    if (isset($_SESSION['test'])) unset($_SESSION['test']);
}

$checked = '';
if (isset($_SESSION['test'])) {
    $checked = 'checked="checked"'; // check the checkbox by default if the session is set
}
echo '<input type="checkbox" name="test" '.$checked.'>';
echo '<input type="submit" name="submit" value="Submit">';
0 голосов
/ 26 декабря 2011

Используйте этот код для вашего page1.php

<?php 
session_start();

if(isset($_POST['submit']))
{
    if (isset($_POST['test']))
    {
        $_SESSION['test'] = $_POST['test'];
    }
    else
    {
        $_SESSION['test'] = 0;
    }
}
if (empty($_SESSION['test']))
{
    $_SESSION['test'] = 0;
    $checked = '';
} 
else
{
    $_SESSION['test'] = 1;
    $checked = 'checked="checked"';
}
var_dump($_SESSION['test']);
?>


<!DOCTYPE html>
<html>
<head>
    <title>Page 1</title>
</head>
<body>
    <form action="page1.php" method="post">
        Test:
        <input type="checkbox" name="test" <?php echo $checked; ?>>
        <input type="submit" name="submit" value="Test!">
    </form>
    <br />
    <a href="page2.php">Continue</a>
</body>
</html>
0 голосов
/ 26 декабря 2011

Почему бы не использовать if (!isset($_SESSION['test'])) вместо if (empty($_SESSION['test']))?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...