[GastForen Programmierung/Entwicklung PHP und MySQL count()

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

count()

Tömsken
Beiträge gesamt: 720

23. Apr 2004, 12:30
Beitrag # 1 von 4
Bewertung:
(1773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin.

Ein "interessantes" Problem beschäftigt mich momentan. Ich habe also ein Formular mit Listbox...

<select name="books[]" size="10" multiple>
...
</select>

...dessen Inhalt ich auslesen möchte. Dazu gibt's 'ne Schleife:

if (count($books) > 0) {
for ($i = 0; $i < count($books); $i++) {
if (isset($books[$i])) {
// Buch sichern
}}}

Das funktioniert prima, so lange mind. ein Eintrag in der Listbox steht. Ist die jedoch leer, sollte IMHO $books ein Array mit "0" Einträgen sein. Aber count($books) liefert trotzdem "1".

Ok, dachte ich, sei pfiffig, live and let live, und prüfe per "isset($books[$i])", ob ich gerade angelogen werde. Das wird jedoch brutal quittiert mit "Warning: Uninitialized string offset: 0 in ...".

Nun könnte man natürlich das Error-Reporting toleranter einstellen. Möchte ich aber nicht, weil ich so stolz auf meinen ansonsten so "schulmäßigen" Code bin.

Hat also jemand 'ne Erklärung für count($books)== 1 und 'nen Tipp zum Umgehen der Warnung?

Tom
X

count()

oesi50
  
Beiträge gesamt: 2315

23. Apr 2004, 17:16
Beitrag # 2 von 4
Beitrag ID: #81588
Bewertung:
(1773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi Tömsken,

wie wärs denn mit:

foreach ($books as $value) {
echo "Wert: $value";
}

Das setzt natürlich voraus, dass Deine Bücher nicht positionsabhängig sind.

Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#81520]
(Dieser Beitrag wurde von oesi50 am 24. Apr 2004, 15:12 geändert)

count()

Miro Dietiker
Beiträge gesamt: 699

23. Apr 2004, 22:37
Beitrag # 3 von 4
Beitrag ID: #81624
Bewertung:
(1773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Dein Problem ist dass das Verhalten von Count nicht deinen
Vorstellungen entspricht:
DOKU: int count ( mixed var [, int mode])

Schau mal mit
print($books);
ob die Variable $books wirklich ein Array ist wenn nichts ausgewählt!
(Steht 'Array' als Ausgabe ist es einer, und count() sollte 0
zurückgeben.. Steht nichts oder etwas anderes, ist $books kein
array mehr und count() tut nicht das was du erwartest!)
Siehe DOKU:
If var is not an array, 1 will be returned (exception: count(NULL) equals 0).
http://ch2.php.net/...n/function.count.php

Abhilfe grundlegend:

if(is_array($books)) {
#DEIN CODE
}

Das grundlegende Problem hier ist die lose Typenbehandlung von
PHP, welche bei manchen funktionen auch etwas 'lose' gehandhabt wird!
Bsp f. Rückgabewerte (mysql_fetch_array):
Datenarray wenn erfolgreich, false im Fehlerfall, usw...

Hoffe du hast damit etwas mehr Bezug zur Problematik!

GrEeZ: Miro Dietiker


als Antwort auf: [#81520]

count()

Tömsken
Beiträge gesamt: 720

27. Apr 2004, 20:00
Beitrag # 4 von 4
Beitrag ID: #82298
Bewertung:
(1773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Miro!
Besten Dank für den guten Tipp!
is_array() ist die Lösung. Ich konnte es mir nicht vorstellen, aber offensichtlich ist es doch so, dass eine LEERE Listbox mit Mehrfach-Selektionsmöglichkeit KEIN Array zurückliefert ( - sondern scheinbar einen String). Erst wenn mind. ein Eintrag drin steht, wird auch ein Array übergeben.


als Antwort auf: [#81520]
X