1

我正在尝试通过提交表单数据在数据库中创建一个新条目。它完成了整个代码而没有任何错误,但没有在数据库中显示任何新元素。

有人知道发生了什么吗?

}elseif(isset($_GET["new"])){//add new 
        if($_GET['changeme']=="yes") //if user pressed save, then update table
    {
        $name = $_POST["name"];
        $active = $_POST["active"];
        $email = $_POST["email"];
        $training = $_POST["training"];
        $trials = $_POST["trials"];
        $BHV = $_POST["BHV"];
        $tours = $_POST["tours"];
        $pasnr = $_POST["pasnr"];
        $pasactivated = $_POST["pasactivated"];
        $pastested = $_POST["pastested"];   

        mysql_query("INSERT INTO Members (name, active, email, training, trials, BHV, tours, pasnr, pasactivates, pastested) VALUES
                    ('$name', '$active', '$email', '$training', '$trials', '$BHV', '$tours', '$pasnr', '$pasactivates', '$pastested')"); 
        //show end text
        echo "Edit complete!<br />
        <form><input type='button' onClick=\"parent.location='users.php'\" value='OK'></form>";
    }else{//user didn't press save

    ?>
    <!--Edit form-->
    <form action="users.php?new=1&changeme=yes" method="post">
    Name:<br>
    <input name="name" type="text" value="name" size="79"><br>
    <input type="checkbox" name="active" value="1" />Active 
    <input type="checkbox" name="BHV" value="1"  />BHV 
    <input type="checkbox" name="pasactivated" value="1"  />Pas activated 
    <input type="checkbox" name="pastested" value="1"  />Pas Tested <br>
    E-mail: <br>
    <input name="email" type="text" value="email" size="79"><br>
    Training Dates: <br>
    <input name="training" type="text" value="training" size="79"><br>
    Trial Dates: <br>
    <input name="trials" type="text" value="trials" size="79"><br>
    # Tours: <br>
    <input name="tours" type="text" value="tours" size="79"><br>
    Pas Nummer: <br>
    <input name="pasnr" type="text" value="pasnr" size="79"><br>
    <input type="submit" name="Submit" value="Create">
    <input type='button' onClick="parent.location='users.php'" value='Back to list'>
    </form>

    <?
}}
4

2 回答 2

2

您的代码假定 mysql_query() 没有检查就成功了。如果您的查询成功,该语句将返回 true,否则返回 false。您应该检查返回值并根据需要使用 mysql_error() 来获取错误消息。

出于调试目的,这可以通过以下方式完成:

mysql_query(...) or die( mysql_query() )

但是,在生产代码中,这可能会给用户带来丑陋的错误。一种生产安全的方法是记录错误或通过电子邮件发送错误:

$response = msyql_query('INSERT INTO ...');
if (false === $response) { 
    // Log or email the output of mysql_error()
}

当您实施错误日志记录时,您可能会发现您的查询由于变量命名错误而失败。您在这里分配一个变量:

$pasactivated = $_POST["pasactivated"];

但在查询中,拼写不同:

mysql_query(...'$pasactivates'...);

最后,您应该注意,您的查询会使您的数据库容易受到 SQL 注入攻击。在插入数据库之前,应清理所有用户输入。如果必须使用这些mysql_函数,可以使用mysql_real_escape_string()转义输入,但为了获得最佳结果,请考虑使用mysql_*PDO 替换已弃用的函数并使用参数化查询。

于 2013-06-14T22:15:18.227 回答
0

请改用此行:

mysql_query("INSERT INTO Members (name, active, email, training, trials, BHV, tours, pasnr, pasactivates, pastested) VALUES
                    ('$name', '$active', '$email', '$training', '$trials', '$BHV', '$tours', '$pasnr', '$pasactivates', '$pastested')");

请记住在以这种方式插入变量之前对其进行清理,或者,您可以使用准备好的语句。

此外,如果可能,鼓励使用 mysqli 扩展而不是 mysql。

请阅读以下链接,这将帮助您处理 mysql 错误:

http://php.net/manual/en/mysqli.error.php

于 2013-06-14T21:44:35.277 回答