【问题标题】:Create session variables out of looped database values从循环的数据库值中创建会话变量
【发布时间】:2014-10-29 15:43:05
【问题描述】:

我试图在单击 HTML 链接时从数据库数组创建一个变量。目标是将用户重定向到使用一个数组数据填充的表单。换句话说,数据库将根据单击的链接进行查询和填充(无论 $row[1]、$row[2] 和 $row[3] 的值是什么)。

<?php 

ini_set('display_errors',1);  error_reporting(E_ALL);

$DATE = date('Y-m-d');

require_once 'IRCconfig.php';

$connection = new mysqli($db_hostname, $db_username, $db_password, $db_database);
    if ($connection->connect_error) die($connection->connect_error);

$query  = "SELECT * FROM CLIENT_CHECKIN1 WHERE DATE>='$DATE'";
$result = $connection->query($query);

if (!$result) die ("Database access failed: " . $connection->error);

$rows = $result->num_rows;

for ($j = 0 ; $j < $rows ; ++$j)
    {
        $result->data_seek($j);
        $row = $result->fetch_array(MYSQLI_NUM);

        echo <<<_END
        <pre>
            <a href="http://localhost/populateClientCheckin.php" class="post">$row[1] $row[2] $row[3]</a>
        </pre>
 _END;
    } 
 ?>

如果有人能给我一些启发,告诉我如何实现这一点,我将不胜感激。

【问题讨论】:

  • *已编辑以删除注释掉的代码,因为它与问题无关
  • 首先,您需要启动会话,就像脚本顶部的session_start() 一样简单。然后,您需要使用如下 DB 值实例化会话变量:$_SESSION['var'] = $value。之后,在表单所依赖的 html 文件或其他文件中,只需检查它:if(isset($_SESSION['var'])) {} 并使用该值(如果已设置)。 :D
  • 您是否在询问如何将查询中的数据发送到位于populateClientCheckin.php 的表单?我会使用会话,但为什么要创建一个链接供用户单击?为什么不直接使用header 重定向?
  • $row 1、2 和 3 是特定客户的第一个中间名和姓氏。客户众多。我只想用特定客户端(单击其链接的客户端)的数据填充表单。为了清楚起见,我将添加一个屏幕截图。
  • 没关系,我需要更多声望才能发布图片。

标签: javascript php jquery html mysqli


【解决方案1】:

请阅读更多关于会话here

那么,回答你的问题:

首先您需要开始会话,就像脚本顶部的session_start(); 一样简单。

其次您需要使用 DB 值来实例化会话变量,如下所示:$_SESSION['var'] = $value;

第三,在 html 文件或其他任何表单依赖的地方,只需检查它:

if(isset($_SESSION['var'])) {
  echo '<input type="text" value="'.$_SESSION['var'].'" />';
} else {
  echo '<input type="text" value="" />';
}

如果已设置,则使用该值。

L.E: 所以...第一件事是第一...session_start(); 没有它,就没有会议的意义。

其次,您像 $_SESSION['some_name'] = $row[1] 一样创建它,这样 var 将保留来自 $row[1] 的值。我假设这是您需要的价值。不要像 $_SESSION['$row1'] 那样做,因为首先这是不正确的,你不会有 row1 的值。您需要一个唯一的名称,以便您可以在有表单的地方调用它。

上面的代码会变成这样:

<?php 

session_start();

ini_set('display_errors',1);  error_reporting(E_ALL);

$DATE = date('Y-m-d');

require_once 'IRCconfig.php';

$connection = new mysqli($db_hostname, $db_username, $db_password, $db_database);
    if ($connection->connect_error) die($connection->connect_error);

$query  = "SELECT * FROM CLIENT_CHECKIN1 WHERE DATE>='$DATE'";
$result = $connection->query($query);

if (!$result) die ("Database access failed: " . $connection->error);

$rows = $result->num_rows;

for ($j = 0 ; $j < $rows ; ++$j)
    {
        $result->data_seek($j);
        $row = $result->fetch_array(MYSQLI_NUM);

        $_SESSION['first_row'] = $row[1];
        $_SESSION['second_row'] = $row[2];
        $_SESSION['third_row'] = $row[3];

        echo <<<_END
        <pre>
            <a href="http://localhost/populateClientCheckin.php" class="post">$row[1] $row[2] $row[3]</a>
        </pre>
 _END;
    } 
 ?>

并且,如果您有表单和 &lt;input type = "text" value = "" /&gt;,那么您需要该值的地方,只需这样做:

<input type = "text" value = "<?php echo (isset($_SESSION['first_row']) ? $_SESSION['first_row'] : ''); ?>" />
<input type = "text" value = "<?php echo (isset($_SESSION['second_row']) ? $_SESSION['second_row'] : ''); ?>" />
<input type = "text" value = "<?php echo (isset($_SESSION['third_row']) ? $_SESSION['third_row'] : ''); ?>" />

希望这会有所帮助! :D

【讨论】:

  • 所以我会写这个(并用 $row[2] 和 $row[3] 重复?我什至不确定会话是否适合在这里使用。session_start() if( isset($_SESSION['$row[1]'])) { echo ''; }else { echo ''; } 抱歉格式化,不知道如何修复 cmets 中的代码。
  • 检查我的 L.E: ...希望您得到解释...最后 3 行必须放在
    中,您需要 $row 1 的值, 2,3.
  • 另外,我想你现在可以发布那张照片了;)
  • 强烈建议不要使用短标签。不要使用&lt;?= 。阅读:php.net/manual/en/language.basic-syntax.phptags.php
  • tx 用于输入、链接和修改...不知道 :) 但默认情况下该设置不是 php 5.5 附带的吗?
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 2021-09-28
  • 1970-01-01
  • 2019-03-10
  • 2014-08-05
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多