programing

원인: "알림:초기화되지 않은 문자열 오프셋"이 표시됩니까?

css3 2023. 9. 2. 08:45

원인: "알림:초기화되지 않은 문자열 오프셋"이 표시됩니까?

사용자가 작성하는 양식이 있으며, 양식에는 "프로젝트 이름", "프로젝트 날짜", "카테고리" 등의 동일한 필드가 여러 개 있습니다.사용자가 제출하는 양식 수에 따라 다음을 수행하는 것이 목표입니다.

  1. 서식 수를 반복합니다.
  2. 개별 SQL 삽입 문 만들기

그러나 PHP는 내가 이해하지 못하는 것처럼 보이는 알림을 보냅니다.

알림:

주의: 초기화되지 않은 문자열 오프셋: 1 ... dataPasser.php on line 90

PHP

$myQuery = array();

if ($varsCount != 0)
{
  for ($i=0; $i <= $varsCount; $i++)
  {
    $var = "insert into projectData values ('" . $catagory[$i] . "', '" .  $task[$i] . "', '" . $fullText[$i] . "', '" . $dueDate[$i] . "', null, '" . $empId[$i] ."')";
    array_push($myQuery, $var);     
  }
}

제가 가지고 있는 이 문제에 대한 언급들이 있지만, 그것들은 정확하지 않고 저는 실제 문제가 어디에서 비롯되었는지 추론하는 데 어려움을 겪고 있습니다.어레이가 제대로 초기화되지 않는 원인을 파악하는 데 도움을 주시면 감사하겠습니다.

이 오류는 다음 변수 중 하나가 실제로 배열이 아닌 문자열이거나 null인 경우에 발생하며, 이 경우 배열 구문으로 액세스합니다.$var[$i]문자열의 특정 문자에 액세스하려고 시도하는 것과 같습니다.

$catagory
$task
$fullText
$dueDate
$empId

간단히 말해서, 삽입 쿼리의 모든 내용입니다.

아마도$catagory변수의 철자가 틀립니까?

이는 어레이 중 하나가 실제로 어레이가 아니라는 것을 의미합니다.

그런데, 당신의 if 체크는 불필요합니다.$varsCount가 0이면 for 루프가 실행되지 않습니다.

어레이를 반복하는 횟수가 어레이의 실제 크기보다 클 경우 오류가 발생할 수 있습니다.예:

 $one="909";
 for($i=0;$i<10;$i++)
    echo ' '.$one[$i];

오류가 표시됩니다.첫 번째 경우 당신은 i의 모드를 취할 수 있습니다.예를들면

function mod($i,$length){
  $m = $i % $size;
  if ($m > $size)
  mod($m,$size)
  return $m;
}

for($i=0;$i<10;$i++)
{
  $k=mod($i,3);
  echo ' '.$one[$k];
}

또는 배열이 아닐 수도 있습니다(아마도 값일 수도 있고 배열처럼 액세스하려고 했을 수도 있습니다).

$k = 2;
$k[0];

어레이를 사용하기 전에 어레이를 테스트하고 초기화해 보십시오.

if( !isset($catagory[$i]) ) $catagory[$i] = '' ;
if( !isset($task[$i]) ) $task[$i] = '' ;
if( !isset($fullText[$i]) ) $fullText[$i] = '' ;
if( !isset($dueDate[$i]) ) $dueDate[$i] = '' ;
if( !isset($empId[$i]) ) $empId[$i] = '' ;

한다면$catagory[$i]존재하지 않습니다. (초기화되지 않은) 하나를 생성합니다.그게 전부입니다; => PHP는 주소의 테이블에서 읽으려고 노력합니다.$i하지만 이 주소에는 아무 것도 없습니다. 이 주소는 존재하지 않습니다. => PHP는 알림을 반환하고 문자열에 아무것도 입력하지 않습니다.따라서 코드가 깨끗하지 않고 서버 성능을 저하시키는 리소스가 필요합니다(아주 조금만).

MySQL 테이블 기본값 관리

if( !isset($dueDate[$i]) ) $dueDate[$i] = '0000-00-00 00:00:00' ;

또는

if( !isset($dueDate[$i]) ) $dueDate[$i] = 'NULL' ;

다음을 사용하여 어레이의 내용을 체크아웃합니다.

echo '<pre>' . print_r( $arr, TRUE ) . '</pre>';

언급URL : https://stackoverflow.com/questions/1263636/what-causes-notice-uninitialized-string-offset-to-appear