我正在处理一个HTML表单,其数据将保存在失败的提交或页面刷新上。
我们正在使用PHP会话来存储这些数据,并在需要时将元素发回。
问题在于它不起作用。我们需要在包含错误或页面刷新的提交中保留表单数据。目前,在提交失败或页面刷新时,会话中不存储任何数据。
我对PHP很新,而且大部分代码都不是我的,所以请放轻松。
使用的PHP Sumbit代码是:
Software: PHPMailer - PHP email class
Version: 5.0.2
Contact: via sourceforge.net support pages (also www.codeworxtech.com)
Info: http://phpmailer.sourceforge.net
Support: http://sourceforge.net/projects/phpmailer/
会话:
<?php
session_name("fancyform");
session_start();
$str='';
if($_SESSION['errStr'])
{
$str='<div class="error">'.$_SESSION['errStr'].'</div>';
unset($_SESSION['errStr']);
}
$success='';
if($_SESSION['sent'])
{
$success='<div class="message-sent"><p>Message was sent successfully. Thank you! </p></div>';
$css='<style type="text/css">#contact-form{display:none;}</style>';
unset($_SESSION['sent']);
}
?>
FORM:
<form id="contact-form" name="contact-form" method="post" action="submit.php">
<p><input type="text" name="name" id="name" class="validate[required]" placeholder="Enter your first and last name here" value="<?=$_SESSION['post']['name']?>" /></p>
<p><input type="text" name="email" id="email" class="validate[required,custom[email]]" placeholder="Enter your email address here" value="<?=$_SESSION['post']['email']?>" /></p>
<p><input type="text" name="phone" id="phone" placeholder="Enter your phone number here" value="<?=$_SESSION['post']['phone']?>" /></p>
<p>
<select name="subject" id="subject">
<option>What event service are you primarily interested in?</option>
<option>Event Creation</option>
<option>Project Management</option>
<option>Promotion</option>
</select>
</p>
<textarea name="message" id="message" class="validate[required]" placeholder="Please include some details about your project or event..."><?=$_SESSION['post']['message']?> </textarea>
<input type="submit" value="" />
</form>
答案 0 :(得分:1)
您正在向模板输出$_SESSION['post']['form_element']
,但在上面的PHP代码中没有提及设置该数据。要使其工作,您必须循环遍历$ _POST数组并将每个密钥对分配给$ _SESSION ['post']
此时,您应该能够像上面编码一样从会话中访问先前提交的表单数据。
将此添加到您的submit.php:
session_start();
foreach ($_POST AS $key => $value) {
$_SESSION['post'][$key] = $value;
}
这会将所有数据从$ _POST移动到$ _SESSION ['post']以供将来在模板中使用,并且应该是让它运行所需的全部内容。
答案 1 :(得分:0)
我可能错了,但我认为您需要使用
之类的内容从表单中获取已发布的值if ($_POST['errStr']) {
$_SESSION['errStr'] = $POST['errStr'];
}
如果我在发布表单
后尝试访问变量的方式是正确的如果你查看它设置为post的表单的METHOD属性,那么这应该返回你想要通过页面传递的值。
也许这不是你问的问题,我有点不清楚问题的关键部分,我假设它从表格中取值并在下一页上将它们拿出来。
如果你想在页面刷新/退出时这样做,你可能需要使用一些javascript客户端来尝试在动作发生之前捕获它。
不知道这是否可行。 PHP不会因为它执行的服务器端而帮助你,并且客户端在退出/重新加载时不会向服务器提交任何(有用的),只有执行操作的命令。
这可能需要使用javascript侦听器,例如window.onclose(虽然显然不适用于safari或firefox 2),并且在其中使用ajax xmlhttprequest将数据发送到服务器。
对于提交失败(即带有无效数据的捕获表单?),它与提交的表单几乎相同。只需在处理时重新检查另一侧的数据。
答案 2 :(得分:0)
HTTP是无状态的,除非您使用客户端方法(webstorage等),否则不会保留未提交的数据。
答案 3 :(得分:0)
您需要解析帖子变量并将其添加到会话超级全局,现在您正在引用$ _SESSION ['post'] ['phone'],这将无法按预期工作。
// Assuming same file, this is session section
if (array_key_exists('submit', $_REQUEST)) {
if (array_key_exists('phone', $_REQUEST)) {
$_SESSION['phone'] = $_REQUEST['phone'];
}
}
// Form section
<?php $phone = (array_key_exists('phone', $_SESSION)) ? $_SESSION['phone'] : null;?>
<input type="text" name="phone" id="phone" placeholder="Enter your phone number here" value="<?php echo $phone ?>" />
答案 4 :(得分:0)
您没有包含submit.php
的代码,或者,如果您这样做,问题很明显:您永远不会设置会话值。为此,您可以使用
session_start();
// etc...
$_SESSION['post']['name'] = $_POST['name'];
$_SESSION['post']['email'] = $_POST['email'];
$_SESSION['post']['phone'] = $_POST['phone'];
// etc...
在submit.php
然后表单页面(可能是另一页?)然后可以检查这些值是否已设置
.. value="<?php if (isset($_SESSION['post']['name'])) echo $_SESSION['post']['name']; ?>" ..