2011-12-06 36 views
1

我有以下的PHP應該從表單讀取條目,然後更新相應的數據表以及附加登錄用戶的用戶名,但由於某種原因,我們的數據庫isn'更新。mySQL_query沒有更新表

$Date = $_POST["Date"]; 
$Description = $_POST["Description"]; 
$Hour = (float)$_POST["Lat"]; 
$Min = (float)$_POST["Lon"]; 
$Username = $_SESSION['username']; 
mysql_connect("localhost", "dbusername", "dbpass"); 
mysql_select_db("dbname",$connect) or die("Unable to select database"); 

$sql = ("INSERT INTO Table (Date, Description, Hour, Min, Username) 
VALUES ($Date, $Description, $Lat, $Lon, $Username)"); 

if (!mysql_query($sql)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

mysql_close($con); 

echo $Date; 
echo $Description; 
echo $Hour; 
echo $Min; 
echo $Username; 

預先感謝您的任何幫助

+0

您是否收到任何錯誤訊息? – rdlowrey

+0

不,我沒有,沒有任何新的行在數據庫中創建是主要問題 – MadMoney

+0

你可以發佈'echo $ sql;'的結果以及mysql查詢的結果:'SHOW CREATE TABLE tbl_name'其中'tbl_name'是你的表的名字? –

回答

4

您沒有用單引號括您的查詢的輸入變量。

$sql = ("INSERT INTO Table (Date, Description, Hour, Min, Username) 
    VALUES ('$Date', '$Description', '$Lat', '$Lon', '$Username')"); 

你叫mysql_error()上查詢失敗,據推測,它印有語法錯誤附近的第一日期輸入值。

在將它們傳遞給查詢之前,您還必須使用mysql_real_escape_string()將變量$_POST轉義,以保護自己免受SQL注入攻擊。

$Date = mysql_real_escape_string($_POST["Date"]); 
$Description = mysql_real_escape_string($_POST["Description"]); 
// You might want to check sane bounds for these float values 
// in addition to casting them as floats 
$Hour = (float)$_POST["Lat"]; 
$Min = (float)$_POST["Lon"]; 
// Hopefully $Username is already sane, but escape to be safe 
$Username = mysql_real_escape_string($_SESSION['username']); 

當調用mysql_select_db(),第二個參數是可選的,的確你沒有在你的代碼中定義$connect。我懷疑你的意思是:

$connect = mysql_connect("localhost", "dbusername", "dbpass"); 
mysql_select_db("dbname",$connect) or die("Unable to select database"); 
+0

我需要這樣做嗎? $ Date = mysql_real_escape_string($ _ Post(「Date」)) 還是應該使用不同的表達式?感謝您的快速回復 – MadMoney

+0

@MadMoney我已經在上面添加了它。 –

+0

我更新的代碼並運行 日期的測試值:2012年12月11日 說明:實例 小時:10 最小:50 和用戶是ExampleUser 登錄網站返回我下面的錯誤: 錯誤:您的SQL語法有錯誤;請檢查與您的MySQL服務器版本相對應的手冊,在第2行的',10,50,'附近使用正確的語法。' 這是否代表浮點問題?再次非常感謝你幫助我解決這個問題。我對這種東西很失落。 – MadMoney

0

嗯,這裏有很多很棒的建議,但在發佈代碼時有一個明顯的問題。你是從後到PHP變量名爲$小時和分別爲$閔但是分配經度和緯度值...

$Hour = (float)$_POST["Lat"]; 
$Min = (float)$_POST["Lon"]; 

,當你寫的查詢你指的這些值作爲$緯度和經度$分別....

$sql = ("INSERT INTO Table (Date, Description, Hour, Min, Username) 
VALUES ($Date, $Description, $Lat, $Lon, $Username)"); 

無處在你發佈你真的值賦給$緯度或經度$的代碼,但你希望它們的值分配給您的查詢參數。實質上,你在查詢中調用不存在的變量。