需要有关makin注册表的建议/指导

时间:2014-09-04 09:30:01

标签: php forms validation mysqli

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color:red;}
</style>
</head>
<body>

<?php
$username = $password = $email = "";
$usernameerr = $passworderr = $emailerr = "";

if ($_SERVER["REQUEST_METHOD"]=="POST") {

if (empty($_POST["username"])) {
    $usernameerr = "Please fill username";
} else {
    $username = test_input($_POST["username"]);
    if(!preg_match("/^[a-zA-Z]*$/",$username)) {
      $usernameerr = "Only letters allowed";
    }
}

if (empty($_POST["email"])) {
    $emailerr = "Please fill e-mail";
} else {
    $email = test_input($_POST["email"]);
    if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
      $emailerr = "not a valid e-mail";
    }
}

if (empty($_POST["password"])) {
    $passworderr = "Cannot be blank";
} else {
    $password = test_input($_POST["password"]);
    if(!preg_match("/^[a-zA-Z]*$/",$password)) {
      $pasworderr = "Must be Letters";
        }
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

$con = mysqli_connect('localhost','root','','my_db');
if (mysqli_connect_errno()) {
    echo "Fail to connect :".mysqli_connect_error();
}

$username = mysqli_real_escape_string($con, $_POST["username"]);
$password = mysqli_real_escape_string($con, $_POST["password"]);
$email = mysqli_real_escape_string($con, $_POST["email"]);

$sql = "INSERT INTO register(Username, Password, Email)
VALUES ('$username','$password','$email')";

if (!mysqli_query($con,$sql)) {
    die ('Error: '.mysqli_error($con));
}
echo "Registration successful";

mysqli_close($con);

?>

<h2>Register</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Username :<input type="text" name="username" value="<?php echo $username;?>">
          <span class="error">*<?php echo $usernameerr;?></span>
          <br><br>
Password :<input type="text" name="password" value="<?php echo $password;?>">
          <span class="error">*<?php echo $passworderr;?></span>
          <br><br>
E-mail :<input type="text" name="email" value="<?php echo $email;?>">
        <span class="error">* <?php echo $emailerr;?></span>
        <br><br>
        <input type="submit" value="submit" name="submit">
</form>


</body>
</html>

嗨,我是新手,我需要有关注册表的建议。所以这里是我的注册表单的代码,验证代码工作,它也提交数据到MySQL数据库。但问题是,它每次加载时都会向数据库提交数据(即使它是空白的)。我应添加哪些代码行以防止表单在未完全填充/填充正确格式时提交数据。 Thx提前。

3 个答案:

答案 0 :(得分:0)

请将您的DB-Connection和DB-Insert外包到一些单独的文件中,并按照ajax请求与他们交谈。

你的db-insert-query应该在验证之后和

结束时进行
if ($_SERVER["REQUEST_METHOD"]=="POST") {

答案 1 :(得分:0)

您必须检查字段中是否有任何数据。

只需在$email = mysqli_real_escape_string($con, $_POST["email"]);之后执行sql之前添加此行:

if ($username != "" && $password != "" && $email != "")
{
    //your sql and rest of the script goes here
}
else
{
    //don't save the data if it's not completed well
    //do whatever you want in that case no valid data was completed
}

注意:我只回答了你的问题,但要小心,你有一些实施错误。你应该只使用一个默认值为1的标志,如果在任何验证函数中发现错误,则应将falg设置为0并且应该在sql之前检查标志的值而不是检查内容<_POST变量再次。

编辑:为您的代码提供更好的解决方案 在sql:

之前添加此块
if ($usernameerr == "" && $passworderr == "" && $emailerr == "")
{
    //no errors, all fine we can add to the database
}
else
{
    //we have errors, do something but don't add the data
}

答案 2 :(得分:0)

You did not close the $_SERVER["REQUEST_METHOD"]=="POST" block properly.
Also inside the if ($_SERVER["REQUEST_METHOD"]=="POST") { block you can add another 
if condition as if(!empty($_POST["username"] && !empty($_POST["email"] && !empty($_POST["password"]) {....} 
相关问题