Seite 1 von 1
$db->next_record();
Verfasst: Do 8. Jan 2004, 12:53
von matze
hallo,
kann mir jemand ganz kurz erklären, was genau die methode bzw. die funktion "$db->next_record();" macht?
$db sei dabei ein zweidimensionaler array.
wird in die nächste zeile gesprungen?
vielen dank,
matze
Verfasst: Do 8. Jan 2004, 13:00
von emergence
Verfasst: Do 8. Jan 2004, 16:59
von matze
mhhh,
er springt also in eine neue reihe, wenn das jeweilige ergebnis ein neuen wert hat.
gibt es auch einen befehl, bei dem definitiv jede zeile ausgelesen wird? (next_row oder so)
hintergrund???
bei mir läßt er nämlich immer ein "content"-element mit gleicher "typeid" aus und springt zum nächsten.
thanks,
matze
Verfasst: Do 8. Jan 2004, 17:36
von emergence
matze hat geschrieben:
bei mir läßt er nämlich immer ein "content"-element mit gleicher "typeid" aus und springt zum nächsten.
er läßt eins aus ? dann hast einen fehler in deinem sql query...
wird der wert mit angezeigt wenn du das query in phpmyadmin ausführst ?
ich denke nicht...
Verfasst: Do 8. Jan 2004, 20:14
von matze
die sql-abfrage funktioniert fehlerfrei. allerdings schaffe ich es nicht die drei elemente auszulesen, die ich will. ein element wird immer übersprungen.
sql-abfrage (eigentlich auf mehrere artikel)
-> ergebnis ist der array $db mit folgenden inhalten:
Code: Alles auswählen
idartlang / idtype / typeid / value
9 / 2 / 1 Das ist Inhaltstext. bla bla bla
9 / 1 / 1 Überschrift U1
9 / 2 / 2 Teasertext
nun habe ich folgende abfrage gemacht, um die variablen $projekt["titel"], $projekt["teaser"] und "$projekt["inhalt"] für die jeweiligen artikel zu füllen:
Code: Alles auswählen
$j=0;
while ($j < $db->num_rows())
{
$db->next_record();
switch ($db->f("typeid"))
{
case 1:
switch ($db->f("idtype"))
{
case 1:
$projekt["titel"][$anz] = $db->f("value");
break;
case 2:
$projekt["inhalt"][$anz] = $db->f("value");
break;
}
break; // end case 1
case 2:
$projekt["teaser"][$anz] = $db->f("value");
break;
} // end switch
$j++;
} // end while
die variable $projekt["teaser"] wird immer mustergültig gefüllt.
von den zwei variablen $projekt["titel"] und "$projekt["inhalt"] wird aber immer nur eine von beiden gefüllt. (die verschachtelte abfrage muss ich ja machen, da sie die gleiche "typeid" haben.)
nach meinem verständnis, müsste er aber alle drei variablen füllen.
krübelnde grüße,
matze
Verfasst: Fr 9. Jan 2004, 09:29
von wolfganggarella
hi matze,
probier' zunächst mal, die break-Anweisung wegzulassen. Denn hier wird bei switch gnadenlos abgebrochen. Verständlicher wäre vielleicht eine if-Abfrage in der Du typeid && idtype abfragst.
Gruß
Wolfgang
Verfasst: Fr 9. Jan 2004, 10:03
von emergence
versuch das mal: (ich habs aber nicht getestet)
Code: Alles auswählen
$j=0;
while ($j < $db->num_rows())
{
$db->next_record();
if ($db->f("typeid") == 1) {
if ($db->f("idtype") == 1) {
$projekt["titel"][$anz] = $db->f("value");
}
if ($db->f("idtype") == 2) {
$projekt["inhalt"][$anz] = $db->f("value");
}
}
if ($db->f("typeid") == 2) {
$projekt["teaser"][$anz] = $db->f("value");
}
$j++;
} // end while
Verfasst: Fr 9. Jan 2004, 10:10
von Black Widow
Hi matze!
Ich schlage Dir mal folgendes vor:
Code: Alles auswählen
$sql_query = "SELECT * FROM con_content WHERE idartlang = 9";
$db->query($sql_query);
while($db->next_record())
{
switch ($db->f("typeid"))
{
case 1:
{
switch ($db->f("idtype"))
{
case 1:
{
$projekt["titel"][$anz] = $db->f("value");
break;
}
case 2:
{
$projekt["inhalt"][$anz] = $db->f("value");
break;
}
}
break; // end case 1
}
case 2:
{
$projekt["teaser"][$anz] = $db->f("value");
break;
}
} // end switch
}
Weil next_record() doch schon nen boolean zurückgibt, falls es einen weiteren Wert gibt, brauchst Du doch nicht die Zeilen zu zählen!
Gruß,
Black Widow
Verfasst: Fr 9. Jan 2004, 16:26
von matze
hallo alle miteinander,
zunächst einmal ein großes dankeschön für den tollen support.
hier eine kurze versuchsauswertung:
_ code mit if-abfrage (emergence): funktioniert
_ code mit switch (black widow): funktioniert
_ mein vorschlag: funktioniert auch
auflösung:
ich dödel habe vergessen eine abfrage auszukommentieren, die vor der while-schleife gemacht wird:
$db->next_record();
$head = $db->f("value");
if ( strlen($head) > "CMS_VALUE[3]") {
$head = substr($head, 0, "CMS_VALUE[3]");
$head .= '..';
} // end if
ich schätze, da dort schon "next_record()" aufgerufen wurde,
startete die abfrage in der while-schleife ständig mit dem zweiten anstatt mit dem ersten content-element.
nichts desto trotz, jetzt funktionierts!
vielen dank an alle!
matze, der glückliche

Verfasst: Fr 9. Jan 2004, 22:46
von PickPay
Versuch es doch über die API, mit den Klassen Article und ArticleCollection, ich denke das bringt dir recht viel:
http://contenido.de/forum/viewtopic.php?t=2087