无法将输入的数据插入数据库

时间:2014-06-01 02:46:43

标签: php forms undefined

我之前已经写了一个与此类似的问题,我似乎只修复了我的代码中的小错误,但大多数时候,当我修复一件事时,另一件事就出现了。

在澄清我的问题之前,我只想解释一下背景。基本上有两种注册形式,两种注册形式一个接一个地使用自己的输入设备和验证。当我在第一个注册表单中输入数据时,我按下一个,它将我带到第二个表单,我必须在完全“注册”之前填写其他信息。在我的第二个注册表单中,我使用了一个隐藏输入列表,例如<input type="hidden" name="name" value="<?php echo $_POST['name'];?>"/>,以便我可以保存第一个注册文件中的信息,并且在我进入下一个注册页面时仍然拥有相同的数据而不会完全丢失它。

以下是我的代码:

<?php
if (isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$name = $_POST['name'];
$lname = $_POST['lname'];
$address = $_POST['address'];
$agreement= $_POST['agreement'];
$conditions= $_POST['conditions'];
}

$conn = mysql_connect("localhost", "*****", "******");
 mysql_select_db("*********", $conn)
 or die ('Database not found ' . mysql_error() ); 

$sql= "INSERT INTO `users` (username, password, name, lname, address, agreement, conditions) 
VALUES (". $username .", ". $password .", ". $name .", ". $lname .", ". $address .", ". $agreement .", ". $conditions.")";

 $rs = mysql_query($sql, $conn) 
 or die ('Problem with query' . mysql_error()); 
 mysql_close($conn)
?>

我的表单已打开,但我收到错误列表

Notice: Undefined variable: username ... at line 140

第140行表示VALUES行与我的变量。

目前我只能说我知道我正在使用正确的数据库和表格,这就是为什么我输入的数据没有插入数据库的原因让我非常困惑。我已经尝试了很多方法,到目前为止还没有任何改进我的代码。

2 个答案:

答案 0 :(得分:-1)

您发布的代码段中似​​乎有一堆错误。

  

注意:未定义的变量:用户名...在第140行

首先,您收到的错误消息表示变量$username未设置。这可能是您的表单提交错误的问题。

阅读您拥有的代码,除非提交表格,否则您将始终收到错误。

if (isset($_POST['submit']))

这将仅在提交表单时分配您稍后使用的变量 - 但无论是否满足此条件,其余代码都将执行。

如果获得表单数据,只运行插入的最简单方法是在IF语句中弹出整个部分:

if (isset($_POST['submit'])) 
{
    $username = $_POST['username'];
    $password = $_POST['password'];
    $name = $_POST['name'];
    $lname = $_POST['lname'];
    $address = $_POST['address'];
    $agreement= $_POST['agreement'];
    $conditions= $_POST['conditions'];


    $conn = mysql_connect("localhost", "*****", "******");
     mysql_select_db("*********", $conn)
     or die ('Database not found ' . mysql_error() ); 

    $sql= "INSERT INTO `users` (username, password, name, lname, address, agreement, conditions) 
    VALUES (". $username .", ". $password .", ". $name .", ". $lname .", ". $address .", ". $agreement .", ". $conditions.")";

    $rs = mysql_query($sql, $conn) 
    or die ('Problem with query' . mysql_error()); 
    mysql_close($conn);

}

其次,当您按预期工作时,仍然需要在要插入数据库的所有字符串周围弹出引号。

VALUES ('". $username ."', // etc

第三,通过简单地将用户条目直接放入您的查询中,您就可以完全接受SQL注入 - 这是一种技术方式,可以说任何人都可以对您的数据库以及网站做任何事情。你应该真正使用准备好的语句,绑定params并使其安全 - 从一开始,而不是从以后开始工作......

答案 1 :(得分:-1)

您必须将值放在引号之间

试试这个:

$sql= "INSERT INTO `users` (username, password, name, lname, address, agreement, conditions) 
VALUES ('". $username ."', '". $password ."', '". $name ."', '". $lname ."', '". $address ."', '". $agreement ."', '". $conditions."')";

将$ _POST []中的数据注入SQL查询时要小心:您可能成为SQL注入的受害者!请阅读:SQL Injection

[编辑]

不推荐使用

mysql_query(),而应使用PDO代替