从输入表单存储会话中的php数组

时间:2013-02-26 10:40:18

标签: php arrays session

如果任何人都可以提供帮助,那么尝试让数组与会话一起工作会遇到很多麻烦我不会对验证等问题,如果我能让它工作,我可以扩展它。

HTML

<form method="post" action="array2.php">
    Select amount of tickets you require.
    <select name="options[]">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
    </select>
    Select the acomidation you require.
    <select name="options2[]">
        <option value="camping">Camping</option>
        <option value="caravan">Caravan</option>
    </select>
    <input type="submit" value="Go!" />
</form>

array2.php

<?php
session_start();
$checked = $_POST['options'];
$checked2 = $_POST['options2'];
$_SESSION['user'] = true;
$_SESSION['checked'] = $checked;
$_SESSION['checked2'] = $checked2;
header('Location: array3.php');
?>

array3.php

<?php
session_start();
if(!isset($_SESSION['user'])){
    die("To access this page, you need to <a href='register.html'>LOGIN</a>");
}
$checked = $_SESSION['checked'];
$checked2 = $_SESSION['checked2'];
?>

<?php
    for($i=0; $i < count($checked && $checked2); $i++){
        echo "You have selected to receive " . $checked[$i] . " tickets<br/>";
        echo "And you have selected to receive " . $checked2[$i] . " for accommodation are you sure? <br/>";
    }
?>

主要问题是这些值未从array2传递到array3,欢迎任何帮助。

编辑 - 这个工作正常,直到我尝试添加会话以使其在多个页面上工作,所以我确定问题出在哪里

EDIT2 - 感谢所有帮助的人,当我拿出来的时候我得到了它

$checked = $_POST['options'];
$checked2 = $_POST['options2'];

从阵列3开始工作:)非常感谢!

2 个答案:

答案 0 :(得分:4)

count($checked && $checked2)

......是你的问题。

$checked && $checked2是一个逻辑表达式,可以是truefalse,这意味着count()调用将始终返回false,{{1在数值比较中等于false(与0的比较小于<),因此for循环不会执行任何迭代。

但是,在这种情况下使用数组无论如何都是不合适的,因为你使用的$i元素没有<select>属性,所以它只代表一个值,这意味着数组会只持有一个值。你应该将它简化为标量值,你会发现a)它有效,b)一般来说它更容易。

答案 1 :(得分:2)

您的for循环写错了。

for($i=0; $i < count($checked && $checked2); $i++)

那个计数陈述不会像你想象的那样奏效。将其分为2个for循环或内循环。

像这样:

for($i=0; $i < count($checked); $i++){
  echo stuff here
}

for($i=0; $i < count($checked2); $i++){
  echo stuff here
}