插入数据库

时间:2011-11-27 02:02:29

标签: php mysql sql

嘿伙计我知道这可能只是一个简单的sql语句,但我无法弄清楚问题。它将用户添加到数据库,但不会添加用户的名字。如果我在第一次命名之前切换sql语句,例如有用户名和电子邮件,那么就不会插入密码开关名称和电子邮件。有谁知道如何解决这个问题,并将所有信息插入到数据库中的正确表中。

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php

  $db_server = "server";
       $db_username = "name";
       $db_password = "pass";

       $con = mysql_connect($db_server, $db_username, $db_password);if (!$con)
                {
                    die('Could not connect: ' . mysql_error());
                }

               $database = "Account_Holder"; 

              $er = mysql_select_db($db_username);
        if (!$er) 
        {
         print ("Error - Could not select the database");
         exit;
        }        

        // table name
$tbl_name=Account_Holder;

// Random confirmation code
//$confirm_code=md5(uniqid(rand()));

// values sent from form
$firstName=$_POST['firstName'];
$email=$_POST['email'];
$password=$_POST['password'];
$username=$_POST['username'];



        // Insert data into database
$sql="INSERT INTO $tbl_name(firstname, username, email, password)VALUES('$firstname', '$username', '$email', '$password')";
$result=mysql_query($sql);

echo "You have been added to the database! You may now log on using your username."
       ?>
        <a href ="login.html"> Login Page </a>

    </body>
</html>

3 个答案:

答案 0 :(得分:3)

我的猜测是$_POST['firstname']而不是$_POST['firstName']

顺便说一句,在将用户输入放入数据库之前,您确实需要清理用户输入。编写SQL注入漏洞对于此代码是微不足道的。首先,通过mysql_real_escape_string()运行用户提供的值。就目前而言,如果用户输入包含撇号/单引号,则代码将无效。

如果您认为问题是查询产生了错误,请在mysql_error()之后立即使用mysql_query()查看是否存在错误。如果没有错误,它将返回一个空字符串。否则,它将返回错误。

另外,如果可能的话,我强烈建议在MySQL中使用散列函数存储密码(使用PASSWORD())。

答案 1 :(得分:1)

查看您的代码,除了主要的安全漏洞外,没有什么是错的。也许你从$_POST数组写了一些错误的值。在数组上执行print_r以查看确切的名称。

首先,您的代码极易受SQL injection攻击,您应该在每个用户输入上使用mysql_real_escape_string。您可以从不信任任何用户输入。

你应该让你的SQL看起来像:

$sql = "INSERT INTO $tbl_name (firstname, username, email, password) VALUES ('".mysql_real_escape_string($firstname)."', '".mysql_real_escape_string($username)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($password)."')";

我不确定无效空格是否会对查询产生任何影响,但是必须使其更容易阅读。如果你不确定什么是错的,你应该总是使用mysql_error来显示错误,如下所示:

$result=mysql_query($sql) or die(mysql_error());

第三件也是最后一件事。您应该从不将密码作为明文存储在数据库中。为了上帝的爱,请hash它或它: - )

答案 2 :(得分:0)

我认为这是你的问题。你的名字变量有一个名字的国会大厦'N'。将您的代码更改为其中任何一个,它应该可以正常工作。

$sql="INSERT INTO $tbl_name(firstname, username, email, password)VALUES('$firstName', '$username', '$email', '$password')";

$firstname=$_POST['firstName'];

另外,我还建议使用PDO而不是常规MySQL。但那只是我......