Parse Error / ADODB

Gesperrt
mr_qmen
Beiträge: 2
Registriert: Do 30. Jan 2003, 08:34
Wohnort: Kreuzlingen
Kontaktdaten:

Parse Error / ADODB

Beitrag von mr_qmen »

Hallo miteinander

Ich bin neu auf contenido-geschmack gekommen und möchte nun bestehende scripts als Module einfügen. Habe allerdings bis jetzt wenig erfolg :( . Ich hab da was mit der Variable $DB mitbekommen, aber die Umkehrung hat nichts gebracht. Hat vielleicht jemand von euch eine Idee?

(Der connect auf die DB erfolgt via ADODB 2.5)

Script:

<?php

$DB2 = $DB;

include("../../adodb240/adodb.inc.php");
include("../../dbconn/ascconn.php");


$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$result = $DB2->Execute("select * from tbl_news_news t1 left join tbl_news_user t2 on t1.userid=t2.id left join tbl_news_cat t3 on t1.cat=t3.id");
if ($result === false) die("failed");
else
print '<table width="79%" border="0">';

while (!$result->EOF) {
$fld = $result->FetchField(16);
$type = $result->MetaType($fld->type);
print '<tr><td class="#font11">'.$result->fields[20].
'</td><td width="23%" class="#font11">'.$result->fields[3].
'</td><td width="32%" class="#font11">'.$result->fields[4].
'</td><td width="15%" class="#font11">'.$result->UserDate($result->fields[16],'d.m.Y').
'</td><td width="9%" class="#font11">'.'<A HREF="../detail_manuell.php?'."id_text=".$result->fields[0].
'">Detail</A>'.'<BR>';
$result->MoveNext();
}
print '</table>';

$DB = $DB2;

// $result->Close();
?>
Gruss

Marc
braendle

Beitrag von braendle »

Hallo,

Contenido verwendet nicht die ADODB sondern die phplib für die Datenbank-Zugriffe.
Dein Code in diese Version zu überführen würde etwa so aussehen (nicht getestet):

Code: Alles auswählen

<?php 
$db->query("select * from tbl_news_news t1 left join tbl_news_user t2 on t1.userid=t2.id left join tbl_news_cat t3 on t1.cat=t3.id"); 

if (!$db->next_record()) die("failed"); 
else 

 echo '<table width="79%" border="0">'; 

 do { 
    echo '<tr><td class="#font11">'.$db->f(20). 
         '</td><td width="23%" class="#font11">' . $db->f(3) . 
         '</td><td width="32%" class="#font11">' . $db->f(4) . 
         '</td><td width="15%" class="#font11">' . date('d.m.Y', $db->f(16)) . 
         '</td><td width="9%" class="#font11"><A HREF="../detail_manuell.php?id_text=' . $db->f(0) . '">Detail</A><BR>'; 
 } while ($db->next_record());

 echo '</table>'; 

} 
?>

Dabei sollest Du in den Angaben $db->f(x) das x durch den gewünschten Feldnamen ersetzen, ob die Sache mit Indizes funktioniert entzieht sich meiner Kenntnis ...

Bei der Datumsausgabe date('d.m.Y', $db->f(16)) kann es sein, das Du den Datenbankwert zuerst noch mit strtodate() in einen Timestamp umwandeln mußt.

Die do...while-Schleife könnte auch andersrum gesetzt sein, dann darf aber vorher kein $db->next_record() verwendet werden ... würde einen Datensatz überspringen ...

Ansonsten hilft Dir an ehesten die Doku zur phplib weiter. :)
mr_qmen
Beiträge: 2
Registriert: Do 30. Jan 2003, 08:34
Wohnort: Kreuzlingen
Kontaktdaten:

Beitrag von mr_qmen »

braendle hat geschrieben:Hallo,

Contenido verwendet nicht die ADODB sondern die phplib für die Datenbank-Zugriffe.
Dein Code in diese Version zu überführen würde etwa so aussehen (nicht getestet):

Code: Alles auswählen

<?php 
$db->query("select * from tbl_news_news t1 left join tbl_news_user t2 on t1.userid=t2.id left join tbl_news_cat t3 on t1.cat=t3.id"); 

if (!$db->next_record()) die("failed"); 
else 

 echo '<table width="79%" border="0">'; 

 do { 
    echo '<tr><td class="#font11">'.$db->f(20). 
         '</td><td width="23%" class="#font11">' . $db->f(3) . 
         '</td><td width="32%" class="#font11">' . $db->f(4) . 
         '</td><td width="15%" class="#font11">' . date('d.m.Y', $db->f(16)) . 
         '</td><td width="9%" class="#font11"><A HREF="../detail_manuell.php?id_text=' . $db->f(0) . '">Detail</A><BR>'; 
 } while ($db->next_record());

 echo '</table>'; 

} 
?>

Dabei sollest Du in den Angaben $db->f(x) das x durch den gewünschten Feldnamen ersetzen, ob die Sache mit Indizes funktioniert entzieht sich meiner Kenntnis ...

Bei der Datumsausgabe date('d.m.Y', $db->f(16)) kann es sein, das Du den Datenbankwert zuerst noch mit strtodate() in einen Timestamp umwandeln mußt.

Die do...while-Schleife könnte auch andersrum gesetzt sein, dann darf aber vorher kein $db->next_record() verwendet werden ... würde einen Datensatz überspringen ...

Ansonsten hilft Dir an ehesten die Doku zur phplib weiter. :)
Hallo jürgen

Die Sache hat wohl so einigermassen geklappt und ich habe mich in die doku eingelesen. Mein Problem ist aber, dass ich auf den verschiedenen Tables die ich im Query abfrage dieselben feldnamen habe. Bei ADODB konnte ich die Feldnamen mit Nummern ansprechen. Hast Du dazu noch eine Idee?

Vielen Dank

Gruss Marc Müller
Gruss

Marc
braendle

Beitrag von braendle »

Aber klar doch ... und die gilt nicht nur für mySQL :-)

Du kannst in einer SQL-Query auch Aliase verwenden, z.B.

Code: Alles auswählen

select A.idupl AS aid, B.idupl AS bid from tblLink AS A, tblRecht AS B WHERE A.id=B.id
Jetzt kannst Du auf A.idupl durch $db->f("aid") und auf B.idupl durch $db->f("bid") zugreifen.
Keine Nummern mehr, wenn sich Deine SQL-Query verändert mußt Du ggf. die Feldnummern ändern. Durch die Aliase kannst Du frei arbeiten, Du mußt nur eindeutige Aliase verwenden.
Gesperrt