programing

NULL이 있는 PHP 폼 입력 배열

copyandpastes 2022. 9. 13. 23:48
반응형

NULL이 있는 PHP 폼 입력 배열

PHP 버전 7.1.9를 사용하여 MariaDB 10.1.26을 실행합니다.

MySQL 데이터베이스에 일련의 폼 데이터를 제출하고 있습니다.입력은 다음과 같습니다.

// I have removed additional html form code for brevity
<input type="text" name="ip[]">
<input type="text" name="ip[]">
etc...

입력이 비어 있는 경우,NULL여기서 문제가 발생하고 있습니다.

데이터베이스 테이블이 다음과 같이 설정되어 있는지 확인합니다.

  • allow null = yes
  • 디폴트 - null

폼 제출 처리를 위한 PHP 코드는 다음과 같습니다(보안 취약성은 무시해 주세요).

// I have removed additional php code for brevity
$arr_ip = $_POST['ip'];
for ($i = 0; $i < count($arr_ip); $i++) {
    $arr_ip[$i] = $arr_ip[$i] ? $arr_ip[$i] : 'NULL';
    $sql = "INSERT INTO staff (ip) VALUES ( ".$arr_ip[$i]." )
}

표시되는 오류는 다음과 같습니다.

SQLSTATE [ 42000 ]:구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다. 올바른 구문에 대해서는 MySQL 서버 버전에 대응하는 매뉴얼을 참조하십시오.

내가 할 때var_dump($arr_ip)알겠습니다.

array(2) {
  [0]=>
  string(15) "123.123.123.123"
  [1]=>
  string(0) ""
}

PHP를 다음과 같이 변경하는 경우(추가사항 알림)' '삽입에서는 쿼리가 정상적으로 실행되어 2개의 레코드가 삽입되지만 리터럴 워드가 삽입됩니다.NULL가 아닌 데이터베이스에 삽입됩니다.(NULL)가치.

$arr_ip = $_POST['ip'];
for ($i = 0; $i < count($arr_ip); $i++) {
    $arr_ip[$i] = $arr_ip[$i] ? $arr_ip[$i] : 'NULL';
    $sql = "INSERT INTO staff (ip) VALUES ( '".$arr_ip[$i]."' )
}

제가 무엇을 잘못하고 있는지, 그리고 어떻게 문제를 해결해야 하는지, 준비된 진술서를 사용하는 것 말고 누가 알려주시겠어요?

'모든 보안 취약점을 무시하십시오.'

그러나 보안 취약성으로 인해 오류가 발생합니다.

NULL을 통과하면 문제가 없지만 IP(아마도 문자열)를 통과하면 견적을 내지 않기 때문에 오류가 발생합니다.

단, 따옴표를 추가하면 NULL은 NULL이 아닌 문자열로 처리되므로 추가할 문자열이 됩니다.

준비된 스테이트먼트를 사용하여 이 문제를 방지할 수 있습니다.

참고로...

를 사용하여 코드를 심플하게 할 수 있습니다.foreach대신 루프를 하다for루프:

foreach ($_POST['ip'] as $ip) {
    // insert here
}

훨씬 깔끔해 보이고 타이핑하기 편해요.

또, 유효한 IP 가 전달되고 있는 것을 확인하려면 , filter_var올바른 플래그를 사용해 IP 검증을 실시하는 것도 추천합니다.

#2 편집

또 다른 방법은 다음을 확인하는 것입니다.NULLif 스테이트먼트를 통해:

if (is_null($ip)) {
    // don't quote
} else {
    // quote
}

그러나 준비된 스테이트먼트의 사용에 대해서는 다시 강조하지만, 준비된 스테이트먼트를 사용하기 위해 시스템을 다시 쓰는 데 걸리는 시간은 새로운 스킬을 습득하고 안전한 코드를 작성하는 경험을 쌓기 때문에 장기적으로 가치가 있습니다.

언급URL : https://stackoverflow.com/questions/52948572/php-form-input-array-with-nulls

반응형