php-我的表单不是';t验证

php-我的表单不是';t验证,php,validation,Php,Validation,下面是表单的工作原理——它应该为以前没有访问过该站点的用户使用粘性标签,并为其提供一些默认值。当你提交表单时,它应该在页面上进行验证,如果有问题则刷新,如果一切正常,它应该将结果重定向到另一个页面。(我不需要在上面加上的部分,因为我是100%的人,这不是问题。) 你觉得怎么了?我让它接近我老师的密码 当你提交代码时,我所做的只是我的页面闪烁然后返回 <?php ob_start(); if (isset($_POST['submit'])) { $valid = tr

下面是表单的工作原理——它应该为以前没有访问过该站点的用户使用粘性标签,并为其提供一些默认值。当你提交表单时,它应该在页面上进行验证,如果有问题则刷新,如果一切正常,它应该将结果重定向到另一个页面。(我不需要在上面加上的部分,因为我是100%的人,这不是问题。)

你觉得怎么了?我让它接近我老师的密码

当你提交代码时,我所做的只是我的页面闪烁然后返回

<?php


ob_start();
    if (isset($_POST['submit'])) {

    $valid = true;
    $validate = true;

    $username = trim($_REQUEST['username']);
    $email = trim($_REQUEST['email']);
    $password = trim($_REQUEST['password']);
}
else
{ 
    $username = "";
    $email = "";
    $password = "";
    $valid = false;
    $validate = false;
}
?>
<html>
<body>
<form method="post" action="register.php">
<label for="username"> Username </label><input type="text" name="username" id="username"
 value="<?php echo $username ?>">
<?php   if ($validate) {
    if (empty($username)) { 
        echo "<p> There must be a username! </p>";
        $valid = false;
        }
    if (strlen($username) > 15) { 
        echo "<p> This username is too long! It must be 8-15 characters long! </p>";
        $valid = false;
    }
    if (strlen($username) < 8) {
        echo "<p> This username is too short! It must be 8-15 characters long! </p>";
        $valid = false;
    }
    } 
    ?>
<label for="email">E-Mail </label><input type="email" name="email" id="email"
 value="<?php echo $email ?>">
<?php  if ($validate) {
    if (empty($email)) {
        echo "<p> We need an email! </p>";
        $valid = false;
    }
}
?>
<label for="password">Password </label><input type="text" name="password" id="password" 
value="<?php echo $password ?>">
<?php if ($validate) {
    if (empty($password)) {
        echo "<p> We need a password! </p>";
        $valid = false;
    }
}
?>
<input type="submit" value="Register!" />
</form>
<?php
    if ($valid) { 
        require_once 'config/connection.php';

        $query = "INSERT INTO user (username, email, password) values ( $username, $email, $password);";
        $result = mysql_query($query, $dbConn);     
        if ($result) {
            $userid = mysql_insert_id();        
            header("Location:success.php?userid=$userid");
            ob_end_clean();
            exit();
        } else {
            echo "<p> Unable to Update Database! </p>";
        }
    }
    ob_end_flush();
    ?>
</body>
</html>

用户名

看起来您没有success.php页面,但确实有/registersuccessful.php页面

更改此项:

if ($result) {
            $userid = mysql_insert_id();        
            header("Location:success.php?userid=$userid");
            ob_end_clean();
            exit();
对此

if ($result) {
            $userid = mysql_insert_id();        
            header("Location:registersuccessful.php?userid=$userid");
            ob_end_clean();
            exit();

您检查了$_POST['submit'],但未提交此元素。将name='submit'添加到您的提交按钮(或者更好,给它另一个名称,如btnSubmit,并在您的帖子中检查):


您的提交按钮似乎没有
名称
属性,因此
设置($\u POST['submit'])
永远不会为真

试着给你的提交按钮
name=“submitted”
,并检查
isset($\u POST['submitted'])

编辑: 关于为什么不建议将提交按钮命名为“提交”,请参阅本帖:

“…当您创建一个名为submit的元素时,它将覆盖表单 内置的submit()方法

您容易受到SQL语法错误的攻击,并且也有SQL语法错误。即使代码确实到达了INSERT查询,查询也会由于以下错误而失败:

    $query = "INSERT [...snip...] values ('$username', '$email', '$password');";
                                          ^--       ^--^--    ^--^--       ^--

没有引用您插入的值。

请查看并查看
mysql\u错误中的内容
-我想问题在于您需要引用您传递的值。但是请注意,mysql_*已被弃用,并且您的代码容易受到SQL注入的攻击。你应该考虑改用mysqli_uu或PDO,因为它们都能让你更容易地编写更安全的代码。Andrew----说到PHP,我是个书呆子,所以我还没有进入安全领域。但是谢谢你。@Lalien Mileslarcoleman SQL注入问题不仅仅是安全问题。。。如果希望查询正常工作,则需要转义数据以在查询中使用。否则,每次需要撇号或引号或其他东西时,您都会花费大量时间来跟踪问题。另外,如果您在学习数据库编程时没有准备好/参数化的查询,那么您的学习是错误的。这不是你进步到的东西。。。您正在学习的内容完全不正确。这似乎是问题的根源,但不建议将提交按钮命名为“提交”,因为它可能与其他操作冲突。看这篇文章:接球不错。你是怎么找到那页的真名的?哦,糟了。我完全忘了上传success.php!非常感谢。我取得了进步,我从一无所获变成了我自己设定的一个实际错误!这太棒了@showdev我访问了基本目录。没有重定向或权限,因此任何人都可以查看它们。仍在学习安全性等内容。但这一次真的很有帮助!现在可以了!我希望我能投票支持你们所有人!但是我不够高!谢谢大家!!