Forum: PC Hard- und Software Undefined offset


von TM F. (p_richner)


Lesenswert?

Hallo Zusammen
Ich überarbeite eine Website in php.
Ich habe das Problem, dass ich beim unten stehenden Code die 
Fehlermeldung: "Undefined offset" auf Zeile 48 und 57 erhalte.

Der Code:
1
if(...)
2
{
3
  foreach(...)
4
  {
5
    if(...)
6
    {
7
      $keys = split(",", $key);
8
      $result[$keys[0]][$keys[1]] = $value;
9
    }
10
}
11
12
if(!$error)
13
  {
14
    sql_open();
15
    mssql_query("..."); 
16
    
17
    for($i=1; $result[$i][0]!=""; $i++)  <--Zeile 48
18
    {
19
      mssql_query("...");
20
    }
21
    
22
     for($i=1; $result[$i][0]!=""; $i++)  <--Zeile 57
23
    {
24
      if(...)
25
        ...
26
    }
27
  }

Wie kann ich das Problem lösen? Muss ich etwas mit isset() abfragen und 
dann setzen oder sonst was?

Danke für die Hilfe.
MfG

von Εrnst B. (ernst)


Lesenswert?

P_ Richner schrieb:
> Muss ich etwas mit isset()

Ja.
vor Dem Zugriff auf  $result[$i][0] musst du prüfen, ob $result[$i] 
exisitiert (und möglichst auch noch ein Array ist.)

PHP hat (Wie C) keine echten mehrdimensionalen Arrays, sondern nur das 
"Array von Arrays" Konstrukt, welches du auch anwendest.

von TM F. (p_richner)


Lesenswert?

Εrnst B✶ schrieb:
> vor Dem Zugriff auf  $result[$i][0] musst du prüfen, ob $result[$i]
> exisitiert (und möglichst auch noch ein Array ist.)

aber $i setze ich ja in der for-Schleife. Vorher wird es nirgends 
benutzt

von Εrnst B. (ernst)


Lesenswert?

P_ Richner schrieb:
> aber $i setze ich ja in der for-Schleife. Vorher wird es nirgends
> benutzt

$i ist auch garnicht das Probem.
$result[$i] ist es.

Beim Schleifenende ist $result[$i] undefined/null/nix.
$result[$i][0] gibt deshalb eine Warnung. denn:

$result[$i][0]
==
($result[$i])[0]
==
(undefined)[0]
==
Fehler. Undefined ist kein Array, hat kein "Null"-tes Element.

: Bearbeitet durch User
von TM F. (p_richner)


Lesenswert?

Ich habe folgendes versucht, funktioniert jedoch trotzdem nicht:
1
if(!isset($i)) $i ='';
2
if(!isset($result[$i])) $result[$i] ='';
3
4
for($i=1; ...)
5
{
6
  ....
7
}

von bluppdidupp (Gast)


Lesenswert?

Das liegt wohl daran, das in der Abbruchbedingung der for-Schleife 
geprüft werden müsste und nicht davor für einen seltsamen Einzelfall ;D
1
for($i=1; ---->>>>>>$result[$i][0]!=""<<<<<<------; $i++)

von Εrnst B. (ernst)


Lesenswert?

Um es abzukürzen:

Schreib die Schleife z.B. so:
1
  for($i=1; isset($result[$i]) && isset($result[$i][0]) && $result[$i][0]!=""; $i++) {...

Hatte zwar die Hoffnung, dass du da zwischendurch selber drauf kommst 
und dabei noch was lernst...

von TM F. (p_richner)


Lesenswert?

Danke vielmals, es funktioniert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.