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