2009-08-12 7 views
48

フォームには、「プロジェクト名」、「プロジェクト日付」、「カテゴリ」など複数の同一フィールドがあります。ユーザーが送信するフォームの数に基づいています。原因:「通知:初期化されていない文字列オフセット」が表示される原因は何ですか?

私の目標にされていますフォーム

  • の数を超える

    1. ループは、個々のSQL INSERT文

    を作成するにはしかし、PHPは、私が理解していないよう注意をスロー:

    お知らせ:

    注意:初期化されていない文字列はオフセット:ライン上の1 ... dataPasser.php 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);  
        } 
    } 
    

    これへの参照があります。私は持っていますが、彼らは正確ではないし、実際の問題がどこから生じるのかを推測することができません。配列が正しく初期化されない原因を理解する助けに感謝します。

  • +0

    を使用して配列の内容をあなたが例のうちの多くを残して、しかしのvar_dump($ MYQUERY)の出力は何ですか? – koen

    +0

    どこに90行目がありますか?全通知は何ですか? –

    +1

    ここでは、array_pushをまったく使用する必要がないことを追加したかっただけです。ちょうどこれを行う。 $ myQuery [] = $ var; – calumbrodie

    答えて

    53

    次の変数のいずれかが実際に配列構文$var[$i]でそれらにアクセスすると、文字列内の特定の文字にアクセスしようとしているようなものだ、その場合には、文字列またはnullの代わりの配列であった場合に、このエラーが発生する:

    $catagory 
    $task 
    $fullText 
    $dueDate 
    $empId 
    

    要するに、挿入クエリのすべて。

    おそらく$catagory変数のスペルが間違っていますか?

    +0

    男、私はちょうど頭の中で自分をキックしたい。もちろん!ユニークな$ empIdは1つしかありません。私は他の人に注意を払わなかった$ myQuery配列に焦点を当てていました。本当にありがとう!私は$ empID [$ i]を$ empIdに変更し、$ empIdは配列ではないのでNoticeは消えました。 –

    +0

    ここでの混乱の一部は、 '$ var [$ i]'にインデックスを付けると、文字列か配列のどちらかになります... –

    +0

    +1 Perfect Ans(Y)...! –

    13

    あなたの配列のうちの1つが実際には配列でないことを意味します。

    ところで、あなたのチェックは不要です。 $ varsCountが0の場合、forループはとにかく実行されません。

    +0

    いや、私は以前このコメントを見ました。残念ながら、私は配列ではないことを理解していませんか?私はFirePHPにデータを出力しています。私はそれをPOST経由で、次に変数からも見ています。 –

    +0

    okありがとうございました。読みやすいようにコードの一部しか掲載していません。再度、感謝します! –

    2

    は、あなたがそれらを使用する前に、あなたの配列をテストして初期化してください:

    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' ; 
    
    +0

    正しいですが、もし配列であるとすれば、 'if(!isset($ myarray [$ i]))$ myarray [$ i] = array();'? –

    9

    エラーが発生することがあります。たとえば、

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

    がエラーを表示します。

    :uは

    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]; 
    } 
    

    か、配列(多分それは価値だったとあなたは、配列のようにアクセスしようとした)例えば ないかもしれない例えば..私のMODを取ることができ 最初のケース

    $k = 2; 
    $k[0]; 
    
    1

    チェックアウト

    echo '<pre>' . print_r($arr, TRUE) . '</pre>'; 
    
    関連する問題