2012-02-07 58 views
0

我几乎没有使用PHP的经验,现在我被困在总的开始,这真是令人沮丧。我有一个代码,这似乎工作。从我的应用程序中,我可以输入值并将它们放入我的PHP数据库中。事情是,他只输入我的PHP代码的最后一个值。所以应用程序放在一边:如果我只使用PHP代码在我的数据库中输入某些内容,他总是只取最后一个值。这里是我的代码:PHP数据库只输入最后一个值

<?php 
$DB_HostName = "localhost"; 
$DB_Name = "xxx"; 
$DB_User = "xxx"; 
$DB_Pass = "xxx"; 
$DB_Table = "contacts"; 

if (isset ($_GET["name"])) 
    $name = $_GET["name"]; 
else 
    $name = "Blade"; 

if (isset ($_GET["lastname"])) 
    $lastname = $_GET["lastname"]; 
else 
    $lastname = "Xcoder"; 

if (isset ($_GET["number"])) 
    $number = $_GET["number"]; 
else 
    $number = "111"; 

$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error()); 
mysql_select_db($DB_Name,$con) or die(mysql_error()); 

$sql = "insert into $DB_Table (Firtname) values('$name');"; 
$sql = "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql = "insert into $DB_Table (Number) values('$number');"; 

$res = mysql_query($sql,$con) or die(mysql_error()); 

mysql_close($con); 
if ($res) { 
    echo "success"; 
}else{ 
    echo "faild"; 
}// end else 
?> 

澄清:如果我只有名字的价值,他输入其在正确的地方(名字)。如果我有名字和姓氏值,他只输入姓氏值,但不输入姓氏值(仍位于姓氏正确的位置)。数字也一样。如果我有名字,姓氏和数字,他只会将数字放在正确的位置,而不是其他数值。另外我只能做一次。如果我想进入另一个联系人,他总是说(重复输入'myentry'键'PRIMARY')。

+3

你有一个SQLI漏洞。 – PeeHaa 2012-02-07 18:03:09

回答

2

您覆盖您的查询,2种方法来解决。可以是3个不同的变量,也可以是1个变量,其中有3个查询。我宁愿第二个选项

$sql = "insert into $DB_Table (Firtname) values('$name');"; 
$sql .= "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql .= "insert into $DB_Table (Number) values('$number');"; 

$res = mysql_query($sql,$con) or die(mysql_error()); 

或者,如果它可以在表1点的行,因为它是在同一个表反正:

$sql = "insert into $DB_Table (Firtname,Lastname,Number) values('$name','$lastname','$number');"; 
$res = mysql_query($sql,$con) or die(mysql_error()); 
0

这是因为您对所有3个查询使用相同的变量名称($sql)。改为使用$sql1,$sql2$sql3。此外,请致电mysql_query(但前提是您已设定)。

像这样:

$sql1 = "insert into $DB_Table (Firtname) values('$name');"; 
$sql2 = "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql3 = "insert into $DB_Table (Number) values('$number');"; 

if (isset ($sql1)) 
{ 
    $res1 = mysql_query($sql1,$con) or die(mysql_error()); 
} 

if (isset ($sql2)) 
{ 
    $res2 = mysql_query($sql2,$con) or die(mysql_error()); 
} 

if (isset ($sql3)) 
{ 
    $res3 = mysql_query($sql3,$con) or die(mysql_error()); 
} 
+0

不好的建议,因为表是完全一样的,他的SQL一起糟糕。 – thenetimp 2012-02-07 18:04:44

+0

好吧,真的,一切都可以在一个查询中完成。但至少可以解决他的问题...... – 2012-02-07 18:06:56

2

因为要覆盖在接下来的2线$ sql中,所以最终的SQL线是什么插入。

如果你希望他们都在同一行,你的sql是错误的。

$sql = "insert into $DB_Table (Firtname,lastname,number) values('$name','$lastname','$number');"; 
2

您每次都覆盖$sql字符串。

也许你打算使用.=将所有三个查询附加在一起。数据库表的结构是什么?

$sql = "insert into $DB_Table (Firtname) values('$name');"; 
$sql .= "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql .= "insert into $DB_Table (Number) values('$number');"; 
2

您正在覆盖您的$sql报表。你必须执行它们。在做:

$sql = "Insert INTO..." 

你只是设置一个变量。您需要使用mysql_query()来查询每个查询。

我也猜你想这样做:

$sql = "INSERT INTO $DB_TABLE (Firstname, Lastname, Number) VALUES ('$name', '$lastname', '$number') 

最后,它是你净化你的输入关键

$name = mysql_real_escape_string($_GET["name"]); 

多亏了这一点,你避免SQL注射攻击。