【问题标题】:Creating a savable form in PHP?在 PHP 中创建一个可保存的表单?
【发布时间】:2014-07-18 15:45:12
【问题描述】:

我创建了一个简单(但很长)的 HTML 表单,我需要能够保存表单进度并在以后返回它(安全性不是大问题)。但是我在保存表单状态然后稍后再调用它时遇到了麻烦。 (警告,我是菜鸟)

所以有的是:

我有一个表格

<form action="phpSaveTry1.php" form method="post"> 

当使用保存按钮提交表单时

<INPUT TYPE = "Submit" Name = "Save" VALUE = "Save and Submit">

我尝试通过以下方式将所有发布的变量保存在服务器上的文件中......(欢迎其他建议)

$varNameArray = array("fname","mname","lname","comment","email","website","saveFile");

if (isset($_POST['Save'])) {
for($i = 0; $i < count($varNameArray); ++$i) { //go through every variable and add it to array
    $arrayOfVars[$varNameArray[$i]] = ($_POST[$varNameArray[$i]]);
    }
}
$saveFileName = "NameOfSavedState";
$var_str = var_export($arrayOfVars, true);
$var = "<?php\n\n\$$arrayOfVars = $var_str;\n\n";
file_put_contents(sprintf("/home/pansyc5/public_html/Jul17/SavedForms/%s.php",$saveFileName), $var);

然后在包含表单的 html 标题中,我想调用变量

$saveFileName = "NameOfSavedState";
include sprintf("/home/pansyc5/public_html/Jul17/SavedForms/%s.php",$saveFileName);

并通过首先重新填充变量将值召回到字段中

for($i = 0; $i < count($varNameArray); ++$i) { //go through every variable and declare it

    $varNameArray[$i] = ( $arrayOfVars[$varNameArray[$i]] );
} 

然后通过将 html 值设置为 e.g; 来重新填充表单;

 Last Name: <input type="text" name="lname" value="<?PHP print $lname; ?>">

我是网站设计的新手,但这似乎是一种非常复杂的保存表单会话的方式(更不用说,它不起作用)。 重新填充或保存表单状态的正确方法是什么?

【问题讨论】:

  • 使用$_SESSION。这就是它的用途。如果您只是实际使用它,您正在做很多无意义/无用的代码来复制 PHP 已经提供的内容。另外,使用sprintf() 将几个简单的变量插入到字符串中,并使用for() 循环以您正在做的方式迭代数组是货物崇拜编程的症状。
  • 谢谢你,我想我是这样写的,因为我不熟悉 php 或 $_SESSION 属性(我想我一直在浪费我的时间)。您能否指点我一个更狭窄的方向来查找一些有关如何使用$_SESSION 进行此类保存的文档? ty
  • 如果您是 PHP 新手,您应该从文档开始:php.net/manual/en/book.session.php。我们是来帮忙的。我们不是来给您阅读手册页的。
  • @MarcB 绝对是,不希望有人为我写出代码。只是想缩小我的搜索范围。 TY
  • @MarcB 根据这个问题和代码的编写方式,很明显这个人已经阅读了很多内容,只是在开始将所有内容放在一起时遇到了麻烦。

标签: javascript php jquery forms savestate


【解决方案1】:

扔掉所有这些代码。通过将数据写入 PHP 文件,您正在制造安全噩梦。你的大部分代码真的没有理由。试试更简单的:

session_start();
$_SESSION['lastFormData'] = $_POST;

然后当您稍后填充表单时...

echo '<input name="lname" value="' . htmlspecialchars($_SESSION['lastFormData']['lname']) . '" />';

【讨论】:

  • 这看起来棒极了!!我只是对如何将它与我的 HTML 集成感到困惑。它必须在同一个文件中吗?或者我可以通过 action="file.php" 来指导它吗?
  • @user3163380 理想情况下,您的大部分代码都将与您的 HTML 分开。这最好通过使用模板引擎和诸如 MVC 之类的开发模式来实现。同时,您访问$_POST 的代码应该放在接收POST 数据的任何脚本上。也就是说,如果您的表单操作是post-to-me.php,那么post-to-me.php 应该有您将$_POST 分配给$_SESSION['lastFormData'] 的代码。将值回显到 HTML 中的代码应该存在于需要输出输入元素的任何位置。
  • 刚刚在示例表单上进行了快速测试,似乎正是我所需要的!谢谢您的帮助。我接受了这个作为答案!你真棒。
猜你喜欢
  • 2018-02-03
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
相关资源
最近更新 更多