PHP는

2011-12-04 3 views
0
$newusr_group = $type; 
$newusr_name = $_POST['name']; 
$newusr_world = $_POST['world']; 
if(!$newusr_world) { 
    $newusr_world = mysql_escape_string(NULL); 
} 
$sql = "INSERT INTO `permissions_inheritance` (`id`, `child`, `parent`, `type`, `world`)VALUES(NULL, '$newusr_name', '$newusr_group', '1', '".$newusr_world."');"; 

나는 양식 제출에서 몇 가지 값을 얻을, 나는 $의 newuser_world가 비어 있는지 확인 - 그것은 내가 MySQL을 NULL, 또는 데이터베이스를 읽고 응용 프로그램으로 설정해야하는 다음의 경우 어떤 이유로 행을 사용하지 않습니다.PHP는

그래서 제 질문은 :

가 어떻게 MySQL의 NULL 값을 제출하는 쿼리를 알려주는 PHP 변수를 설정합니까?

Stack Overflow와 Google을 검색했습니다.

감사합니다.

+4

** 경고 ** 귀하의 코드는 SQL 주입 공격에 시달릴 수 있습니다. –

+0

이것은 전체 코드가 아닙니다, Daniel. 이 페이지를 표시하려면 관리자 사용자로 로그인해야합니다. – 2xAA

+0

고대의 mysql_ * 함수를 사용하지 말고 준비된 문으로 [PDO] (http://php.net/PDO)를 사용하는 법을 배우십시오. –

답변

-2

시도해보십시오.

 
$newusr_world = (!empty($newusr_world)) ? $newusr_world : NULL; 
$sql="INSERT INTO `permissions_inheritance` (`child`, `parent`, `type`, `world`) VALUES ('$newusr_name', '$newusr_group', '1', '".$newusr_world."');"; 

+1

* 매우 잘못되었습니다. .. – Ryan

+0

경고 코드는 SQL 주입 공격에 suseptible입니다. 첫 번째 댓글이 – Sedz

1

그러면 NULL이됩니다. 또한, @DanielAWhite가 지적한대로 코드는 공격에 취약하고, 그 문제를 모두 한 번에 해결할 수 있습니다 :

$newusr_world = trim($_POST['world']); 

이 보장됩니다

$newusr_group = $type; 
$newusr_name = mysql_real_escape_string($_POST['name']); 
$newusr_world = $_POST['world']; 

if($newusr_world) { 
    $newusr_world = "'" . mysql_real_escape_string($newusr_world) . "'"; 
} else { 
    $newusr_world = 'NULL'; 
} 

$sql = "INSERT INTO `permissions_inheritance`(`id`, `child`, `parent`, `type`, `world`) 
     VALUES(NULL, '$newusr_name', '$newusr_group', '1', '$newusr_world');"; 
+0

되었습니다. 감사합니다. 잘 작동 : D – 2xAA

+0

@ 2xAA : 도와 주셔서 감사합니다. (이상하게도 나는 코멘트 알림을받지 못했다 ...) – Ryan

+0

+1 이것이 실제 코드인지 아닌지에 대한 논쟁이 있지만 조심해야한다는 점을 지적하고자한다. '$ newusr_name' (그리고 아마'$ newusr_group')을 통해 SQL 인젝션에 여전히 취약합니다. 각 값을 항상 위생적으로 기억하는 대신 범용 (코드베이스에) 메커니즘을 사용하는 것이 가장 좋습니다. – grossvogel

0

이이 방법으로 꼭 입력 필드에 사용자가 공백을 입력하더라도 ''로 변환 될 것이고 ''에 mysql이 이미 NULL과 동등하므로 null을 자동으로 설정합니다. :)

+1

mysql이 빈 문자열을 null로 취급한다고 말하는가? 그건 내 경험에 맞지 않아. – grossvogel

+0

그럴 경우이 $ sql = "INSERT INTO'permissions_inheritance' ('id','child','parent','type','world') VALUES (NULL, $ newusr_name ','$ newusr_group ','1 ', ". (빈 ($ newusr_world)?'NULL ':"'{$ newusr_world} '). ");"; Statement에서 new는 newusr_world 변수가 비어 있는지 확인합니다. 왜냐하면 빈 함수가 작동하는 ''= null = 0 = array()입니다. –

+0

@colighto : 답을 편집하십시오. 특히 적절한 코드 형식 지정이 없으면 여기에서 읽을 수 없습니다. – Ryan

1

NULL 값을 삽입하려면 삽입 할 값 대신 NULL을 쓰면됩니다. 우리는 newusr_world 변수가 비어 원인은 ''= NULL = 0 = 배열 ​​있는지 확인합니다 문 빈을에이

$sql = " 
INSERT INTO 
permissions_inheritance (
id, 
child, 
parent, 
type, 
world) 
VALUES(NULL, 
'$newusr_name', 
'$newusr_group', 
'1', 
".(empty($newusr_world) ? 'NULL' : "'{$newusr_world}'")." 
);"; 

같은 다른 접근 방식을 가질 수 http://dev.mysql.com/doc/refman/5.1/en/problems-with-null.html

0

확인도 그런 경우가 있는지 확인() 빈 함수가 작동하는 방법입니다.

+0

SQL 주입을 고려하십시오 – Sedz

+0

@UserB 그 점을 고려해야합니다. –