2012-04-18 25 views
1

このページを使用して、ニュースレターを更新したか、新しいニュースレターを作成したかどうかを確認します。これは、データベースに何の問題を接続しないと更新されますが、私はそれが私にこのエラーを与えるとして、それは新鮮なものを挿入するために取得することはできません。PHPのifステートメントの奇妙な問題

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

私はif文を削除し、ちょうど新しいを挿入するためにそれを強制した場合それは問題なしで動作します。

アドバイスをいただければ幸いです。ありがとうございます。

<?php 
$server = "localhost"; 
$username = "user"; 
$password = "****"; 
$database = "test"; 

$con = mysql_connect($server, $username, $password); 

$title = $_POST["title"]; 
$body = $_POST["body"]; 
$transaction = "Record Added"; 

if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db($database, $con); 

if(isset($_POST["id"])) 
{ 
    $sql = "INSERT INTO newsletter (date, title, body) 
    VALUES('1990-12-12', '$title', '$body')";  
} 
else 
{ 
    $id = $_POST["id"]; 
    $transaction = "Record Updated"; 
    $sql = "UPDATE newsletter SET title='".$title."', body='".$body."' WHERE newsletterId =".$id; 
} 

if (!mysql_query($sql,$con)) 
{ 
    die('Error: ' . mysql_error()); 
} 

echo $transaction; 

mysql_close($con); 
?> 
+1

クエリを引用しますか? – Jules

+0

if()内に$ sqlの値を出力し、 – Shocker

+1

を表示します。SQLインジェクションに対して脆弱な2つのフィルタリングされていない値 '$ title'と' $ body'があります。 ''。 –

答えて

3

あなたのロジックが不備IDが掲載されている場合、あなたは挿入しようと何のIDが掲載されていないときに更新しようと思わ:

if(isset($_POST["id"])) 
{ 
    $id = $_POST["id"]; 
    $transaction = "Record Updated"; 
    $sql = "UPDATE newsletter SET title='".$title."', body='".$body."' WHERE newsletterId =".$id;   
} 
else 
{ 
    $sql = "INSERT INTO newsletter (date, title, body) 
    VALUES('1990-12-12', '$title', '$body')"; 
} 

あなたのエラーはどこから来るのである。つまり、あなたの$idがあります空の。

それ以外にも、SQLインジェクションを調べる必要があります。準備文に切り替えることが最善の方法です。あなたは**れた** if文を削除した場合

+0

ありがとう!どうやって一緒に作ったのか分かりません。 SQLインジェクションの保護は、私が取り組んでいる次のものです、私は正しい軌道にいると聞いてうれしいです。 – FunkyMonk91

0

が正しく

$sql = "UPDATE newsletter SET title='".$title."', body='".$body."' WHERE newsletterId ='$id'"; 
+0

ありがとうございました! – FunkyMonk91