2011-01-19 7 views
0

このコードでは、空の作品:!PHP!が空でないのはなぜですか?

if (!empty($p1_firstname)) 
mysql_query ("INSERT INTO cases VALUES ('','$case','$date_booked','$p1_firstname','$p1_lastname','$city')"); 

if (!empty($p2_firstname)) 
$register_case = mysql_query ("INSERT INTO cases VALUES ('','$case','$date_booked','$p2_firstname','$p2_lastname','$city')"); 

ではなく、このコード:

if (!empty($p1_firstname)) 
$passenger1 = 1; 
mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger1','$date_booked','$p1_firstname','$p1_lastname','$city')"); 

if (!empty($p2_firstname)) 
$passenger2 = 2; 
$register_case = mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger2','$date_booked','$p2_firstname','$p2_lastname','$city')"); 

それはまだフィールドが空の場合でも、クエリを行います。これを解決するには何ができますか?

+1

PS。 PDO(http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)を使用する必要があります。なぜなら、クエリーからエスケープしないとサイトはSQLインジェクションに脆弱です! PDOはこれに対してあなたを守る声明を作成しました! – Alfred

答えて

8

あなたが不足しているので、中括弧

if (!empty($p1_firstname)) { 
    $passenger1 = 1; 
    mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger1','$date_booked','$p1_firstname','$p1_lastname','$city')"); 
} 

if (!empty($p2_firstname)) { 
    $passenger2 = 2; 
    $register_case = mysql_query ("INSERT INTO cases VALUES ('','$case','$passenger2','$date_booked','$p2_firstname','$p2_lastname','$city')"); 
} 

行方不明中括弧は、その条件が満たされた場合if sが実行されます、次のステートメントだけすぐ意味します。 mysql_query()コールはブロックifの一部ではなく、変数がempty()かどうかにかかわらず実行されます。

中括弧を省略すると、コードを正しく字下げしないと、はこの種のエラーを検出することがさらに困難になります。あなたはそれをすることはできませんが、はるかに安全で時間が無駄になりません。良い押し込みの習慣を採用し、中括弧を使用して制御フローブロックを明確に示すことができます。

+0

ありがとう、問題を解決しました – Mike

関連する問題