PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP Problem mit if und else


msmaster
03.02.2003, 16:47
Hi,

da ich noch nicht alzu gut in php bin und für mich if und else wirklich noch neuland sind hab ich ne frage und zwar:

$db = mysql_query("SELECT * FROM datenbank3k WHERE id=$id order by datenbank3k.commentsid DESC");
while ($comment = mysql_fetch_array($db)) {

$test = "$comment[text];
}

meine frage ist nun

was muss ich machen das wenn die tabelle noch leer ist der text erscheint "Kein Text" weiß das zufällig wer es ist mit else und if das weiß ich ja nur wie mans machen muss weiß ich nicht :(.

s.molinari
03.02.2003, 18:17
Versuchs so:if ($db = mysql_query("SELECT * FROM datenbank3k WHERE id=$id order by datenbank3k.commentsid DESC") ) {
while ($comment = mysql_fetch_array($db)) {

$test = $comment[text];
}
} else {

$test = " Kein Text!";

}

Aber....

Wenn die Abfrage mehrere Ergebnisse hat wird $test nur das letzte behalten. Sonst musst du eine Array draus machen und zwar so: $test[] = $comment[text];

Scott

p.s. Es gibt Zahlreiche Bücher über PHP. Also lesen, lesen lesen. So habe ich das bisschen PHP, das ich kenne, gelernt.;)

msmaster
03.02.2003, 18:20
jo danke werds gleich mal testen.

ja hab ja schon bücher gekauft aba noch keine zeit gehabt. Auserdem findet man nie das was man sucht aber ich werds mir mal fest vornehmen.

msmaster
03.02.2003, 20:58
hm irgendwie funktioniert das noch nicht ganz weil wenn jetzt kein eintrag in der db is also er nichts findet kommt der text Kein Text ! nicht sondern es bleibt einfach leer woran kann das liegen ??

martin
03.02.2003, 21:03
ihr lest die falschen bücher. :D
das funktioniert so nicht.

$db = mysql_query(....);

weisst $db nur eine "resource id" zu.
diese id wird aber immer zugewiesen, auch wenn kein datensatz gefunden wird der den kriterien entspricht.

deshalb ist $db immer 'true' solange kein mysql fehler auftritt.

versuch dies:


$db = mysql_query("SELECT * FROM datenbank3k WHERE id = $id ORDER BY commentsid DESC") or die(mysql_error());

$test = mysql_fetch_assoc($db);

if (empty($test['text'])) {

echo 'kein eintrag gefunden';

} else {

while ($comment = mysql_fetch_assoc($db)) {

echo "{$comment['text']}";

}
}

s.molinari
03.02.2003, 22:09
Natürlich!:o Ich habe mein Beispiel mit vBs "query_first" Funktion durcheinander gebracht. Back to the books!;)

Scott

msmaster
04.02.2003, 09:05
erstmal danke jedoch funktioniert es nun aber seit dem der code da drin ist wird die erste comment nicht angezeigt erst das 2 und 3 und so weiter woran kann das liegen ??

if (empty($test['text'])) {

=

if (empty($test['id'])) {

weil das ja auf mehreren seiteen angezeigt wird nur halt mit anderen commentaren da muss er ja jedesmal überprüfen ob für diese kategorie ein commentar da ist.

martin
04.02.2003, 09:46
oki...ich bin auch nich besser als scott. :D

das problem liegt darin, dass das erste fetch_assoc() auf den ersten datensatz des ergebnisses zugreift und das zweite fetch_assoc dann gleich mit dem zweiten datensatz beginnt.
deshalb fehlt der erste eintrag.

mach es so:


$db = mysql_query("SELECT * FROM datenbank3k WHERE id = $id ORDER BY commentsid DESC") or die(mysql_error());

if (!mysql_affected_rows()) {

echo 'keine einträge vorhanden';

} else {

while ($comment = mysql_fetch_assoc($db)) {

echo "{$comment['text']}";

}
}


mysql_affected_rows() gibt die anzahl der betroffenen datensätze der letzten abfrage zurück. wenn keine gefunden wurden, wird '0' zurückgegeben. da php '0' als 'false' wertet, sollte das funktionieren.

msmaster
04.02.2003, 11:12
hey supa danke jetzt funkts :eek: .

s.molinari
04.02.2003, 16:55
Ewww....martin.

negative Logik!;)

Wir sind alle nur menschlich! :D

Scott