Forum

Moderiert von: spinne
Forum Index
Support
     Codeschnippsel
     Datenbank auslesen
 

Autor Datenbank auslesen
Gast
Unregistrierter Benutzer
Geschrieben: 17.01.2007 23:34

Hi,
ich habe eine Tabelle in meiner Datenbank angelegt und möchte nun OPN-Funktionen verwenden, um diese auszulesen.

Unter PHPNuke machte ich das so:

1) Query definieren (=Stringzuweisung)
2) Query durchführen: $res = sql_query($q,$dbi);
3) Resultset in einer Schleife auslesen (in diesem Beispiel zwei Felder):
while(list($Frequenz, $Anzahl)= sql_fetch_row($res,$dbi))
Innerhalb der Schleife waren die Felder dann mit z.B. $Frequenz oder $Anzahl anzusprechen.

Ich habe nun diese PHP-Seite nach Anypage migriert, habe aber keinen Dunst wie ich unter OPN den Zugriff machen kann (ich würde gerne die Standardfunktionen nutzen, damit ich die ganze DB-Config nicht noch einmal irgendwo anführen muss).

Ich brauche keine Arrays etc. - mir reicht ein stinknormales "Variable auslesen", um's dann gleich auf den Schirm zu schreiben.

Danke für Eure Tipps!
Boby
[addsig]

Zitieren nach oben
stefan
Beiträge: 2436
Wohnort: Münster


Sende eine Private Nachricht an stefan
ICQ
Geschrieben: 18.01.2007 05:22

Gibt mehrere Möglichkeiten

z.B.

$sql = 'SELECT id FROM ' . $opnTables['tabelle_in_opn'] . ' WHERE wert=' . $integer;
$result = $opnConfig['database']->Execute ($sql);
if ($result !== false) {
while (! $result->EOF) {
$id = $result->fields['id'];

echo $id;

$result->MoveNext ();
}
}

oder

$sql = 'SELECT id FROM ' . $opnTables['tabelle_in_opn'] . ' WHERE wert=' . $integer;
$result = $opnConfig['database']->SelectLimit ($sql, $maximal, $offset);
if ($result !== false) {
while (! $result->EOF) {
$id = $result->fields['id'];

echo $id;

$result->MoveNext ();
}
}

Gibt aber noch weitere



Zitieren nach oben
Gast
Unregistrierter Benutzer
Geschrieben: 19.01.2007 00:22

Danke vorerst für die rasche Antwort.
In meinem Beispiel möchte ich eine einfache Tabelle auslesen & ausgeben - und abhängig von dem Inhalt eines Feldes die Hintergrundfarbe der jeweiligen Zelle verändern.
Ich habe das einmal wie folgt übernommen:

echo '<TABLE border=1><TR><TD><b>Frequenz</TD><TD><b>Anzahl<BR>Belegung</b></TD></TR>';
$result = $opnConfig['database']->Execute($sql);
if ($result !== false)
{
while (! $result->EOF)
{
$Frequenz = $result->fields['Frequenz'];
$Anzahl = $result->fields['Anzahl'];
switch ($Anzahl)
{case "0": $fq_background = 'bgcolor="#33CC33"'; break;
case "1": $fq_background = 'bgcolor="#33CC33"'; break;
case "2": $fq_background = 'bgcolor="#FFFF00"'; break;
case "3": $fq_background = 'bgcolor="#FF9933"'; break;
default: $fq_background = 'bgcolor="#FF0000"';
}
echo "<TR $fq_background><TD>" . $Frequenz . "</TD><TD> " . $Anzahl . "</TD></TR>";
$result->MoveNext ();
     }
echo '</TABLE>';


Auf der Seite kommt (statt jeden gelesenen Satz) folgende Meldung:
WARNING [8] Undefined index: Frequenz
FOUND IN [system/anypage/functions_center.php(104) : eval()'d code]
FOUND AT 120
WARNING [8] Undefined index: Anzahl
FOUND IN [system/anypage/functions_center.php(104) : eval()'d code]
FOUND AT 121

Was läuft da falsch?

Ciao,
Boby
[addsig]

Zitieren nach oben
stefan
Beiträge: 2436
Wohnort: Münster


Sende eine Private Nachricht an stefan
ICQ
Geschrieben: 19.01.2007 04:30

wo definierst du denn das $sql aus der zeile

$result = $opnConfig['database']->Execute($sql);

also was steht da drin in $sql


Zitieren nach oben
anonymous
Unregistrierter Benutzer
Geschrieben: 19.01.2007 14:02

Soweit ich weiss werden die assoc. Indizes immer in Kleinschreibung von der SQL Klasse erzeugt.
Von daher sind die Warnings korrekt. Da es ->fields['Frequenz'] nicht gibt aber ->fields['frequenz'].
Eine einheitliche Indexnamensgebung ist schon sinnvoll, da es bei den diversen SQL Servern verschiedene Schreibweisen gibt:
1. MySQL Kleinschreibung
2. Interbase/Firebird Grossschreibung
3. Postgres Standard Kleinschreibung, mit " gefasste Namen können gemischte Schreibweise audweisen.
Mit diesen Möglichkeiten hat man dann bei einer Anwendung wie OPN nur 2 Möglichkeiten:
1. Layer für die Wandlung von Feld- und Tabellennanmen
2. Wandlung der Namen un Gross- oder Kleinschreibung

Punkt 1 kommt IMHO nicht in Frage, da es wieder 2 Probleme gibt:
1. Speicherplatz
2. Laufzeit.


Zitieren nach oben
Gast
Unregistrierter Benutzer
Geschrieben: 19.01.2007 22:21

Stefan,
schläfst Du denn nie?

Jedenfalls Danke an alle für die Tipps - ich hab's dank Eurer Hinweise gefunden. Das Statement sah wie folgt aus:

$sql="select fq.Druckansicht, COALESCE(iv.Anzahl,0)
from ANMELDUNG_FREQUENZEN fq
LEFT OUTER JOIN
(
select FREQ_27_1 AS Frequenz, count(*) as Anzahl
from ANMELDUNG_LUNZ_2007
where FREQ_27_1 ' '
group by FREQ_27_1
UNION .......

Das hat im PHPNUKE offenbar funktioniert, weil die LIST-Funktion offenbar was Spezielles tut. Mit einer leichten Modifikation...
$sql="select fq.Druckansicht AS Frequenz, COALESCE(iv.Anzahl,0) as Anzahl
from ANMELDUNG_FREQUENZEN fq
LEFT OUTER JOIN
(
select FREQ_27_1 AS Frequenz, count(*) as Anzahl
from ANMELDUNG_LUNZ_2007
where FREQ_27_1 ' '
group by FREQ_27_1
UNION

Waren die Fehler dann weg. Der Grund ist klar: MySQL gibt die Felder unter dem Namen "Druckansicht" bzw. "COALESCE(iv.Anzahl,0)" zurück - und nicht als "Frequenz" und "Anzahl". Wenn man's weiß ist die Lösung immer einfach

Danke nochmals,
Boby
[addsig]

Zitieren nach oben
sortieren nach

 
Vorheriges Thema:  MSN verlinken?
Nächstes Thema:  Mailheader wird nicht aufgeschlüsselt

Gehe zu: