에코를 시도하는 PHP 파일이 있는데 $_POST
오류가 발생합니다. 다음은 코드입니다.
echo "<html>";
echo "<body>";
for($i=0; $i<5;$i++){
echo "<input name='C[]' value='$Texting[$i]' " .
"style='background-color:#D0A9F5;'></input>";
}
echo "</body>";
echo "</html>";
echo '<input type="submit" value="Save The Table" name="G"></input>'
다음은 POST를 에코하는 코드입니다.
if(!empty($_POST['G'])){
echo $_POST['C'];
}
그러나 코드가 실행되면 다음과 같은 오류가 발생합니다.
Notice: Array to string conversion in
C:\xampp\htdocs\PHIS\FinalSubmissionOfTheFormPHP.php on line 8
이 오류는 무엇을 의미하며 어떻게 수정합니까?
답변
이름이 많은 HTML 입력 C[]
이있는 경우 다른 쪽 끝에있는 POST 배열에서 얻는 것은 $_POST['C']
. 그래서 echo
당신은 배열을 인쇄하려고 할 때 인쇄 Array
와 통지 만 수행합니다.
배열을 올바르게 인쇄하려면 배열과 echo
각 요소를 반복 하거나 print_r
.
또는 배열인지 문자열인지 모르는 경우 var_dump($var)
유형이 무엇인지, 내용이 무엇인지 알려주는 것을 사용할 수 있습니다 . 디버깅 목적으로 만 사용하십시오.
답변
PHP 공지의 의미와 재현 방법 :
당신이 좋아하는 캐릭터 라인을 기대하는 함수로 PHP 배열을 보낼 경우 echo
또는 print
다음 PHP 인터프리터가 리터럴 문자열로 배열을 변환합니다, Array
이 통지서를 던져 계속. 예를 들면 :
php> print(array(1,2,3))
PHP Notice: Array to string conversion in
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(591) :
eval()'d code on line 1
Array
이 경우 함수 print
는 리터럴 문자열 Array
을 stdout에 덤프 한 다음 알림을 stderr에 기록하고 계속 진행합니다.
PHP 스크립트의 또 다른 예 :
<?php
$stuff = array(1,2,3);
print $stuff; //PHP Notice: Array to string conversion in yourfile on line 3
?>
두 가지 옵션이 있습니다. 배열-문자열 변환기를 사용하여 PHP 배열을 String으로 캐스트하거나 PHP 알림을 표시하지 않습니다.
수정 1 : 내장 PHP 함수 print_r 또는 var_dump를 사용하십시오.
http://php.net/manual/en/function.print-r.php 또는 http://php.net/manual/en/function.var-dump.php
$stuff = array(1,2,3);
print_r($stuff);
$stuff = array(3,4,5);
var_dump($stuff);
인쇄물:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
array(3) {
[0]=>
int(3)
[1]=>
int(4)
[2]=>
int(5)
}
수정 2 : json_encode를 사용하여 배열을 json 문자열로 축소합니다.
$stuff = array(1,2,3);
print json_encode($stuff); //Prints [1,2,3]
수정 3 : 배열의 모든 셀을 함께 결합 :
<?php
$stuff = array(1,2,3);
print implode(", ", $stuff); //prints 1, 2, 3
print join(',', $stuff); //prints 1, 2, 3
?>
수정 4 : 고지 사항 억제 :
error_reporting(0);
print(array(1,2,3)); //Prints 'Array' without a Notice.
답변
<input name='C[]'
HTML에서 사용 하고 있습니다. 이것은 양식이 전송 될 때 PHP에서 배열을 생성합니다.
당신은 echo $_POST['C'];
그 배열을 에코하기 위해 사용 하고 있습니다-이것은 작동하지 않을 것이지만, 대신 그 통지와 단어 “Array”를 내 보냅니다.
나머지 코드로 수행 한 작업에 따라 echo $_POST['C'][0];
답변
Array to string conversion
최신 버전의 php 7.x에서는 알림이 아닌 오류이며 추가 코드 실행을 방지합니다.
배열에서 print
, 사용 echo
은 더 이상 옵션이 아닙니다.
특히 개발 환경에서 여전히 코드를 디버깅하는 경우 오류 및 알림을 억제하는 것은 좋은 습관이 아닙니다.
사용하여 var_dump
, print_r
입력 값을 반복 처리를 이용 foreach
하거나 for
, 입력 배열로 선언 된 이름에 대한 출력 데이터를 입력 ( ‘ name[]
‘)
오류를 포착하는 가장 일반적인 방법은 try/catch
블록을 사용 하는 것 try
입니다. 이는 블록 내에서 오류를 래핑 할 수있는 코드 실행 중단을 방지하는 데 도움이됩니다 .
try{ //wrap around possible cause of error or notice
if(!empty($_POST['G'])){
echo $_POST['C'];
}
}catch(Exception $e){
//handle the error message $e->getMessage();
}
답변
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>
결과를 변수로 캡처하려는 경우