PHP hatası nasıl çözülür 'Not: Array to string conversion in…'


117

A yankılamasını yapmaya çalışan bir PHP dosyam var $_POSTve bir hata alıyorum, işte kod:

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>'

İşte POST'u yankılamak için kod.

if(!empty($_POST['G'])){
    echo $_POST['C'];
}

Ancak kod çalıştığında aşağıdaki gibi bir hata alıyorum:

Notice: Array to string conversion in 
C:\xampp\htdocs\PHIS\FinalSubmissionOfTheFormPHP.php on line 8

Bu hata ne anlama geliyor ve nasıl düzeltebilirim?


8. satır hangisi? Mı $Texting[i]bir yazım hatası? Bunun $Texting[$i]yerine olması gerekmez mi?
Amal Murali

Lütfen gösterin var_dump($Texting).
Barmar

1
Merhaba ... Satır 8, echo $ _POST ['C'] anlamına gelir. Ve var_dump ($ _ POST ['C']) ise Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Erkek" [2] => string (6) "Kadın"}. Ve var_dump ($ Mesajlaşma), array (3) {[0] => string (1) "A" [1] => string (4) "Erkek" [2] => string (6) "Kadın"} 'dır. ..
t4thilina

Yanıtlar:


110

Adlandırılmış birçok HTML girdiniz olduğunda C[], diğer uçtaki POST dizisinde aldığınız şey, içinde bu değerlerin bir dizisidir $_POST['C']. Yani bunu echoyaptığınızda, bir dizi yazdırmaya çalışıyorsunuz, yani tek yaptığı bir yazdırma Arrayve bir uyarı.

Bir diziyi düzgün bir şekilde yazdırmak için, ya diziyi ve echoher öğeyi döngüye alırsınız ya da kullanabilirsiniz print_r.

Alternatif olarak, bunun bir dizi mi yoksa bir dizge var_dump($var)mi olduğunu bilmiyorsanız, hangisinin size ne tür olduğunu ve içeriğinin ne olduğunu söyleyeceğini kullanabilirsiniz . Bunu yalnızca hata ayıklama amacıyla kullanın.


Açık açıklamanız için çok teşekkür ederim. Tam olarak ne söylediğinizi yazdırır. Bu, dizimin zaten PHP dosyasına gönderilmiş olduğu anlamına gelir. Sorunsuz bir şekilde kullanabilirim gibi görünüyor. Tekrar teşekkürler.
t4thilina

56

PHP Bildirimi ne anlama gelir ve nasıl yeniden üretilir:

Bir PHP dizisini: echoveya gibi bir dizge bekleyen bir işleve gönderirseniz print, PHP yorumlayıcısı dizinizi değişmez dizgeye dönüştürür Array, bu Bildirimi atar ve devam eder. Örneğin:

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

Bu durumda, işlev printdeğişmez dizeyi: Arraystdout'a döker ve sonra Notice'i stderr'e kaydeder ve devam eder.

PHP betiğindeki başka bir örnek:

<?php
    $stuff = array(1,2,3);
    print $stuff;  //PHP Notice:  Array to string conversion in yourfile on line 3
?>

2 seçeneğiniz var, ya PHP dizinizi dizeye çevirici kullanarak dizeye çevirin ya da PHP Bildirimini bastırın.

Düzeltme 1: yerleşik php işlevi olan print_r veya var_dump kullanın:

http://php.net/manual/en/function.print-r.php veya 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);

Baskılar:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
array(3) {
  [0]=>
  int(3)
  [1]=>
  int(4)
  [2]=>
  int(5)
}

Düzeltme 2: Diziyi json dizesine daraltmak için json_encode kullanın:

$stuff = array(1,2,3);
print json_encode($stuff);   //Prints [1,2,3]

Düzeltme 3: Dizideki tüm hücreleri bir araya getirmek:

<?php
    $stuff = array(1,2,3);
    print implode(", ", $stuff);    //prints 1, 2, 3
    print join(',', $stuff);        //prints 1, 2, 3
?>

Düzeltme 4: Bildirimleri bastırın:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.

Kabul edilen cevap bu olmalıdır. Bana çok yardımcı oldu. Ayrıca bu cevapla json_encode kullanmak zorunda kaldım. print_r (json_encode ($ AuthData)); Şuna benzer sonuç: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_id": "ace48681": "ace4868b31 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew

5

<input name='C[]'HTML'nizde kullanıyorsunuz . Bu, form gönderildiğinde PHP'de bir dizi oluşturur.

Bu echo $_POST['C'];diziyi yankılamak için kullanıyorsunuz - bu işe yaramayacak, bunun yerine bu uyarıyı ve "Dizi" kelimesini yayacaktır.

Kodun geri kalanıyla ne yaptığınıza bağlı olarak, muhtemelen kullanmalısınız echo $_POST['C'][0];


3

Array to string conversion php 7.x'in son sürümlerinde uyarıdan çok hatadır ve daha fazla kod yürütülmesini engeller.

Kullanılması print, echodizi artık bir seçenek değildir.

Hataları ve bildirimleri bastırmak, özellikle geliştirme ortamında ve hala kodda hata ayıklarken iyi bir uygulama değildir.

Kullanım var_dump, print_rgiriş değeri yoluyla yineleme kullanılarak foreachya da forgiriş dizileri bildirilmiştir adlarını çıkış veri girişi için (' name[]')

Hataları yakalamak için en yaygın uygulama try/catchbloklar kullanmaktır , bu bloklar içine sarılmış olası hatalara neden olabilecek kod yürütme kesintisini önlememize yardımcı olur 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();
  }

1
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

sonucu bir değişkende yakalamak istiyorsanız

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.