$db->next_record();

Gesperrt
matze
Beiträge: 106
Registriert: Mi 17. Dez 2003, 00:17
Wohnort: L.E.
Kontaktdaten:

$db->next_record();

Beitrag 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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

matze
Beiträge: 106
Registriert: Mi 17. Dez 2003, 00:17
Wohnort: L.E.
Kontaktdaten:

Beitrag 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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
matze
Beiträge: 106
Registriert: Mi 17. Dez 2003, 00:17
Wohnort: L.E.
Kontaktdaten:

Beitrag 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)

Code: Alles auswählen

SELECT * FROM con_content WHERE idartlang = 9

-> 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, :roll:
matze
wolfganggarella
Beiträge: 74
Registriert: Fr 7. Nov 2003, 11:35
Wohnort: München
Kontaktdaten:

Beitrag 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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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
Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag 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
matze
Beiträge: 106
Registriert: Mi 17. Dez 2003, 00:17
Wohnort: L.E.
Kontaktdaten:

Beitrag 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 :D
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag 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
Gesperrt