这有点难以解释..使用图片可能会有所帮助!
1。用户提交表单很简单。
{{0} }
2. 正在设置会话并显示已设置的会话变量。
3。如果用户输错CAPTCHA或者输入错误并继续下一页, inp_name , inp_username 和 inp_email 会话值消失。当设置会话值时, inp_password 值仍然存在(但它正在加密,md5()。
表格:
<form action="./" method="post" class="form-300">
<div class="title top">Full Name</div>
<input type="text" name="name" value="<?=$_POST['name'] ?>" />
<div class="title top">Username</div>
<input type="text" name="username" value="<?=$_POST['username'] ?>" />
<div class="title top">Email</div>
<input type="text" name="email" value="<?=$_POST['email'] ?>" />
<div class="title top">Password</div>
<input type="password" name="password" />
<input type="submit" name="submit" value="Sign Up" />
<div class="tc">By clicking Sign Up, you agree to the Terms of Use, Privacy Policy and that you are or over the age of 13.</div>
<span class="sep-text">or</span>
<a href="./?action=fb" class="btn-300 btn-fb">Sign Up using Facebook</a>
<br /><br /><br />
</form>
CAPTCHA:
<?php ob_start(); if(session_id() != 'uv241112'){
session_name("uv241112"); session_start();
$_SESSION['inp_isset'] = "eAK28";
$_SESSION['inp_name'] = $_POST['name'];
$_SESSION['inp_username'] = $_POST['username'];
$_SESSION['inp_email'] = $_POST['email'];
$_SESSION['inp_password'] = md5($_POST['password']);
}else{ session_name("uv241112"); session_start(); } ?>
<form action="./" method="post">
<?php
require_once('../resources/recaptchalib.php'); $publickey = "xxxxxxxxxx"; $privatekey = "xxxxxxxxxxxxxx";
# the response from reCAPTCHA
$resp = null;
# the error code from reCAPTCHA, if any
$error = null;
if ($_POST["submit_recaptcha"]) {
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if ($resp->is_valid) {
echo "You got it!";
} else {
?><div class="alert alert-error alert-440">Sorry, the text you entered was incorrect.</div><?php
# set the error code so that we can display it
$error = $resp->error;
}
}
echo recaptcha_get_html($publickey, $error);
?>
<br/>
<input type="submit" name="submit_recaptcha" value="Check" class="btn-300 btn-green" />
</form>
<?php echo $_SESSION['inp_name']; ?>
<?php echo $_SESSION['inp_username']; ?>
<?php echo $_SESSION['inp_email']; ?>
<?php echo $_SESSION['inp_password']; ?>
<?php ob_flush(); ?>
答案 0 :(得分:1)
我认为你要以错误的方式检查表单提交。您不应该看到会话名称是否存在。事实上,你应该已经在每种情况下都开始了一个会话。
Session_start()应该是每页上的第一件事。
对于您的帖子值,您应该验证并使用隐藏的表单值来确定他们提交的页面。例如:
<form method="post">
<input type="text" name="email">
<input type="hidden" name="emailpage" value="1">
<input type="submit" name="send" value="send">
</form>
然后检查表格
<?php
Session_start();
If (!empty($_POST['emailpage'])) {
// do variable validation
$_SESSION['email'] = $validatedemail;
}
不需要条件语句session_start。也可能不需要设置会话名称。
已发布的代码是从手机发布的示例代码,因此可能会出现问题。
答案 1 :(得分:0)
有关session_id和session_name的问题。我注意到你在会话开始之前设置了session_name。我想知道你为什么要测试session_id而不是session_name?
--> ... if(session_id() != 'uv241112'){
session_name("uv241112"); ...
也许应该是
--> ... if(session_name() != 'uv241112'){
session_name("uv241112"); ...
答案 2 :(得分:0)
代码的实际问题是您根据POST值在页面顶部设置会话变量。在第一次提交之后,这是有效的,但是第二次提交时你没有再次发布这些值,因此将会话变量设置为空。 (密码仍然显示,因为它是空行的MD5。如果你比较MD5值,你会发现它们不同以确认)
在评论之前引用自己的评论,而不是在再次投票之前阅读它们
让您更容易看到要改变的内容......
$_SESSION['inp_isset'] = "eAK28";
$_SESSION['inp_name'] = $_POST['name'];
$_SESSION['inp_username'] = $_POST['username'];
$_SESSION['inp_email'] = $_POST['email'];
$_SESSION['inp_password'] = md5($_POST['password']);
要:
if(isset($_POST['username']) {
$_SESSION['inp_isset'] = "eAK28";
$_SESSION['inp_name'] = $_POST['name'];
$_SESSION['inp_username'] = $_POST['username'];
$_SESSION['inp_email'] = $_POST['email'];
$_SESSION['inp_password'] = md5($_POST['password']);
}
这只是一个粗略的例子,但仅仅是因为代码需要稍微清理一下。 ^^
答案 3 :(得分:-1)
我对文件进行了重新编码,清理了很多次,但是没有用。但是我将以下代码放在一个新文件中,并在提交表单后转到它。有效。所以,如果有意义的话,我只会处理新文件。非常感谢大家的帮助,非常感谢。
session_name("uv241112"); session_start();
echo $_SESSION['inp_name'];
echo $_SESSION['inp_username'];
echo $_SESSION['inp_email'];
echo $_SESSION['inp_password'];