【问题标题】:Storing Form Data as a Session Variable将表单数据存储为会话变量
【发布时间】:2011-04-17 00:36:59
【问题描述】:

所以我想知道是否可以将来自表单的数据存储为会话变量。

这是我目前所拥有的,但我不知道该为表单操作添加什么。

感谢收看!

<strong>Test Form</strong>
<form action="" method"post">
    <input type="text" name="picturenum"/>
    <input type="submit" name="Submit" value="Submit!" />
</form>

<? 
    if (isset($_POST['Submit'])) { 
        $_session['picturenum'] = $_POST['picturenum'];
    } 
?> 

<strong><? echo $_session['picturenum'];?></strong>

【问题讨论】:

  • = $whyThatItMakesCodeMuchMoreReadable /*:P*/ ?>

标签: php html variables forms


【解决方案1】:

要使用会话变量,必须使用session_start 函数启动会话,这将允许您以高效的方式将数据存储在全局变量$_SESSION 中。

所以您的代码最终将如下所示:

<strong>Test Form</strong>
<form action="" method"post">
<input type="text" name="picturenum"/>
<input type="submit" name="Submit" value="Submit!" />
</form>

<?php 
 
 // starting the session
 session_start();


 if (isset($_POST['Submit'])) { 
 $_SESSION['picturenum'] = $_POST['picturenum'];
 } 
?> 

<strong><?php echo $_SESSION['picturenum'];?></strong>

为了使其易于使用并避免再次忘记它,您可以创建一个session_file.php,您希望将其包含在您的所有代码中并为您启动会话:

session_start.php

 <?php
   session_start();
 ?> 

然后在任何你喜欢的地方包含它:

<strong>Test Form</strong>
<form action="" method"post">
<input type="text" name="picturenum"/>
<input type="submit" name="Submit" value="Submit!" />
</form>

<?php 
 
 // including the session file
 require_once("session_start.php");


 if (isset($_POST['Submit'])) { 
 $_SESSION['picturenum'] = $_POST['picturenum'];
 } 
?> 

这样它在未来更便于携带和维护。

其他说明

  • 如果您使用的是 Apache 版本 2 或更新版本,请小心。而不是
    &lt;?
    打开 php 的标签,使用 &lt;?php,否则你的代码将不会被解释

  • php中的变量名是区分大小写的,不要写$_session,而是写成大写的$_SESSION

干得好!

【讨论】:

  • 是否可以使用 id 而不是名称来检索输入值?
  • 愚蠢的问题。如果您开始一个会话,然后(不小心)执行另一个 session_start();,这会擦除第一个会话的所有数据吗?
  • @OldMauiMan,在同一代码中调用session_start();(不小心)两次不会做错任何事。清除所有数据的唯一方法是使用session_destroy();
  • 谢谢。我知道人们不喜欢这样,但你怎么说谢谢你在这里提供有用的信息? (我是英国人,不能说谢谢)。
  • @OldMauiMan,赚钱的方法是投票给你他们的答案(答案标题左侧的数字)。但是,只是说谢谢对我来说很好;-)
【解决方案2】:

这很好,并且会起作用。但是要使用会话,您必须将session_start(); 放在 php 代码的第一行。所以基本上

<?php
session_start();

//rest of stuff

?>

【讨论】:

  • # in action 将重新加载当前页面,这是您希望它执行的操作,以便 php 运行。
【解决方案3】:

是的,这是可能的。 kizzie 是正确的,session_start(); 必须先走。

我的另一个观察是您需要使用以下方法过滤表单数据:

strip_tags($value);

和/或

stripslashes($value);

【讨论】:

  • 所以基本上这只是清理数据?
  • -1 这是一个完全没用的答案。 stripslashes() 是无用的,因为魔术引号默认是关闭的(如果有的话,这也会“去清理”你的数据)。另外,您为什么要对保存到会话的信息执行strip_tags()(或stripslashes())?
  • 您不能保证魔术引号是关闭的。我与太多使用托管的客户合作过,他们无法控制并且魔术报价已开启。最好的做法是什么都不做。如果代码被移动或主机更改设置等...
  • 如果数据来自用户,那么您希望将其视为危险的。这些数据将去哪里-也许是数据库等...重点是保护您的站点。因为在路上,另一个开发人员可能正在网站上工作,并将用户数据用于其他用途,而不检查过滤。
  • htmlspecialchars 用于显示数据,准备用于插入数据库的语句;/
【解决方案4】:

您可以使用以下代码解决此问题:

if(!empty($_GET['variable from which you get'])) 
{
$_SESSION['something']= $_GET['variable from which you get'];
}

所以你从 GET 表单中获取变量,当 $_GET['variable from which you get'] 设置时,你将在 $_SESSION['whatever'] 变量中存储一次,如果它为空,$_SESSION['something'] 将存储旧参数

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2019-02-03
    • 2020-12-27
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多