PHP脚本不在MySQL数据库中添加行

时间:2013-08-18 13:14:53

标签: php mysql

我目前正在使用我网站的登录/注册页面,但我遇到的问题是PHP脚本没有在数据库中添加行。我一直试图解决这个问题几天,但我还没有找到解决方案。提交时页面上没有错误......

<?php

    mysql_connect("localhost", "username", "password") or die(mysql_error());
    mysql_select_db("test") or die(mysql_error());

    if(isset($_POST['f_name']) && !empty($_POST['f_name']) && 
       isset($_POST['l_name']) && !empty($_POST['l_name']) && 
       isset($_POST['reg_email']) && !empty($_POST['reg_email']) && 
       isset($_POST['conf_email']) && !empty($_POST['conf_email']) && 
       isset($_POST['password']) && !empty($_POST['password']) && 
       $_POST['birthday-day'] != 0 && 
       $_POST['birthday-month'] != 0 && 
       $_POST['birthday-year'] != 0) 
    {

    $f_name = mysql_real_escape_string($_POST['f_name']);
    $l_name = mysql_real_escape_string($_POST['l_name']);
    $reg_email = mysql_real_escape_string($_POST['reg_email']);
    $conf_email = mysql_real_escape_string($_POST['conf_email']);
        $password = mysql_real_escape_string($_POST['password']);
    $b_day = $_POST['birthday-day'];
    $b_month = $_POST['birthday-month'];
    $b_year = $_POST['birthday-year'];

    $search = mysql_query("SELECT email FROM users WHERE email='".$reg_email."'");
    $match = mysql_num_rows($search);

    if($reg_email !== $conf_email) {

        $msg = "The emails dont match.";

    }

    if (!preg_match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$^", $reg_email)) {

        $msg = "The email you have entered is invalid. Please try again.";
    }

    if ($match > 0) {

        $msg = "Email address already registered. Please enter a different one.";
    } else {

        mysql_query("INSERT INTO userstest (f_name, l_name, email, password) VALUES(
            '".$f_name."',
    '".$l_name."',
    '".$reg_email."',
    '".$password."') ") or die(mysql_error());

        }

}

else {

    //code

}

...表格

<form name="register" action="<?php print ($_SERVER['PHP_SELF']); ?>" method="post" class="regform" >

    <input type="text" name="f_name" class="f_name" placeholder="First Name" />
    <input type="text" name="l_name" class="l_name" placeholder="Last Name" />
    <input type="text" name="reg_email" class="reg_email" placeholder="Email" />
    <input type="text" name"conf_email" class="conf_email" placeholder="Re-enter Email" />
    <input type="password" name="password" class="reg_pass" placeholder="Password" />

    <div id="birthday">

        <h1>
            BIRTHDAY
        </h1>

        <select name="birthday-day" id="day" class="day">

            <option value="0">Day</option>
            <option value="01">1</option>
            <option value="02">2</option>
            <option value="03">3</option>
            <option value="04">4</option>
            <option value="05">5</option>
            ...etc


        </select>

        <select name="birthday-month" class="month">

            <option value="0">Month</option>
            <option value="01">Jan</option>
            <option value="02">Feb</option>
            <option value="03">Mar</option>
            <option value="04">Apr</option>

        </select>

        <select name="birthday-year" class="year">

            <option value="0">Year</option>
            <option value="1994">1994</option>

        </select>

    </div>

    <div id="submitbutton">

        <input type="submit" name="submit" class="reg_submit" value="REGISTER" />

    </div>

</form>

这可能是一个简单的语法错误,我没有看到,但我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

以下是我的原始答案,它产生了导致答案的主题。由于这不会帮助很多寻求解决方案的人,这将使事情变得更加清晰:

在表单顶部显示之前已提交之后,添加以下代码:

    $super_test = (
        isset($_POST['f_name'])     && !empty($_POST['f_name']) 
    &&  isset($_POST['l_name'])     && !empty($_POST['l_name']) 
    &&  isset($_POST['reg_email'])  && !empty($_POST['reg_email']) 
    &&  isset($_POST['conf_email']) && !empty($_POST['conf_email']) 
    &&  isset($_POST['password'])   && !empty($_POST['password']) 
    &&  $_POST['birthday-day'] != 0 
    &&  $_POST['birthday-month'] != 0 
    &&  $_POST['birthday-year'] != 0
    ) ;

    dump($_POST);
    die(dump($super_test));

这会立即显示$ _POST变量(conf_email)中缺少的字段,然后在这种情况下缩小为缺少的“=”符号。

魔术函数dump()来自@PhilSturgeon:

function dump()
{
    list($callee) = debug_backtrace();
    $arguments = func_get_args();
    $total_arguments = count($arguments);

    echo '<fieldset style="background: #fafafa !important; border:2px cornflowerblue solid; padding:6px; font-size: 10px;">';
    echo '<legend style="background:lightgrey; padding:5px;">'.$callee['file'].' @ line: '.$callee['line'].'</legend><pre>';

    $i = 0;
    foreach ($arguments as $argument)
    {
        echo '<br/><strong>Debug #'.(++$i).' of '.$total_arguments.'</strong>: ';

        if ( (is_array($argument) || is_object($argument)) && count($argument))
        {
            print_r($argument);
        }
        else
        {
            var_dump($argument);
        }
    }

    echo '</pre>' . PHP_EOL;
    echo '</fieldset>' . PHP_EOL;
}

- 摘要结束 -

<小时/> 你有

$reg_email = mysql_real_escape_string($_POST['reg_email']);

然后你有

$search = mysql_query("SELECT email FROM users WHERE email='".$reg_email."'");

查询可能永远不会匹配,因为$ reg_email会发生某种情况,使其与数据库列的值不同。

无论如何,我会:

  • 在阅读mysql_select的{​​{1}}下添加一行,以查看输入页面的内容(第一个调试步骤)
  • die(print_r($_POST))之前添加一行到if match ...,因为它可能会被覆盖。
  • 我会将查询构建分为两个阶段,并在那里强制输出,我会将其移到echo $msg上方,以便您可以始终查看查询而不管逻辑:

    $ query =“INSERT INTO userstest(f_name,l_name,email,password)VALUES(         ' “$ f_name”。', ' “$ l_name”。', ' “$ reg_email”。', '“。$ password。”')“; echo $ query; mysql_query($ query)...