Skript bleibt hängen
Worrel
- php
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
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
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
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
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