我一直在尝试使用php和html创建一个寄存器页面,一旦我终于完成并想检查它是否有效,它就重新加载了页面,当我检查数据库时那里没有新的。这是代码,在register.php中,
?php
require_once('connect.php');
$errors = array();
if (isset($_GET['submit'])) {
if (empty($_POST['username'])) { array_push($errors, 'Choose a username.'); }
if (empty($_POST['email'])) { array_push($errors, 'Choose an email.'); }
if (empty($_POST['password'])) { array_push($errors, 'Choose a password.'); }
$old_usn = mysql_query("SELECT id FROM users WHERE name = '".$_POST['username']."' LIMIT 1;") or die(mysql_error());
if (mysql_num_rows($old_usn) > 0) { array_push($errors, 'This username is already taken.'); }
$old_email = mysql_query("SELECT id FROM users WHERE email = '".$_POST['email']."' LIMIT 1;") or die(mysql_error());
if (mysql_num_rows($old_email) > 0) { array_push($errors, 'There is an existing account with this email.'); }
if ($_POST['password1'] != $_POST['password2']) { array_push($errors, 'The password does not match'); }
if (sizeof($errors) == 0) {
//htmlentities($_POST['username'], ENT_QUOTES);
$username = htmlentities($_POST['username'], ENT_QUOTES);
$email = htmlentities($_POST['email'], ENT_QUOTES);
$password1 = htmlentities(sha1($_POST['password1']), ENT_QUOTES);
mysql_query("INSERT into users (name, hashed_psw, email, joined)
VALUES ('{$username}', '{$password}', '{$email}', NOW());") or die(mysql_error());
}
}
?>
下面:
<div class="container v-align-transform">
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<div class="feature bordered text-center">
<h4 class="uppercase">Register Here</h4>
<?php
foreach($errors as $e) {
echo $e;
echo "<br />n";
}
?>
<form class="text-left" action="register.php" method="post">
<input type="text" name="username" value="" placeholder="Username" />
<input type="text" name="email" value="" placeholder="Email Address" />
<input type="password" name="password1" value="" placeholder="Password" />
<input type="password" name="password2" value="" placeholder="Confirm Password" />
<input type="submit" name="submit" value="Register" />
</form>
<p class="mb0">By signing up, you agree to our
<a href="/">Terms Of Use</a>
</p>
</div>
</div>
</div>
</div>
我尝试找到了什么问题,但找不到任何东西。
您应该考虑纽扣有一些问题。
- 不要使用
mysql_*
功能。使用PDO
或至少使用mysqli_*
功能。 - 消毒您的SQL数据。否则。
- 无需使用
array_push
(如果需要的话,可以使用它),您可以使用速记版本:$errors[] = "New Error"
- 不要使用SHA1/MD5/ETC HASHES进行密码。而是使用盐的哈希。
- 您的表单方法是
POST
,但是您正在检查$_GET
...将其切换到$_POST
(包括您已发布的变量)