• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Daten per PHP aus SQL-Datenbank abrufen?

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Hallo zusammen,

ich hoffe, dass ich nicht ein allzugroßes Ding anstoße, aber ich denke, meine Sache ist vermutlich relativ easy zu lösen.
Ich habe in meinem aktuellen Projekt das erste Mal mit wordpress auch eine Datenbank eingesetzt (ich würde wohl nie mehr was anderes wollen;) ).
Allerdings fehlt mir absolut die Erfahrung. Ich habe nun eine Tabelle mit PHP erstellt (auch hier verstehe ich relativ wenig und erstelle das oft mit Hilfe von Google und learning by doing):
<!-- TERMINE DER JUGENDFEUERWEHR -->

<h2>Termine der Jugendfeuerwehr</h2>

<table class="wptable rowstyle-alt">
<colgroup><col width="80"><col width="50"><col width="420"></colgroup>
<tr>
<th class="sortable">Datum</th>
<th class="sortable">Beginn</th>
<th class="sortable">Veranstaltung</th>
</tr>
<?php

$background = 0;
$class1 = "";
$class2 = "alt";
$termine = array();

$termine[] = array('tag' => '2008-12-12', 'zeit' => '19.00', 'beschreibung' => 'Adventsfeier');
$termine[] = array('tag' => '2009-01-10', 'zeit' => '19.00', 'beschreibung' => 'XYZ');
$termine[] = array('tag' => '2009-01-12', 'zeit' => '19.00', 'beschreibung' => 'Nichts tun');

$emptyList=true;

foreach($termine as $termin)
{
if(date("Y-m-d H:i") < $termin['tag']." ".$termin['zeit'])
{
switch ($background)
{
case 0: $backgroundColor = $class1; break;
case 1: $backgroundColor = $class2; break;
}
echo

"<tr class=\"$backgroundColor\">
<td align=\"center\">".date("d.m.Y",strtotime($termin['tag']))."</td>
<td align=\"center\">".$termin['zeit']."</td>
<td>".$termin['beschreibung']."</td>
</tr>";

$background = !$background;
$emptyList=false;
}
}
{
if($emptyList)
{
echo
"<tr class=\"\">
<td></td>
<td></td>
<td>Derzeit liegen leider keine aktuellen Termine vor.</td>
</tr>";
}
}
?>

</table>

<!-- ENDE DER TERMINE DER JUGENDFEUERWEHR -->

Dieses Skript ist nun dazu da, um die Termine, die ich derzeit noch händisch in den Code eingeben muss, auf ihre Aktualität zu checken und gegebenenfalls mit abwechselnden Zeilenfarben in einer Tabelle auszugeben.
Nun würde ich die Termine aber evtl. gerne auf verschiedenen Seiten verwenden, ohne jedes Mal alle Seiten zu aktualisieren. Daher natürlich wieder eine Datenbanklösung;)
Da ich mich aber nicht auskenne:
Wie kann ich eine Tabelle in der Datenbank auslesen und die $termine so definieren, wie ich es derzeit händisch mache? Wie müsste die Tabelle in SQL aussehen?
Bisher habe ich dieses Plugin verwendet, um Tabellen zu erstellen, allerdings möchte ich eben bei den Terminen ein eigenes Skript verwenden, um die Tabelle aktuell zu halten. Allerdings könnte ich dieses Plugin weiterhin bequem verwenden, um die Tabellen in der Datenbank zu erzeugen (bzw. von den anderen Moderatoren verwenden lassen!).
Ich müsste also "nur" die Zeilen:
$termine = array();

$termine[] = array('tag' => '2008-12-12', 'zeit' => '19.00', 'beschreibung' => 'Adventsfeier');
...ersetzen mit der Abfrage der Datenbank und der Zuteilung der einzelnen Spalten auf die drei Dimensionen der Variablen, richtig?
Wie könnte so etwas aussehen?

Danke schon mal im Voraus:-D

EDIT: Hier noch die Homepage, um die es sich dreht;)
 
Zuletzt bearbeitet:

dewey

Gewürzluiken
Registriert
01.05.06
Beiträge
5.721
also so wie wirs gelernt haben:

als erstes verbindung zur datenbank aufbaun:
<?php
$server = "localhost";
$user = "root";
$passwort = "";
$datenbank = "db_schueler";
$verbindung = mysql_connect($server,$user,$passwort) or die("Verbindung fehlgeschlagen");
mysql_select_db($datenbank) or die ("Datenbank existiert nicht.");

?>

und dann wenn du in der datei was aus der datenbank auslesen willst:
<?php
$abfrage = "SELECT zuname FROM tblschueler";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis))
{
echo $row[zuname];
echo "<br>";
}
?>
 
  • Like
Reaktionen: C64

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Super - danke dir schon mal. Google wird mir die Befehle erklären;)

D.h. ich muss die Verbindung jedesmal öffnen (bzw. das Skript) - Wordpress macht nichts anderes? Oder ist die Verbindung schon offen, weil ja Wordpress sowieso schon zugreift - ich sehe nur nix, was die Verbindung schließen würde? Und das ganze ist dann auch "sicher", wenn ich das so schreibe?
 

dewey

Gewürzluiken
Registriert
01.05.06
Beiträge
5.721
also du kannst die verbindungsdaten in eine connect.php reintun und diese am anfang des dokuments wo du die daten auslesen willst mit dem include befehl einbinden. ich weis natürlich nicht ob das sicher ist aber so haben wir das in der schule halt gelernt :D
 

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Ok;)
Ich hab mir mal die Tabelle angesehen, die mir das Plugin produziert:
Table_id ist der Wert, um welche angelegte Tabelle im Plugin es sich handelt (ich kann diese dann zB mit
einbinden).
Row_id ist die Zeilennummer.
Value ist der Inhalt.
result_aid müsste eine fortlaufende Nummerierung sein, mit deren Hilfe man die Spalten sortieren könnte (also zB ich nehme table_id=3, row_id=2 und sortiere die 3 result_aid-Werte die ich bekomme vom kleinsten zum größten).

Wie müsste nun der Befehl also lauten, wenn ich die Tabelle wp_golfresult habe und die Variable Termine für zB die table_id=3 genauso aussehen lassen möchte, wie ich es händisch mache?

Danke;)

Edit: Also Google hilft mir soweit weiter:
$termine[]="SELECT * FROM wp_golfresult WHERE table_id=13 ORDER BY result_aid";
Erreiche ich damit aber sicher noch nicht das, was ich möchte richtig?


Ich möchte ja die genaue Struktur später so haben:
$termine[] = array('tag' => '2008-12-12', 'zeit' => '19.00', 'beschreibung' => 'XY', 'dauer' => '0');

Edit2:
So dürfte es schon besser sein
$result = mysql_query("SELECT value FROM wp_golfresult WHERE table_id=3");
while ($row = mysql_fetch_array($result))
$termine[] = $row[value];
Aber mich immer noch nicht zur Struktur meiner vorherigen Variblen bringen...
 

Anhänge

  • Bild 1.png
    Bild 1.png
    20 KB · Aufrufe: 161
Zuletzt bearbeitet:

dewey

Gewürzluiken
Registriert
01.05.06
Beiträge
5.721
bei mir ist das leider schon ein jahr her drum kenn ich mich damit nicht mehr so aus. darum kann ich dir auch die befehle nicht mehr im einzelnen erklären :D aber vl kann dir wer anderer weiterhelfen.
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Ich möchte ja die genaue Struktur später so haben:
$termine[] = array('tag' => '2008-12-12', 'zeit' => '19.00', 'beschreibung' => 'XY', 'dauer' => '0');


Wenn die Felder genau so in der Datenbank heißen:
Code:
SELECT tag, zeit, beschreibung, dauer FROM ...
Wenn nicht:
Code:
SELECT feldnametag AS tag, feldnamezeit AS zeit...
EDIT: Ist das im Screenshot wirklich die Struktur? Leider ein wenig dämliches Datenbankdesign...

Code:
$result = mysql_query("SELECT value FROM wp_golfresult WHERE table_id=3 ORDER_BY result_aid DESC");
while ($row = mysql_fetch_array($result))
{
$beschreibung = $row[value];
$zeit = mysql_fetch_array($result)
$tag = mysql_fetch_array($result)
$termine[] = array('tag' => $tag, 'zeit' => $zeit, 'beschreibung' => $beschreibung);

}
 
Zuletzt bearbeitet:

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Die Tabelle schaut genauso aus, wie im Anhang von Post #5 gezeigt.
Das heißt jede Zeile der "Termintabelle" ist auf 3 Zeilen in der Datenbanktabelle aufgeteilt, wobei jeweils die Spalte "value" den Inhalt der Zelle in der Termintabelle beinhaltet.

Das hieße ich müsste zunächst alle Daten mit der table_id=3 auslesen, diese gleichzeitig nach result_aid sortieren lassen und dann jeweils 3 Werte in eine Zeile der neuen Feld-Variablen packen, oder?
Ich bekomme ja beim Auslesen:
(Wert1, Wert2, Wert3,....,Wertn)
und brauche aber
(Wert1, Wert2, Wert3)
(Wert4, Wert5, Wert6)
(........................)
(Wertn-2, Wertn-1, Wertn)

Kann das jemand in Code zusammenfassen?

EDIT: Ok danke Bananenbieger. Werde ich gleich mal ausprobieren. Jap, die Struktur scheint mir auch etwas dämlich wobei das Plugin ansonsten sehr sinnvoll ist;)
Schade, ich kann dir kein Karma geben:( Hab dich erst bewertet...
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
So funktioniert mein oben beschriebener Code nach dem EDIT.

Allerdings gibt das Teil nur eine Zeile aus, nämlich für table_id=3. Wenn Du die WHERE-Bedinung änderst und unten $termine[] loopbar machst, funktioniert es mit Deiner Datenbank.

Code:
$result = mysql_query("SELECT value FROM wp_golfresult ORDER_BY result_aid DESC");

$i=0; // Index für die Array-Zeile

while ($row = mysql_fetch_array($result))
{
$beschreibung = $row[value];
$zeit = mysql_fetch_array($result)
$tag = mysql_fetch_array($result)
$termine[$i] = array('tag' => $tag, 'zeit' => $zeit, 'beschreibung' => $beschreibung);
$i++;
}

Danach hast Du ein zweidimensionales Array $termine[] mit der gewünschten Struktur pro Zeile.
 

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Danke für deine Hilfe!
Leider klappt es immer noch nicht:
Parse error: syntax error, unexpected T_VARIABLE in /mnt/web7/32/40/5811140/htdocs/wordpress/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 27

So schaut das ganze bei mir im Moment aus (ich habe es wieder auf table_id=3 beschränkt)
<!-- TERMINE DER JUGENDFEUERWEHR -->

<h2>Termine der Jugendfeuerwehr</h2>

<table class="wptable rowstyle-alt">
<colgroup><col width="80"><col width="50"><col width="420"></colgroup>
<tr>
<th class="sortable">Datum</th>
<th class="sortable">Beginn</th>
<th class="sortable">Veranstaltung</th>
</tr>
<?php

$background = 0;
$class1 = "";
$class2 = "alt";
$termine = array();

$result = mysql_query("SELECT value FROM wp_golfresult WHERE table_id=3 ORDER_BY result_aid DESC");

$i=0; // Index für die Array-Zeile

while ($row = mysql_fetch_array($result))
{
$beschreibung = $row[value];
$zeit = mysql_fetch_array($result)
$tag = mysql_fetch_array($result)
$termine[$i] = array('tag' => $tag, 'zeit' => $zeit, 'beschreibung' => $beschreibung);
$i++;
}

$emptyList=true;

foreach($termine as $termin)
{
if(date("Y-m-d H:i") < $termin['tag']." ".$termin['zeit'])
{
switch ($background)
{
case 0: $backgroundColor = $class1; break;
case 1: $backgroundColor = $class2; break;
}
echo

"<tr class=\"$backgroundColor\">
<td align=\"center\">".date("d.m.Y",strtotime($termin['tag']))."</td>
<td align=\"center\">".$termin['zeit']."</td>
<td>".$termin['beschreibung']."</td>
</tr>";

$background = !$background;
$emptyList=false;
}
}
{
if($emptyList)
{
echo
"<tr class=\"\">
<td></td>
<td></td>
<td>Derzeit liegen leider keine aktuellen Termine vor.</td>
</tr>";
}
}
?>

</table>

<!-- ENDE DER TERMINE DER JUGENDFEUERWEHR -->
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
In Zeile 26 und 27 fehlt je ein Semikolon am Ende der Zeile:
Code:
$zeit = mysql_fetch_array($result);
$tag = mysql_fetch_array($result);

Wenn Du es brauchst, kannst Du die Table-Beschränkung wieder herausnehmen.
 

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Das hatte ich schon ausgebessert und dann kam das hier (wobei da doch kein Semikolon hingehört oder?):
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/web7/32/40/5811140/htdocs/wordpress/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 26

Die Beschränkung brauche ich;)
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Was genau steht bei Dir in Zeile 26?

Die Fehlermeldung bedeutet, dass keine gültige MySQL-Ergebnistabelle übergeben worden ist.

Und noch was ist mir aufgefallen: Ich hatte aus versehen übersehen, dass $tag und $zeit ja Arrays sind. Es muss also richtig heißen:
Code:
$zeit = mysql_fetch_array($result)
$tag = mysql_fetch_array($result)
$termine[$i] = array('tag' => $tag[value], 'zeit' => $zeit[value], 'beschreibung' => $beschreibung);
 

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Inzwischen ist es die Zeile 27:
Parse error: syntax error, unexpected T_VARIABLE in /mnt/web7/32/40/5811140/htdocs/wordpress/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 27
Wenn du die runtime.php meinst:
21 function ExecPhp_Runtime(&$cache)
22 {
23 $this->m_cache =& $cache;
24
25 add_filter('the_content', array(&$this, 'filter_user_content'), 1);
26 add_filter('the_content_rss', array(&$this, 'filter_user_content'), 1);
27 add_filter('the_excerpt', array(&$this, 'filter_user_content'), 1);
28 add_filter('the_excerpt_rss', array(&$this, 'filter_user_content'), 1);
29 add_filter('widget_text', array(&$this, 'filter_widget_content'), 1);
30 add_filter('user_has_cap', array(&$this, 'filter_user_has_cap'), 10, 3);
31 }

In meinem Skript steht:
19$result = mysql_query("SELECT value FROM wp_golfresult WHERE table_id=3 ORDER_BY result_aid DESC");
20
21$i=0; // Index für die Array-Zeile
22
23while ($row = mysql_fetch_array($result))
24{
25$beschreibung = $row[value];
26$zeit = mysql_fetch_array($result)
27$tag = mysql_fetch_array($result)
28$termine[$i] = array('tag' => $tag[value], 'zeit' => $zeit[value], 'beschreibung' => $beschreibung);
29$i++;
30}
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Mach erst mal am Ende der Zeilen 26 und 27 ein Semikolon.

Falls es dann noch nicht läuft, müssen wir mal die Datenbankabfrage testen.
 

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Mach erst mal am Ende der Zeilen 26 und 27 ein Semikolon.

Falls es dann noch nicht läuft, müssen wir mal die Datenbankabfrage testen.

Hab ich auch gleich noch mal probiert;)
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/web7/32/40/5811140/htdocs/wordpress/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 23

Hier ist der mal der Link zur Preview.
 

dewey

Gewürzluiken
Registriert
01.05.06
Beiträge
5.721
hast du in die connect datei die richtigen daten eingegeben? was kommt, wenn du die datei ausführst (im browser)? wenn es weiß bleibt funktionierts. aber es gibt sicher noch eine professionellere methode denk ich :D
 

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
hast du in die connect datei die richtigen daten eingegeben? was kommt, wenn du die datei ausführst (im browser)? wenn es weiß bleibt funktionierts. aber es gibt sicher noch eine professionellere methode denk ich :D

Die Verbindung müsste ja eigentlich noch offen sein, weil ja wordpress auch kontinuierlich darauf zugreift.
Wenn ich die Verbindung noch mal eplizit aufbaue, dann verschiebt sich nur die Zeile des Fehlers...

Edit: Hab den Code mal speparat in eine html gepackt und bekomme diesen Fehler:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/web7/32/40/5811140/htdocs/wordpress/test.php on line 72)
Das ist genau diese Zeile:
while ($row = mysql_fetch_array($result))
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Füg mal unter die "$result="-Zeile folgendes ein:
Code:
echo mysql_errno() . ": " . mysql_error(). "\n";


Dann sollten wir sehen ,was Sache ist.
 

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Separate test.php
Parse error: syntax error, unexpected T_VARIABLE in /mnt/web7/32/40/5811140/htdocs/wordpress/test.php on line 77

Im Wordpress:
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ORDER_BY result_aid DESC’ at line 1

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/web7/32/40/5811140/htdocs/wordpress/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 24

Das klingt mal gut!
ORDER_BY wird ORDER BY ;)
Danke schon mal! ... auch wenn er offensichtlich alles wirr zeigt, aber das bekomme ich vll. selbst hin;) (siehe hier)

So, es wird langsam. hab noch "AND row_id>1" hinzugefügt und damit fallen auch die "falschen Daten" raus:)
Jetzt muss ich noch das falsch eingetragene Datum verbessern und dann müsste es klappen!
Vielen, vielen DANK!!!!!
 
Zuletzt bearbeitet: