提问人:Lori 提问时间:11/3/2014 最后编辑:KevinLori 更新时间:11/3/2014 访问量:1855
提交后保留字段值
Retain field values after submit
问:
我需要此表单的操作来调用我的脚本,然后如果电子邮件地址已经在数据库中,它应该显示警报。
这有效,但显然我被定向到我的空白脚本页面,当我返回表单时,数据消失了。
我希望被重定向到数据完好无损的表单并显示警报。
我一整天都在努力让会话发挥作用,现在我只是感到困惑。
如果有人能告诉我为每个页面添加会话代码的内容和位置,我将不胜感激。
此页面包含我的表格:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<script src='http://ajax.microsoft.com/ajax/jquery.validate/1.7/additional-methods.js'></script>
<script src='http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js'></script>
<script src="../js/register_validate.js" type="text/javascript"></script>
<link href="../css/styles.css" rel="stylesheet" type="text/css">
<base target="_top">
</head>
<body>
<p><?php include ('register_form2.php') ?></p>
</body>
</html>
这是包含的表单页面:
<form action="register_script2.php" method="POST" name="form_register" id="form_registerID" accept-charset="UTF-8">
<aside class="field_reg_form">
<input name="field_email1" type="text" required id="field_email1ID" /><br /><br />
<input name="field_email2" type="text" required id="field_email2ID" /><br /><br />
<input type="submit" value="submit" id="submit" name="submit" />
</aside>
</form>
下面是 PHP 脚本:
<?php
require_once('../scripts/connect.php');
$con = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die('Could not connect to database server.');
if(isset($_POST['submit'])) {
$var_Email1 = mysqli_real_escape_string($con, $_POST['field_email1']);
$var_Email2 = mysqli_real_escape_string($con, $_POST['field_email2']);
if ($var_Email1 == $var_Email2){
$sql = mysqli_query($con, "SELECT * FROM membership WHERE Email = '$var_Email1' ");
if(mysqli_num_rows($sql) > 0 ){
print '<script type="text/javascript">';
print 'alert("The email address '. $_POST['field_email1'].' is already in our database")';
print '</script>';
exit();
}
echo "not in database";
}
}
?>
答:
1赞
akmozo
11/3/2014
#1
您可以使用发送数据,然后显示脚本的返回,如下所示:ajax
php
$.ajax({
type: 'POST',
url: 'register_script2.php',
data: $('form#form_register').serialize()
})
.done(function(msg) {
if(msg != 'error'){
alert('The email address '+msg+' is already in our database');
} else {
// init your form
}
});
在你的代码中,这样做;PHP
...
if(mysqli_num_rows($sql) > 0 ){
echo $var_Email1;
} else {
echo 'error';
}
...
评论
4赞
Darren
11/3/2014
您应该对此进行更多扩展,使其成为一个正确的答案,因为它目前只是一个评论。
0赞
Lori
11/3/2014
谢谢,但我需要使用会话。
0赞
akmozo
11/3/2014
这是一个选择,或者你没有告诉我们一切!因为我看不出对这种情况的兴趣!
1赞
Brad Christie
11/3/2014
#2
我知道你发布了代码,但我仍然;不确定工作流程。但是,我会给你一个“例子”,看看你是否至少可以带着这个想法运行。
给定您的表单,还要提供属性并从值中提取它们:value
$_POST
register_form.php
<!-- keeping it brief... -->
<form method="POST">
<input type="email" name="email1" value="<?= $_POST['email1']; ?>" />
<input type="email" name="email2" value="<?= $_POST['email2']; ?>" />
<input type="submit" value />
</form>
然后,在原始请求上,输出它:
<!-- ... -->
<?php include('register_form.php'); ?>
<!-- ... -->
然后,在您要提交的页面中也调用它(这次它将由传入值预先填充):
<!-- ... -->
<?php if (isset($_POST['submit'])) { ... } ?>
<!-- ... -->
<?php include('register_form.php'); ?>
<!-- ... -->
2赞
Kevin
11/3/2014
#3
是的,在这种情况下,您可以实现(某种)Flash 会话:
因此,在提交时:
<?php
session_start(); // don't forget
require_once('../scripts/connect.php');
$con = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die('Could not connect to database server.');
if(isset($_POST['submit'])) {
$var_Email1 = mysqli_real_escape_string($con, $_POST['field_email1']);
$var_Email2 = mysqli_real_escape_string($con, $_POST['field_email2']);
if ($var_Email1 == $var_Email2){
$sql = mysqli_query($con, "SELECT * FROM membership WHERE Email = '$var_Email1' ");
if(mysqli_num_rows($sql) > 0){
// set session
$_SESSION['email_exists'] = $var_Email1;
header('Location: the_starting_php.php');
exit;
}
}
echo "not in database";
}
?>
然后在表单页面中也添加以下内容:
<?php
session_start();
// check if there is
$email = '';
if(isset($_SESSION['email_exists'])) {
$email = $_SESSION['email_exists'];
unset($_SESSION['email_exists']); // unset it
echo "
<script type='text/javascript'>
alert('The email address $email already exists');
</script>
";
}
?>
<form action="register_script2.php" method="POST" name="form_register" id="form_registerID" accept-charset="UTF-8">
<aside class="field_reg_form">
<input name="field_email1" type="text" required id="field_email1ID" value="<?php echo $email; ?>" />
<br /><br />
<input name="field_email2" type="text" required id="field_email2ID" value="<?php echo $email; ?>" />
<br /><br />
<input type="submit" value="submit" id="submit" name="submit" />
</aside>
</form>
旁注:我建议使用准备好的语句。
<?php
session_start(); // don't forget
require_once('../scripts/connect.php');
$con = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die('Could not connect to database server.');
if(isset($_POST['submit'])) {
$var_Email1 = $_POST['field_email1'];
$var_Email2 = $_POST['field_email2'];
if ($var_Email1 == $var_Email2){
$sql = 'SELECT * FROM membership WHERE Email = ?';
$select = $con->prepare($sql);
$select->bind_param('s', $var_Email1);
$select->execute();
if($select->num_rows > 0){
// set session
$_SESSION['email_exists'] = $var_Email1;
header('Location: the_starting_php.php');
exit;
}
}
echo "not in database";
}
?>
评论