Worrel: Skript bleibt hängen

Hallo,
ich habe ein dreidimensionales Array erstellt ($g), in dem auf verschiedenen Ebenen Bereiche für Artikel festgelegt sind. Diese Artikelbereiche will ich nun wieder auslesen. Wenn jedoch eine Artikelnummer in dem Array vorkommt, die nicht in der Datenbank steht, bleibt das Skript bei dieser Artikelnummer stehen.

Nachstehend der Quellcode:

for ($x = 0; $x < floor ($grid); $x++) {
        for ($y = 0; $y < floor ($grid * $hoehe / $breite); $y++) {
            for ($z = 1; $z < 6; $z++) {  // MP Ebenen auslesen
                $artnr = ($g[$x][$y][$z]);
                $sqlart = 0;  // artnr aus Datenbank

if ($artnr != 0) {
                    // Artikel schon vorhanden ?
                    $sql = "select artnr, minx, maxx, miny, maxy from htmltemp where artnr = $artnr ";
                    $minmaxresult = odbc_exec ($conn, $sql);
                    odbc_fetch_row($minmaxresult);    // jede artnr kommt nur einmal vor
                        $sqlart = odbc_result($minmaxresult, 1);
                        $minx = odbc_result($minmaxresult, 2);
                        $maxx = odbc_result($minmaxresult, 3);
                        $miny = odbc_result($minmaxresult, 4);
                        $maxy = odbc_result($minmaxresult, 5);

if ($x < $minx) { $minx = $x; } // eo minx
                        if ($x > $maxx) { $maxx = $x; } // eo maxx
                        if ($y < $miny) { $miny = $y; } // eo miny
                        if ($y > $maxy) { $maxy = $y; } // eo maxy

// Artikelfläche (Textfeld + MPminimax)
                    for ($xx = $minx; $xx < ($maxx + 1); $xx++) {
                        for ($yy = $miny; $yy < floor ($maxy + 1); $yy++) {
                            $g[$xx][$yy][6] = $artnr;  // Ebene 6 für Feldflächen
                        } // eo for yy
                    }  // eo for xx

// erste Zeile mit vorhandener Artnr
                    if ($miny < $cutline) {
                        $cutline = $miny;  //oberste Zeile mit Inhalt
                    }  // eo if

if ($sqlart == $artnr) {
                         $sql = "update htmltemp set minx = $minx, maxx = $maxx, miny = $miny, maxy = $maxy where artnr = $artnr";
                    } else {
                         $sql = "insert into htmltemp (artnr, minx, maxx, miny, maxy) values ($artnr, $minx, $maxx, $miny, $maxy)";
                    }  // eo if vorhanden

}  // eo if artnr vorhanden

odbc_exec ($conn, $sql);

} // eo for z-werte
        } // eo for y
    }  // eo for x

Hoffe, ihr könnt mir helfen,
Worrel

  1. Huhu Worrel

    Wenn jedoch eine Artikelnummer in dem Array vorkommt, die nicht in der Datenbank steht, bleibt das Skript bei dieser Artikelnummer stehen.

    Was genau meinst Du mit "stehen bleiben" ?

    evtl. versucht das Skript ein UPDATE-Statement für die nicht vorhandene Art-Nr. und bricht deshalb ab.

    odbc_exec ($conn, $sql);

    check hier mal das Ergebnis der Abfrage evtl. Fehlermeldung

    Viele Grüße

    lulu

    1. Huhu Worrel

      Hallo, Lulu,
      danke für die Antwort.

      Was genau meinst Du mit "stehen bleiben" ?

      Die letzte Ausgabe, die das Skript von sich gibt, kommt aus dieser Schleife (Ich hab zu Testzwecken ein paar 'echo'-Befehle eingefügt),
      danach kommt nur noch die Fehlermeldung, das Zeitlimit sei erreicht.

      evtl. versucht das Skript ein UPDATE-Statement für die nicht vorhandene Art-Nr. und bricht deshalb ab.

      Deshalb habe ich ja diese Fallunterscheidung eingebaut:

      if ($sqlart == $artnr) {

      , die das 'update' nur ausführt, wenn diese Artikelnummer in der Datenbank vorhanden ist, ansonsten müßte das 'insert' ausgeführt werden.

      odbc_exec ($conn, $sql);
      check hier mal das Ergebnis der Abfrage evtl. Fehlermeldung

      Wird gemacht, dauert aber noch ein paar Momente ...
      rya,
      Worrel

      1. Hallo,

        odbc_exec ($conn, $sql);
        check hier mal das Ergebnis der Abfrage evtl. Fehlermeldung

        Als Ergebnis wird die Resource id zurückgegeben. Fehlermeldungen gibt's keine (außer Zeitlimit)

        rya,
         Worrel

        1. Heureka! (oder so)

          Ich hab's rausgefunden. Es klappt, wenn ich folgendes verändere :

          if ($sqlart != 0) {
                            $minx = odbc_result($minmaxresult, 2);
                            $maxx = odbc_result($minmaxresult, 3);
                            $miny = odbc_result($minmaxresult, 4);
                            $maxy = odbc_result($minmaxresult, 5);
                        } else {
                            $minx = floor ($grid);
                            $maxx = 0;
                            $miny = floor ($grid * $hoehe / $breite);
                            $maxy = 0;
                        }  // eo if

          Danke für Antwort und Interesse,
            rya,
            Worrel