2011-05-11 17 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

はいや、私は問題が表示されていない(ただし、まだ実行時までになりませんランタイムエラー)解析時のエラーを検出するためのphp -lを実行することを検討します。あなたは私たちに言わなかった。 – MJB

+2

problem-あなたはSQLインジェクション攻撃を受けていますが、dbに入れる前にデータを消毒する必要があります。 –

+0

はい、私は学校外のプロジェクトでtempを使用しています... – SHUMAcupcake

答えて

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はあなたのシステムで1日のフィールドを持ちます。

+0

あなたに!あなたのシステムで現場の日を過ごしてください! – SHUMAcupcake

+0

エラーが報告されていないことを示唆している、あなたの問題の原因となっていた ')'の場合、PHPは文法エラーを吐き出すはずです。それはあなたが開発している間にオンにされるべきです –

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; 

を編集

セキュリティbtwで作業する必要があります。これは本当に不安です!

+1

変数に関する '{}'の概念は必要ありません。それを使うのは良いことですが、必須ではありません。 'echo '{$ array [' x ']}' 'はPHPが1次元配列に関係する限り、' echo "$ array [x]" 'と構文的に同じです。 –

+2

本当に私は$ array [x]が最低$ array ['x']でなければならないと思っています。この例の連想配列 – Michael

+0

'echo" $ array [x] "'は構文的には同一ではないからです。定数 'x'を逆参照しようとし、' x'が定義されていなければ通知エラーを発生させます。あなたが 'define( 'x'、 'y')'ならば、 'echo" $ array [x] "'は 'echo 'と同じ出力を生成します$ array [' y ']" ' –

1

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は、開始するのに適しているかもしれません。

はまた