【问题标题】:cookie value back into input fieldscookie 值返回输入字段
【发布时间】:2016-02-18 16:22:03
【问题描述】:

我实际上是 PHP 新手,所以我需要你的帮助!

我在表单中使用表格,并使用 SQL Server 填充表格行。 表单以数量输入 type="number" 的输入字段开头。

<form name="testform" method="post" action="submit.php">

<?php

$sql="query goes here";
$query=sqlsrv_query( $conn, $sql, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));

        if ($query) {

            while($row = sqlsrv_fetch_array( $query, SQLSRV_FETCH_ASSOC) ) {
                     echo "<td><input type='number' name='quantity[]'></td>";
       }
    }
?>
</form>

提交表单后,我希望用户能够导航回上一页以更改输入的数量(如果可能)。 所以我需要在返回时恢复输入值(现在所有值在返回时都丢失了)。

我通过使用 Cookie 存储输入值找到了这种方式,因此我找到了一种将输入 name='quantity[]'(数组)的所有值存储在 cookie 中的方法。并在返回时将它们打印在页面上。它还使用正确的数组索引位置打印所有正确的值。 以下是部分代码:

在我的表单页面 (form.php) 上接收 cookie。

<?php

if (isset($_COOKIE['Cookie_Info'])){

    $cookie = $_COOKIE["Cookie_Info"]; 
    $cookie = stripslashes($cookie); 
    $savedAantArray = json_decode($cookie, true); 

    echo '<pre>'; 
    print_r($savedAantArray); echo '</pre>';


    } else { 

    $data = array(
        'quantity[]' => ''       
    );
   }

?> 

在我的提交页面 (submit.php) 上设置 cookie,带有返回 form.php 页面的链接。

    <?php

    if (isset($_POST['submit'])) {

            $post_arr = $_POST;
            $expire = 8*3600; 
            setcookie("Cookie_Info", serialize($post_arr), time()+$expire); 
        }
    ?>
<a href="form.php">Make Some Changes..</a>

返回form.php时的结果

Cookies
Array
(
    [quantity] => Array
        (
            [0] => 8
            [1] => 8
        )

    [submit] => Submit
)

这是我的问题: 有没有办法将数组中的这些值存储到所有正确的输入字段中? 而不是将它们打印为数组(这不是我想要的,但我想测试 cookie 存储)。

提前致谢!

【问题讨论】:

  • 你可以使用$_SESSION来记住跨页的值,在$_SESSION全局变量中创建一个子数组
  • 第一次提交表单后是否将值存入DB?
  • 嗨,哈利,还没有。提交只是 form.php 和实际插入之间的一层。

标签: php forms cookies


【解决方案1】:

感谢 Yvon,现在可以使用了。

再次在我的第二页上:

<?php session_start();

        $_SESSION['quantity'] = $_POST['quantity'];

        foreach($_POST['quantity'] as $key => $value) {

        echo "<input name='quantity' value='$value'>\n<br />";
     }

 ?>

返回第一页:

<?php session_start();

    $quantity=$_SESSION['quantity'];
    print_r($quantity);
    echo "<br \>";

        foreach($_SESSION['quantity'] as $key => $value) {

        echo "<input name='quantity[]' value='$value'>\n<br />";
    }
?>

【讨论】:

    【解决方案2】:

    只是一个小编辑,现在可以完美运行(包括打印正确数量的行)。

    在第一页:

    <form name="form" method="post" action="second.php">
    
    <?php session_start();
    
    include 'db_connect.php';
    
    $quantity=$_SESSION['quantity']; print_r($quantity); echo "<br \>";
    
    $sql ="SELECT * FROM X0ONTDTA.WEBRELGB";
    $query = sqlsrv_query( $conn, $sql, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
    
    
        if($query){
    
                if (isset($_SESSION['quantity'])){
    
                        foreach($_SESSION['quantity'] as $key => $value) {
    
                    echo "<input  name='quantity[]' value='$value'>\n<br />";
                }
            } 
    
            elseif($query){
    
                while($row = sqlsrv_fetch_array( $query, SQLSRV_FETCH_ASSOC) ) {
    
                    echo "<input name='quantity[]' value=''>\n<br />";
    
                }
    
    
                }
            }
    
    ?>
    
    <input type="submit" value="Submit" name="submit"></input>
    
    </form>
    

    在第二页:

    <?php session_start();
    
    $_SESSION['quantity'] = $_POST['quantity'];
    
       foreach($_POST['quantity'] as $key => $value) {
    
           echo "<input name='quantity' value='$value'>\n<br />";
        }
    
      echo "<pre>";
      print_r($_POST['quantity']);
      echo "</pre>";
    
    ?>
    
    <a href="first.php"> Go Back </a>
    

    导致:

    after submit

    going back

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 2016-07-14
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      相关资源
      最近更新 更多