Ne olur: "Notice: Başlatılmamış dize offset"

5 Cevap php

Kullanıcıların bir kullanıcı göndererek kaç formları dayanarak vb "projesi adı", "proje tarih", "catagory" gibi birden fazla özdeş alanlar vardır form doldurmak, bir form var:

: Amacım için

  1. formların sayısının üzerinde döngü
  2. bireysel SQL eklemek ifadeleri oluşturmak

Ancak, PHP beni anlamak için görünmüyor bir DİKKAT atar:

Notice:

Uyarı: Başlatılmamış dize offset: 1 ... dataPasser.php hattında 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);     
  }
}

Ben yaşıyorum ama bunlar kesin değildir ve ben sorun asıl sorun buradan kaynaklanıyor deducing yaşıyorum bu konuda referanslar vardır. Ben büyük dizi düzgün olarak başlatılamadı neden olduğunu anlamakta herhangi bir yardım takdir ediyorum.

5 Cevap

Aşağıdaki değişkenler bir dizi sözdizimi ile erişim $var[$i] bir dizesinde belirli bir karaktere erişmek için çalışıyor gibi hangi durumda yerine diziler aslında dizeleri veya null, olsaydı bu hata oluşacak:

$catagory
$task
$fullText
$dueDate
$empId

Kısacası, insert sorgusunda her şeyi.

Belki $catagory değişkeni yanlış yazılmış?

Bu dizilerin biridir aslında bir dizi değil demektir.

Arada, eğer kontrol gereksizdir. $ VarsCount döngü zaten çalıştırmaz için 0 olduğunu. Ise

Bunları kullanmadan önce test etmek ve diziler başlatmak için deneyin:

if( !isset($catagveyay[$i]) ) $catagveyay[$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] = '' ;

If $catagveyay[$i] doesn't exist, you create (Uninitialized) one ... that's all ; => PHP try to read on your table in the address $i, but at this address, there's nothing, this address doesn't exist => PHP return you a notice, and it put nothing to you string. So you code is not very clean, it takes you some resources that down you server's perfveyamance (just a very little).

MySQL tablo varsayılan değerler hakkında ilgileneceğim

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

veya

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

Eğer dizi yineleme sayısıdır dizinin gerçek boyutundan daha büyük olduğunda hata aslında oluşur. örneğin:

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

will show the error. one thing u can do is take the mod of i.. for example

int mod(int $i,int $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];
}

ya da bir dizi değil olabilir

Lütfen dizi ile içeriğini kontrol

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