2012-02-07 59 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注射攻擊。