无法发送PHP表单

无法发送PHP表单,php,html,sql,forms,Php,Html,Sql,Forms,我使用以下代码为我的网站提供添加用户功能。我以前用过,效果很好。然而现在我已经改变了它,并根据我的需要进行了修改。然而,它似乎不起作用。我收到的错误消息是“请正确输入表单”,这是我在未发送各个字段的情况下设置的消息(请参阅下面粘贴的代码)。我想这可能是我搞砸了,所以我尝试了网站的代码,但它不起作用。这是wamp服务器设置的原因吗?还是cz 我正在检查是否只显示用户名和密码以及会话表单令牌 在只检查了上面的字段之后,我向数据库添加了更多的信息-名称、emailid等 我的数据库表的列数超过我传递的

我使用以下代码为我的网站提供添加用户功能。我以前用过,效果很好。然而现在我已经改变了它,并根据我的需要进行了修改。然而,它似乎不起作用。我收到的错误消息是“请正确输入表单”,这是我在未发送各个字段的情况下设置的消息(请参阅下面粘贴的代码)。我想这可能是我搞砸了,所以我尝试了网站的代码,但它不起作用。这是wamp服务器设置的原因吗?还是cz

  • 我正在检查是否只显示用户名和密码以及会话表单令牌
  • 在只检查了上面的字段之后,我向数据库添加了更多的信息-名称、emailid等
  • 我的数据库表的列数超过我传递的值数
  • 由于我是php授权和验证新手,我想不出任何可以调试的东西。任何帮助都将不胜感激。我在下面发布我的html表单和php代码。我的sql表有以下列:userid、firstname、lastname、username、password、emailid、teamname、money、total、points

    html表单-

    <?php
     
    /*** begin our session ***/
    session_start();
     
    /*** set a form token ***/
    $form_token = md5( uniqid('auth', true) );
     
    /*** set the session form token ***/
    $_SESSION['form_token'] = $form_token;
    ?>
     
    <form class="form-inline" method="post" action="useradd.php" name="login_form">
                  <p><input type="text" class="span2" name="firstname" id="firstname" placeholder="First Name"></p>
                              <p><input type="text" class="span2" name="lastname" id="Last Name" placeholder="Last Name"></p>
                              <p><input type="text" class="span2" name="username" id="username" placeholder="Username"></p>
                              <p class="help-block" style="font-size:12px"> Username should be between 4-20 characters long.</p>
                  <p><input type="Password" class="span2" name="Password" placeholder="Password"></p>
                              <p class="help-block" style="font-size:12px"> Password must be between 4-20 characters long. Must be alpha-numeric</p>
                              <p><input type="Password" class="span2" name="Password" placeholder="Re-Enter Password"></p>
                              <p><input type="text" class="span4" name="emailid" id="emailid" placeholder="Emaid ID - example@example.com"></p>
                              <p><input type="text" class="span2" name="teamname" id="teamname" placeholder="Team name"></p>
                              <p class="help-block" style="font-size:12px"> Select your Unique team name.</p>
                              <p>
                      <select class="selectpicker">
                         <option>The name of the city where you were born</option>
                         <option>The name of your first pet</option>
                         <option>What is your mother's maiden name</option>
                      </select>
                    </p>
                    <p><input type="text" class="span2" name="secretanswer" id="secretanswer" placeholder="Secret Answer"></p>
                    <p>
                                    <input type="hidden" name="form_token" value="<?php echo $form_token; ?>" /><br />
                  <p><button type="submit" class="btn btn-primary">Register</button></p>
                </form>
    
    
    

    用户名长度应在4-20个字符之间

    密码长度必须介于4-20个字符之间。必须是字母数字

    选择您唯一的团队名称

    你出生的城市的名字 你第一只宠物的名字 你母亲的娘家姓是什么


    您已经在表单name=“Password”中定义了两次,是否就是这样

    在表单中,您在
    name=“Password”
    上有一个大写字母“p”,但在useradd.php中,您的isset()测试$\u POST[“Password”](小p)


    对于这些类型的问题,我立即尝试找出进程失败的确切位置,因此我通常会坚持使用一堆
    echo“gottohere1”和回声“到达这里2”这样我就知道脚本在这里完成了,不再进一步。

    您确定收到了“请正确输入表单”错误吗?我在你的代码中找不到它。@Babblo很抱歉,出于沮丧,我改为“为上帝的爱工作”。它是我存储在
    $message
    变量中的第一个字符串,因此它工作正常。有什么问题吗?这就是我在表单详细信息未发送时应该得到的信息。我想不出为什么会是这样。请检查
    useradd.php
    codeOops开头的
    if-isset
    语句,对不起。。我没看见那辆车!SYMBOL这是用于“重新输入密码”字段的。我把它取下来再试一次。没有luckI知道,但您应该使用不同的名称来表示小写字段,这就是问题所在。我可以编辑它。现在我陷入了第二个错误消息中首先,此时您可能不需要那个错误消息。首先让它工作起来(我从来没有使用过令牌来验证表单…)无论如何,这可能就是问题所在:
    uniqid('auth',true)
    uniqid()
    函数不是PHP的一部分,因此它是本教程的一部分。也许里面有个打字错误?无论如何,如果我是你,我会禁用/删除该elseif,如果可以的话,稍后再返回。基本上,第一个文件创建一个名为
    form\u token
    的字符串,并将其保存为会话变量(称为form\u token)和隐藏字段。当发布到useradd.php时,它会根据几秒钟前设置的会话变量检查从该隐藏字段收到的内容。这取决于你:这对你的锻炼至关重要吗?如果/当其他一切正常时,我会立即删除并返回。。。(甚至可能不是这样)我认为uniqid可以作为用户ID存储在数据库中,在只有注册用户才能查看某些特定内容的情况下,可以稍后检查用户ID。通常,我们将数据库的第一个字段设置为“表名”ID(例如,用户表的“uid”,产品表的“pid”,等等)。我将其设置为INT(11),自动递增,主键(即索引列-主)。这是唯一的用户id。不需要另一个。
    <?php
    /*** begin our session ***/
    session_start();
    
    /*** first check that both the username, password, form token etc have been sent ***/
    if(!isset( $_POST['username'], $_POST['password'], $_POST['form_token']))
    {
        $message = 'work for the love of god';
    }
    /*** check the form token is valid ***/
    elseif( $_POST['form_token'] != $_SESSION['form_token'])
    {
        $message = 'Invalid form submission';
    }
    /*** check the username is the correct length ***/
    elseif (strlen( $_POST['username']) > 20 || strlen($_POST['username']) < 4)
    {
        $message = 'Incorrect Length for Username';
    }
    /*** check the password is the correct length ***/
    elseif (strlen( $_POST['password']) > 20 || strlen($_POST['password']) < 4)
    {
        $message = 'Incorrect Length for Password';
    }
    /*** check the username has only alpha numeric characters ***/
    elseif (ctype_alnum($_POST['username']) != true)
    {
        /*** if there is no match ***/
        $message = "Username must be alpha numeric";
    }
    /*** check the password has only alpha numeric characters ***/
    elseif (ctype_alnum($_POST['password']) != true)
    {
            /*** if there is no match ***/
            $message = "Password must be alpha numeric";
    }
    else
    {
        /*** if we are here the data is valid and we can insert it into database ***/
        $firstname = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
        $lastname = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
        $username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
        $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
        $emailid = filter_var($_POST['emailid'], FILTER_SANITIZE_STRING);
        $teamname = filter_var($_POST['teamname'], FILTER_SANITIZE_STRING);
        $secret_question = filter_var($_POST['secret_question'], FILTER_SANITIZE_STRING);
        $secret_answer = filter_var($_POST['secret_answer'], FILTER_SANITIZE_STRING);
        
    
        /*** now we can encrypt the password ***/
        $password = sha1( $password );
        
        /*** connect to database ***/
        /*** mysql hostname ***/
        $mysql_hostname = 'localhost';
    
        /*** mysql username ***/
        $mysql_username = 'root';
    
        /*** mysql password ***/
        $mysql_password = 'imagination';
    
        /*** database name ***/
        $mysql_dbname = 'adb project';
    
        try
        {
            $dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
            /*** $message = a message saying we have connected ***/
    
            /*** set the error mode to excptions ***/
            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
            /*** prepare the insert ***/
            $stmt = $dbh->prepare("INSERT INTO users (firstname,lastname,username,password,emailid,teamname, secret_question,secret_answer ) VALUES (:firstname,:lastname,:username,:password, :emailid,:teamname,:secret_question,:secret_answer)");
    
            /*** bind the parameters ***/
            $stmt->bindParam(':firstname', $firstname, PDO::PARAM_STR);
            $stmt->bindParam(':lastname', $lastname, PDO::PARAM_STR);
            $stmt->bindParam(':username', $username, PDO::PARAM_STR);
            $stmt->bindParam(':password', $password, PDO::PARAM_STR, 40);
            $stmt->bindParam(':emailid', $emailid, PDO::PARAM_STR);
            $stmt->bindParam(':teamname', $teamname, PDO::PARAM_STR);
            $stmt->bindParam(':secret_question', $secret_question, PDO::PARAM_STR);
            $stmt->bindParam(':secret_answer', $secret_answer, PDO::PARAM_STR);
    
            /*** execute the prepared statement ***/
            $stmt->execute();
    
            /*** unset the form token session variable ***/
            unset( $_SESSION['form_token'] );
    
            /*** if all is done, say thanks ***/
            $message = 'New user added';
        }
        catch(Exception $e)
        {
            /*** check if the username already exists ***/
            if( $e->getCode() == 23000)
            {
                $message = 'Username already exists';
            }
            else
            {
                /*** if we are here, something has gone wrong with the database ***/
                $message = 'We are unable to process your request. Please try again later"';
            }
        }
    }
    ?>
    
    <html>
    <head>
    <title>Login</title>
    </head>
    <body>
    <p><?php echo $message; ?>
    </body>
    </html>