Mailinglisten-Archive |
Steffen Kother schrieb: > Hallo Leute, > > so langsam krieg ich hier noch die Krise. > > In meinem Template habe ich für Auswahlboxen entsprechende Dummies, wie > diesen > > <select name="KUNNR" class="KUNNR"> > <option value="">{KUNNR}</option> > </select> > > Damit ist das Template erstmal regelkonform. > > Im dazugehörigen Skript soll {KUNNR} nun ersetzt werden. Auch kein > Problem. Bevor ich in die Schleife gehe, wird ein leerer Eintrag > beendet: > > $option = ' </option>'; > > An diese Variable werden alle weiteren Einträge gekettet. Für "simple" > Sachen wie bei Datumsauswahlfeldern geht alles ohne Probleme, nur wenn > ich die Daten aus der Datenbank hole und das zurückgeleiferte Array > verwerte, bleibt immer ein schließender Tag (</option>) offen. > > Hier mal die Problemfunktion: > > function listKUNNR($value) { > $listKUNNR = mysql::query('SELECT KUNNR, NAME1 FROM sap_data.kna1 > ORDER BY KUNNR > ASC'); > $listKUNNR = mysql::fetchAll($listKUNNR, NULL, NULL, MYSQL_ASSOC); > > $listKUNNR2 = array(); > > //Alle unbenötigten Nummern entfernen und gekürzte Kundennummer > festhalten > foreach($listKUNNR as $index) { > $KUNNR = abs($index['KUNNR']); > if (strlen($KUNNR) == 7 || strstr($KUNNR, 'CPD')) { > $index['absKUNNR'] = $KUNNR; > $listKUNNR2[] = $index; > } > } > $anz_list = count($listKUNNR2); > > //<option>-Tags erzeugen > $option = ' </option>'; > foreach($listKUNNR2 as $kunnr => $index) { > $option.= '<option value="'.$index['KUNNR'].'"'; > if (!empty($_POST[$value]) && $_POST[$value] == $index['KUNNR']) > { > $option.= ' selected="selected"'; > } > $option.= '>'.$index['absKUNNR'].' > '.htmlentities($index['NAME1']); > if ($kunnr < $anz_list) { > $option.= '</option>'; > } > } > > return $option; > } > > Ich habe schon mit verschiedenen Varianten den Vergleich zw. $kunnr und > anz_list probiert, es bleibt immer ein </option> übrig... > > Achja, $listKUNNR hat 2208 Einträge (1..2208), in $listKUNNR2 stehen > 1522 0..1521). Von daher stimmt der Vergleich ja... > > Kann mir von euch jemand sagen, was ich übersehe? Oder woran die Säge > klemmt? Der Array index beginnt bei 0, macht 0 bis 3 bei 4 Einträgen count liefert also 4 Da ist $kunnr _immer_ kleiner als count von diesem Array. if ($kunnr + 1 < $anz_list) ... ich würde es eher so machen: function listKUNNR($value) { $value = empty($_POST[$value]) ? false : $_POST[$value]; $listKUNNR = mysql::query( 'SELECT `KUNNR`, `NAME1` FROM `sap_data`.`kna1` ORDER BY `KUNNR` ASC'); $listKUNNR = mysql::fetchAll($listKUNNR, null, null, MYSQL_ASSOC); //<option>-Tags erzeugen $option = ' '; foreach($listKUNNR as $index) { $absKUNNR = abs($index['KUNNR']); if (strlen($absKUNNR) != 7 && ! strstr($absKUNNR, 'CPD')) { continue; } $option .= '</option>'; $option .= '<option value="' . $index['KUNNR'] . '"'; if ($value == $index['KUNNR']) { $option .= ' selected="selected"'; } $option .= '>' . $absKUNNR . ' ' . htmlspecialchars($index['NAME1']); } return $option; } -- Sebastian Mendel www.sebastianmendel.de
php::bar PHP Wiki - Listenarchive