2009-08-12 6 views
48

Ich habe ein Formular, das Benutzer ausfüllen, auf dem Formular gibt es mehrere identische Felder, wie "Projektname", "Projektdatum", "Kategorie" usw. Basierend auf wie viele Formulare ein Benutzer sendet:Was bewirkt: "Hinweis: Nicht initialisierter String-Offset" erscheint?

Mein Ziel ist es,

  1. Schleife über die Anzahl der Formulare
  2. einzelne SQL-Insert-Anweisungen erstellen

Allerdings wirft mich PHP einen Hinweis, dass ich scheinen nicht zu verstehen:

Hinweis:

Hinweis: nicht initialisierte Zeichenfolge-Offset: 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);  
    } 
} 

Es gibt Hinweise auf diese Problem, das ich habe, aber sie sind nicht genau, und ich habe Schwierigkeiten, abzuleiten, woher das eigentliche Problem stammt. Ich wäre sehr dankbar für jede Hilfe beim Verständnis, was verursacht, dass das Array nicht richtig initialisiert wird.

+0

Sie lassen viel aus dem Beispiel, aber was ist die Ausgabe von var_dump ($ myQuery)? – koen

+0

Wo ist Zeile 90, und was ist die vollständige Notiz? –

+1

Ich wollte nur hinzufügen, dass Sie array_push hier überhaupt nicht brauchen. Tun Sie das einfach. $ myQuery [] = $ var; – calumbrodie

Antwort

53

würden diese Fehler auftreten, wenn eine der folgenden Variablen sind tatsächlich Strings oder null anstelle von Arrays, in welchem ​​Fall sie mit einer Array-Syntax $var[$i] Zugriff wäre wie der Versuch, ein bestimmtes Zeichen in einer Zeichenkette zuzugreifen:

$catagory 
$task 
$fullText 
$dueDate 
$empId 

Kurz gesagt, alles in Ihrem Einfügen Abfrage.

Vielleicht ist die $catagory Variable falsch geschrieben?

+0

Mann, ich möchte mich nur in den Kopf treten. NA SICHER! Es gibt nur 1 eindeutige $ empID. Ich konzentrierte mich auf das $ myQuery-Array, auf das ich nicht geachtet hatte. Vielen Dank! Ich habe $ empID [$ i] zu $ ​​empID geändert und die Nachricht ist verschwunden, da $ empID kein Array ist. –

+0

Ich denke, ein Teil der Verwirrung hier ist, dass beim Indexieren von '$ var [$ i]' könnte es entweder eine Zeichenfolge oder ein Array sein ... –

+0

+1 Für Perfect Ans (Y) ...! –

13

Es bedeutet, dass eines Ihrer Arrays kein Array ist.

Übrigens ist Ihre if-Prüfung unnötig. Wenn $ varsCount 0 ist, wird die for-Schleife trotzdem nicht ausgeführt.

+0

ja, ich habe diesen Kommentar schon mal gesehen. Leider verstehe ich nicht, wie es nicht ein Array ist? Ich gebe die Daten in FirePHP aus und ich sehe es über den POST und dann auch in den Variablen. –

+0

ok danke, ich habe nur einen Teil des Codes gepostet, damit er einfach zu lesen ist. Danke noch einmal! –

2

Versuchen zu testen und Ihre Arrays zu initialisieren, bevor Sie sie verwenden:

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] = '' ; 

Wenn $catagory[$i] nicht existiert, erstellen Sie (nicht initialisierten) ein ... das ist alles; => PHP versuchen, auf Ihrem Tisch in der Adresse $i zu lesen, aber an dieser Adresse gibt es nichts, diese Adresse existiert nicht => PHP gibt Ihnen einen Hinweis, und es stellt nichts für Sie string. Also Sie Code ist nicht sehr sauber, es braucht einige Ressourcen, die die Leistung des Servers (nur ein wenig) herunter.

kümmern uns um Ihre MySQL-Tabellen Standardwerte

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

oder

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

richtig, aber was, wenn es ein Array sein soll, 'if (! Isset ($ myarray [$ i])) $ myarray [$ i] = array();' vielleicht? –

9

Der Fehler kann auftreten, wenn die Anzahl der Male durchlaufen Sie das Array größer als die tatsächliche Größe des Arrays ist.Beispiel:

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

wird den Fehler anzeigen. ersten Fall u die Mod von i nehmen kann .. zum Beispiel

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

oder könnte es kein Array sein (vielleicht war es ein Wert und man versucht, es wie ein Array zuzugreifen) zum Beispiel:

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

überprüfen Sie den Inhalt Ihres Array aus mit

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