【问题标题】:Loop in form with foreach and session使用 foreach 和 session 在表单中循环
【发布时间】:2013-07-16 19:08:12
【问题描述】:

我有一个里面有一个循环的表单。 这是我的代码:

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">    
<?php
for ($i = 1; $i <= 2; $i++) {
    echo "Numero ";
    echo $i;
    echo "<input type='text' name='number2[$i]' id='number2{$i}' />";   
}

   ?>
   <input type="submit" name="submitbutton" value="Confirm!">
   </form>
   <?php
   print_r( $_POST  );
if(!isset($submitbutton)) {
    if (isset($_POST['number2']) != "") {
        echo "<b>{$_POST['number2']}</b>, !\n";
        $nI = $_POST['number2'];
    } 
}
?>

我得到的输出是:

数组 ( [number2] => 数组 ( [1] => 3 [2] => 4 ) [提交按钮] => 确认!) 数组,!

我想知道如何将号码放入会话中。

例如Session[1]=3, Session[2]=4

我尝试使用数组和 foreach,但总是出错。

【问题讨论】:

  • isset($submitbutton) 应该是 isset($_POST['submitbutton'])。不?你得到什么错误?
  • 您是否尝试过在代码开头使用$_SESSION[1] = 3session_start()

标签: php arrays forms loops foreach


【解决方案1】:

这样的东西应该适合你:

<?php
// Start a PHP Session
session_start();
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">    
    <?php
    for ($i = 1; $i <= 2; $i++) {
        echo "Numero ";
        echo $i;
        echo "<input type='text' name='number2[$i]' id='number2{$i}' />";   
    }
    ?>
    <input type="submit" name="submitbutton" value="Confirm!">
</form>
<?php
// If the form was submitted and number2 is an array
if(isset($_POST['submitbutton']) 
        && isset($_POST['number2']) 
        && is_array($_POST['number2'])) {

    // Loop through each posted value and save it to the session
    foreach ($_POST['number2'] as $key => $value) {
        $_SESSION["number2_{$key}"] = $value;
    } 
}
echo "number2_1 = " . $_SESSION["number2_1"] . "<br />";
echo "number2_2 = " . $_SESSION["number2_2"] . "<br />";
?>

【讨论】:

  • 如果我这样做,我会收到以下错误通知:未知:在第 0 行的未知中跳过数字键 1 注意:未知:在第 0 行的未知中跳过数字键 2
  • 啊,对,您的 $_SESSION 中不能有数字键。您必须将它们放在一个数组中或为它们添加前缀(注意我的更改)。
【解决方案2】:

您遇到了什么错误?注意isset() 只返回TRUEFALSE,所以isset($_POST['number2']) 永远不会等于空字符串。

【讨论】:

  • 嗯,实际上,在松散比较中,false 等于一个空字符串。所以false != "" 评估为假。
  • 正确,但它会始终评估为FALSE,因此if 语句将始终评估为TRUE。跨度>
  • 它如何总是评估为假?如果设置了变量,那么它将是(true != ""),其评估结果为真。如果未设置变量,那么它将是 (false != ""),其评估结果为 false。不需要额外的!= "",但实际上并不会改变条件的结果。这基本上就像做if (isset() != false) - 不必要但不会破坏任何东西。
  • 啊!你是对的......我最近一直在使用 Ruby,其中不考虑空字符串 FALSE。我的错。
猜你喜欢
  • 2013-12-02
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
相关资源
最近更新 更多