2011-05-11 105 views
0

我想從html表單插入som數據到我的mySql數據庫服務器。簡單的html php插入mysql問題

這裏是我的html代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Add events</title> 
</head> 
<body> 
<form action="addevents.php" method="post"> 
     id: <input type="text" name="eventID" /> 
     <br></br> 
     larmkod: <input type="text" name="larmkod" /> 
     <br></br> 
     idArduinoT: <input type="text" name="idArduinoT" /> 
     <br></br> 
     handelse: <input type="text" name="handelse" /> 
     <br></br> 
     tid: <input type="text" name="tid" /> 
     <br></br> 
     rumNr: <input type="text" name="rumNr" /> 
     <br></br> 
     inneboendeNamn: <input type="text" name="inneboendeNamn" /> 
     <br></br> 
     overvakare: <input type="text" name="overvakare" /> 
     <input type="submit" /> 
</form> 
</body> 
</html> 

這裏是我的PHP代碼:

<?php 
$con = mysql_connect("localhost","humhum","humhum"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("arduino_db",$con; 

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('$_POST[eventID]', '$_POST[larmkod]', '$_POST[idArduinoT]', '$_POST[handelse]', '$_POST[tid]', '$_POST[rumNr]', 
    '$_POST[inneboendeNamn]', '$_POST[overvakare]')"; 

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

mysql_close($con) 
?> 

我不看這個問題是嗎? .. eventID是主鍵。

+1

不,我沒有看到這個問題。你沒有告訴我們。 – MJB 2011-05-11 20:14:31

+2

問題 - 你的sql注入攻擊是開放的,你必須在把數據放入db之前對數據進行清理 – 2011-05-11 20:16:07

+0

是的,我知道,但是我只是用它作爲out學校項目的臨時... – SHUMAcupcake 2011-05-11 20:17:26

回答

4

讓我們來看看...語法錯誤:

mysql_select_db("arduino_db",$con; 
           ^missing) 

SQL注入錯誤:

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('$_POST[eventID]', '$_POST[larmkod]', '$_POST[idArduinoT]', '$_POST[handelse]', '$_POST[tid]', '$_POST[rumNr]', 
    '$_POST[inneboendeNamn]', '$_POST[overvakare]')"; 

如果任何表單字段包含',你的查詢語句將是無效的。此外,小Bobby Tables將與您的系統有一天。

+0

你要先生!在你的系統中有一個現場日! – SHUMAcupcake 2011-05-11 20:30:09

+0

如果是缺少導致問題的''',PHP應該爲你提供一個語法錯誤,這表明錯誤報告是關閉的。這應該在你開發的時候開啓 – 2011-05-11 20:37:34

1

您所查詢的是錯誤的;)

試試這個:

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('{$_POST['eventID']}', '{$_POST['larmkod']}', '{$_POST['idArduinoT']}', '{$_POST['handelse']}', '{$_POST['tid']}', '{$_POST['rumNr']}', 
    '{$_POST['inneboendeNamn']}', '{$_POST['overvakare']}')"; 

看@你的逃避

和編輯

mysql_select_db("arduino_db",$con; 

進入

mysql_select_db("arduino_db",$con); 

你需要工作在你的安全順便說一句。這真的不安全!

+1

變量上的'{}'概念不是必需的。使用它很好,但不是必需的。 ''echo'{$ array ['x']}「'在語法上與'echo」$ array [x]「'相同,只要PHP關心一維數組。 – 2011-05-11 20:22:33

+2

嗯,我真的認爲$ array [x]應該至少是$ array ['x']與單引號,因爲它在這個例子中是一個關聯數組。 – Michael 2011-05-11 20:23:57

+0

'echo「$ array [x]」'在語法上不是相同的。它試圖解引用常量'x',並且如果未定義'x',則會引發通知錯誤。如果你定義('x','y')',那麼'echo「$ array [x]」'產生與echo相同的輸出$ array ['y']「' – 2011-05-11 20:25:17

1
$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('$_POST[eventID]', '$_POST[larmkod]', '$_POST[idArduinoT]', '$_POST[handelse]', '$_POST[tid]', '$_POST[rumNr]', 
    '$_POST[inneboendeNamn]', '$_POST[overvakare]')"; 

POST的這些引用中的每一個都有些不明確,並且由於未加引號的字符串而引發通知級錯誤。更加明確的語法:

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('{$_POST['eventID']}', '{$_POST['larmkod']}', '{$_POST['idArduinoT']}', '{$_POST['handelse']}', '{$_POST['tid']}', '{$_POST['rumNr']}', 
    '{$_POST['inneboendeNamn']}', '{$_POST['overvakare']}')"; 

然而,這仍然會導致SQL錯誤,或者更糟的是,SQL注入應的任何值包含'字符(等等)。這些值至少應通過mysql_real_escape_string()運行。或者,使用參數化查詢。

如果還有其他問題,最好的辦法是打開錯誤日誌記錄,並拖拽相關的日誌文件。你的apache error_log可能是一個很好的開始。

還需考慮在運行PHP -l檢測分析時的錯誤(運行時錯誤仍然沒有露面,直到運行時,不過)