2011-01-19 5 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

추 신. 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의 실행 얻을 다음과 같은에만 문 즉시 의미한다. mysql_query() 호출은 if 블록의 일부가 아니며 변수가 empty()인지 여부에 관계없이 실행됩니다.

중괄호를 생략하여 코드를 올바르게 들여 쓰지 않으면 이러한 종류의 오류가 더 잘 보이지 않게됩니다. 그렇게 할 수는 없지만 훨씬 더 안전하고 시간 낭비를 줄이고 좋은 들여 쓰기 습관을 채택하고 중괄호를 사용하여 제어 흐름 블록을 명확하게 나타낼 수 있습니다.

+0

감사합니다. 문제가 해결되었습니다. – Mike

관련 문제