Gegen Bilderklau - Das Original (https://www.gegen-bilderklau.net/index.php)
- Design, Website, Copyright (https://www.gegen-bilderklau.net/board.php?boardid=80)
--- Homepagehilfe (https://www.gegen-bilderklau.net/board.php?boardid=27)
---- Tutorials und FAQ (https://www.gegen-bilderklau.net/board.php?boardid=45)
----- [PHP & MySQL] Ausgeben von Daten mit MySQL (https://www.gegen-bilderklau.net/thread.php?threadid=183167)


Geschrieben von Nanni am 28.01.2012 um 02:01:

  Ausgeben von Daten mit MySQL

Automatisches Ausgeben


1 – Beginn bzw Voraussetzungen
Voraussetzung ist vorallem eine bereits erstellte Datenbank, ihr beginnt also am besten mit dem Tutorial:
Automatisches Eintragen mit MySQL

2 – Mitgliederübersicht erstellen

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<table>
<?php
include("Datenbank.php");
$Ergebnis mysql_query("SELECT * FROM Mitglieder WHERE Status = 'Vollmitglied'");
if(mysql_num_rows($Ergebnis) == 0) {
  echo "<tr><td colspan="3"><P align="center">Es gibt noch keine Vollmitglieder.</td></tr>"; } else {
  while($Data mysql_fetch_array($Ergebnis)) {
    echo "<tr><td>$Data[Name]</td><td>$Data[Alter] Jahre</td><td><A href="profil.php?id=$Data[ID]">Zum Profil</A></td></tr>"; } }
echo "</table>";
?>


# Erst beginnen wir mit einer Tabelle, öffnen PHP und inkludieren die Datenbank.php-Datei.
# Danach kommt wieder ein mysql-Befehl, dessen Ergebnis in der gleichnahmigen Variable gespeichert wird. Dabei suchen wir * (= alles) von der Tabelle "Mitglieder", wo der Status "Vollmitglied" ist. Solltet ihr keine speziellen Einteilungen haben, könnt ihr die Abfrage nach "Mitglieder" beenden.
# Mit mysql_num_rows() zählen wir die Zeilen, die als Ergebnis gefunden werden. Wenn wir kein Ergebnis zurück bekommen (0), soll ausgegeben werden, dass es keine Vollmitglieder gibt.
# Sonst wird eine while-Schleife geöffnet, die so lange durchläuft, wie es Zeilen gibt. Für jede Zeile befolgt sie was in ihren { } angegeben ist, in unserem Fall die echo-Ausgabe.
# $Data[...] wandelt PHP jeweils in das um, was in der Tabelle eingetragen wurde. Wenn keine andere Sortierung angegeben wurde, geht das nach ID, d.h. die Tabelle zeigt in der ersten Zeile die Daten zu Mitglied 1 an, u.s.w.

# Wichtig: Bei dem Befehl "Alter" handelt es sich auch um einen SQL-Befehl. Solltet ihr dieses Wort verwenden, müsst ihr besonders darauf achten die richtige Schreibweise zu verwenden, da es sonst schnell zu Fehlern kommt.

3 - Verlinkung aufs Profil

Verlinkt wird auf profil.php?id=$Data[ID], der Link sieht also z.B. so aus: profil.php?id=1. Diese Zahl kann die nächste Seite aus dem Link herauslesen, nämlich mit der GET-Funktion. Dadurch können wir, wenn wir das Profil von Mitglied 1 anklicken, auch wirklich die Daten von Mitglied 1 abfragen.

4 - Mitgliedersteckbrief

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
<?php
include("Datenbank.php");
$id "$_GET[id]";

$Ergebnis mysql_query("SELECT * FROM Mitglieder where ID='$id'");
if(mysql_num_rows($Ergebnis) == 0) { 
  echo "Dieses Mitglied existiert nicht!"; } else {
  $Data mysql_fetch_array($Ergebnis);
  echo "<table><tr><td colspan="2">$Data[Name]</td></tr>
  <tr><td>Alter:</td><td>$Data[Alter] Jahre</td></tr>
  <tr><td>Email:</td><td>$Data[Email]</td></tr>
  <tr><td colspan="2">Selbstbeschreibung</td></tr>";
  if(!$Data[Selbstbeschreibung]) {
    echo "<tr><td colspan="2">- keine bekannt -</td></tr>"; } else {
    echo "<tr><td colspan="2">$Data[Selbstbeschreibung]</td></tr>"; }
echo "</table>"; }
?>


# Wir öffnen PHP, dann wird die Datenbank inkludiert und anschließend die id aus dem GET abgelesen und als $id gespeichert.
# Nun gibt es wieder eine Abfrage aus der Tabelle "Mitglieder" - gesucht wird die Zeile, wo die ID mit unserer übermittelten id übereinstimmt. Wenn keine gefunden wird, gibt es das Mitglied nicht (z.B. jemand hat den Link händisch eingegeben und eine falsche Zahl genommen).
# Ansonsten wird $Data so wie oben definiert, eine while-Schleife brauchen wir hier nicht, es gibt ja nur ein Ergebnis dessen Daten wir hier auslesen wollen.
# Nun gibt es quasi eine normale Tabelle, wobei der Name einfach als $Data[Name] geschrieben wird. MySQL sucht dann die zur ID passenden Daten und gibt diese dort aus (:
# Bei der Selbstbeschreibung, die ja nicht jeder ausgefüllt haben muss, empfiehlt es sich erst zu prüfen, ob das Feld nicht leer ist if(!...), und dann einen Platzhalter auszugeben. Wenn das Feld nicht leer, sondern beschrieben ist, wird natürlich das ausge gegeben.


Ich hoffe das hilft euch, wenn wer Fehler entdeckt o.ä. einfach Bescheid geben.

LG Nanni



Geschrieben von +Debbie+ am 28.01.2012 um 15:23:

 

Daumen runter



Geschrieben von brain_surgery am 02.02.2012 um 02:48:

 

Nettes Tut, gut erklärt! Nachdem eponas Tutorials zu diesem Thema ja hier nicht mehr verfügbar sind, ist das auf jedenfall ein guter Ansatz.

Ich hätte allerdings drei kleine Verbesserungsvorschläge:
$Data: Den Array $Data zu nennen ist zwar nicht falsch, aber der Name ist nicht wirklich aussagekräftig. Spätestens bei zwei oder mehr Abfragen kann es da ganz schön durcheinander kommen. Da es sich bei deinem Tut um einen Mitgliedersteckbrief handelt, warum die Variable nicht $user (oder eben $User) oder $mitglied (bzw. $Mitglied, je nach persönlicher Vorliebe) nennen? Auch nicht falsch aber ebenfalls nicht richtig ist der Index des Arrays. Du schreibst zum Beispiel $Data[Name]. PHP korrigiert solche Fehler für gewöhnlich selbst, aber besser wäre auf jeden Fall $Data["Name"] oder $Data['Name'].

HTML in echo: Ebenfalls nicht falsch ist, dass du das HTML der Tabelle per echo-Befehl ausgeben lässt. Für die Performance besser und vor allem übersichtlicher wäre es aber, stattdessen den PHP-Tag zu schließen, das HTML auszugeben, und ihn dann wieder zu öffnen. Wo die Daten eingefügt werden sollen, schreibst du dann einfach die Kurzform des echo, zum Beispiel <?=$Data["ID"]?>. Wenn du jetzt nicht weißt, was ich meine (blöd erklärt, sorry ;; ), dann hier ein Beispiel anhand von deinem Code:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
<?php
if ( $Data["Selbstbeschreibung"] != "" ) 
{    
?>
<tr><td colspan="2">- keine bekannt -</td></tr>
<?php
 } else {   
?>
<tr><td colspan="2"><?=$Data["Selbstbeschreibung"]?></td></tr>
<?php
 }
?>
</table>


(Ich war so frei, die if-Bedingung etwas abzuändern! :o )
Mit dieser Variante würdest du dir auch das lästige Auskommentieren der Anführungszeichen im HTML-Code sparen. smile

$Data[Alter]: Mit diesem Feldnamen würde ich ganz vorsichtig sein. smile "ALTER" ist ein reserviertes Wort in MySQL, deswegen ist die Verwendung in Datenbankabfragen und für Feldnamen absolut nicht empfohlen. Um Fehler zu vermeiden, würde ich es in etwas ähnliches umbennen, zum Beispiel "geburtstag". smile

lg, brain



Geschrieben von Nivea am 02.02.2012 um 09:02:

 

Immer den PHP-Tag zu schliessen find ich aber auch hässlich, so unter uns. Ich bevorzuge alles was ausgabe ist in eine Variable zu knalln und die dann am Ende auszugeben. Und the right way to go wäre ja sowieso Output Buffering.
Ausserdem fänd ichs toll wenn du die Aussage mal belegen könntest, dass echos mehr Performance fressen? Habs eher gegenteilig im Kopf und find grad auf die schnelle keine Quelle.

E: http://www.4webhelp.net/tutorials/php/echo.php ABER:
Zitat:
To a point i agree... and follow the advice given in this tutorial.. but let it be said that echo is only slower when you user echo ""; if you user echo ''; (single quotes) PHP does not bother to parse for variables and printing the echo is litterally the same as printing the HTML.


http://dev-tips.com/featured/4-fantastic-php-output-buffering-tricks-for-web-developers
http://www.tuxradar.com/practicalphp/13/0/0

Ansonsten Top Verbesserungen & Gutes Tut. Daumen runter



Geschrieben von Nanni am 02.02.2012 um 13:26:

 

Naja, ich habs versucht, einfach zu halten xD

Aber das mit dem Alter wollte ich eig wirklich vermeiden, hat sich so eingeschlichen. Aber sofern man die SQL's u.s.w. richtig angibt, gibts auch da keine Probleme. Augenzwinkern



Geschrieben von brain_surgery am 02.02.2012 um 19:03:

 

@Nivea: Ich versuche nur zu helfen. smile Mir ist aufgefallen dass diese Dinge zB auch bei eponas altem Tut so waren, und als ich angefangen hab, zu programmieren, hab ich mir dann schwer getan genau deswegen.

Wegen der Performance, ich hatte es jetzt so im Kopf, kann mich erinnern dass ich vor kurzem mir mal Tips durchgelesen hab, wie man PHP schneller macht. Kann natürlich auch sein dass ich da jetzt Dinge durcheinander gebracht hab! @@ Aber ja, ist natürlich wie das meiste reine Vorlieben-Sache. Spielt natürlich auch eine Rolle, wie man sich es persönlich eingelernt hat, oder was der spezielle Fall grade verlangt. Ist deswegen auch immer gut, mehrere Versionen zu kennen. (Das richtet sich dann eher an die Leute, die das Tutorial verwenden.) smile
Wie ja auch in der Seite, die du verlinkt hast erwähnt wird, ist es vor allem besser bei größeren Blöcken von HTML eine Überlegung wert, HTML und PHP zu trennen. So eine bis zwei Zeilen sind sicher kein Problem. Aber zum Beispiel auch im Code-Editor wird es einfach schöner und übersichtlicher angezeigt (Stichwort "Syntax-Highlighting"), wenn man das HTML nicht ins echo packt.
Im Endeffekt ist die Performance zugegeben aber eh eher ein vernachlässigbarer Faktor, wenn es sich nur um kleine, eigene Projekte handelt, wenn ich so drüber nachdenke... öö /rückzieher

Wenn Nanni die Variante beibehalten will, die sie jetzt hat, würde ich allerdings die Variablen aus den Anführungszeichen trotz allem rausnehmen:
code:
1:
echo "<tr><td>",$Data["Name"],"</td><td>,$Data["Alter"]," Jahre</td><td><A href="profil.php?id=",$Data["ID"],"">Zum Profil</A></td></tr>";

Eben, damit der Index unter Anführungszeichen gesetzt werden kann. (Wobei ich hier jetzt möglicherweise pingelig bin. Aber zu "sauberem" Code gehört das einfach dazu, Index-Namen(!) unter Anführungszeichen zu setzen, finde ich.)

Zu dem Thema Anführungszeichen/Hochkomma beim echo Befehl hab ich noch hier eine sehr nützliche Referenz gefunden: Unterschied "" und '' bei echo

@Nanni: Schon klar! großes Grinsen Ist ja wie gesagt auch kein schlechtes Tutorial geworden! Nur halt ein paar Dinge sollten auch bei einfachen Tutorials gleich von Anfang an stimmen. Später werden es dir die angehenden Programmierer danken! smile Und wegen dem Alter, freut mich wenn es in deinem Fall geklappt hat, aber ich würde trotzdem zumindest eine Warnung oben in den ersten Post machen, dass es eben sehr schnell nicht funktionieren kann. :'D

lg, brain



Geschrieben von Nanni am 02.02.2012 um 19:44:

 

Warnung hinzugefügt.

Vielleicht wäre es das Klügste, du schreibst ein eigenes Tutorial, ich möchte meines jedenfalls überschaubar halten. Aber momentan siehts eh danach aus, als würde es nicht verschoben werden ^^



Geschrieben von brain_surgery am 04.02.2012 um 23:27:

 

(Eigenes Tutorial hatte ich denke ich mal geplant, bin leider nie dazu gekommen...großes Grinsen )
Aber dass das noch nicht verschoben wurde, finde ich seltsam. Ich kanns mal eben einem Mod melden.



Geschrieben von Andora am 19.01.2013 um 18:18:

 

hey smile ,
erstmal muss ich sagen das es wunderbar erklärt ist und ich es von anfang an verstanden habe ^^
Jetzt habe ich alles eingetragen und bis jetzt klappt auch alles sehr gut mit der automatischen eintragung usw, nur am Stecki will es einfach nicht funktionieren :/
ich habe mal hier den code, vllt habe ich ja doch was falsch drin...

Das ist der stecki
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
<?php
include("Datenbank.php");
$id = "$_GET[id]";

$Ergebnis = mysql_query("SELECT * FROM Mitglieder where ID='$id'");
if(mysql_num_rows($Ergebnis) == 0) { 
  echo "Dieses Mitglied existiert nicht!"; } else {
  $Data = mysql_fetch_array($Ergebnis);
  echo "<table><tr><td colspan="2">$Data['name']</td></tr>
  <tr><td>Alter:</td><td>$Data['alter'] Jahre</td></tr>
  <tr><td>Geschlecht:</td><td>$Data['geschlecht']</td></tr>
  <tr><td>Email:</td><td>$Data['email']</td></tr>
  <tr><td colspan="2">Selbstbeschreibung</td></tr>";
  if(!$Data['selbstbeschreibung']) {
    echo "<tr><td colspan="2">- keine bekannt -</td></tr>"; } else {
    echo "<tr><td colspan="2">$Data['selbstbeschreibung']</td></tr>"; }
echo "</table>"; }
?>



Die Mitgliederübersicht
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<table>
<?php
include("Datenbank.php");
$Ergebnis = mysql_query("SELECT * FROM Mitglieder");
if(mysql_num_rows($Ergebnis) == 0) {
  echo "<tr><td colspan="3"><P align="center">Es gibt noch keine Mitglieder.</td></tr>"; } else {
  while($Data = mysql_fetch_array($Ergebnis)) {
    echo "<tr><td>$Data[name]</td><td>$Data[alter] Jahre</td><td>$Data[geschlecht]</td><td>$Data[email]</td><td><A href="profil.php?id=$Data[id]">Zum Profil</A></td></tr>"; } }
echo "</table>";
?>


Und ich verstehe nicht was ich da falsch mache :/



Geschrieben von Feather am 19.01.2013 um 18:27:

 

Was genau klappt nicht? Wird irgendein Fehler angezeigt?



Geschrieben von Andora am 19.01.2013 um 21:45:

 

es wird immer nur eine 404 fehlerseite angezeigt.

wenn man hier auf der seite ist und auf den stecki zugreifen will
dann kommt man nur auf eine leere seite.



Geschrieben von Nanni am 19.01.2013 um 22:12:

 

Du hast ja auch keine profil.php im angegebenen Ordner. Hast du die vll vergessen hochzuladen oder meinst du Profil.php (also großgeschrieben)?



Geschrieben von Andora am 19.01.2013 um 22:25:

 

Ja genau da sind alle daten drin, habe es auch schon umgenannt also in klein aber es funktioniert leider nicht :/



Geschrieben von Nanni am 19.01.2013 um 22:43:

 

Es liegt wohl an den einfachen Anführungszeichen bei $Data['name'] usw, ich habs eben bei mir am Webspace getestet (der gibt zumindest Fehlermeldungen großes Grinsen ), mit $Data[name] ohne Anführungszeichen geht es jedenfalls ;D



Geschrieben von Andora am 19.01.2013 um 22:48:

 

tatsächlich smile danke schön für deine schnelle hilfe <3



Geschrieben von Pony-girl am 11.02.2013 um 19:47:

 

Huhu smile

Danke für das Tutorial, es ist sehr gut erklärt und ich bin gut mitgekommen.

Leider zeigt es bei mir die Mitgliederprofile nicht an, es wird zwar auf profil.php?id=1 verlinkt, aber leider kommt das die seite nicht verfügbar ist...

Das sind die Codes: (unverändert von oben)

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<table>
<?php
include("Datenbank.php");
$Ergebnis mysql_query("SELECT * FROM Mitglieder");
if(mysql_num_rows($Ergebnis) == 0) {
  echo "<tr><td colspan="3"><P align="center">Es gibt noch keine Vollmitglieder.</td></tr>"; } else {
  while($Data mysql_fetch_array($Ergebnis)) {
    echo "<tr><td>$Data[Name]</td><td>$Data[Alter] Jahre</td><td><A href="profil.php?id=$Data[ID]">Zum Profil</A></td></tr>"; } }
echo "</table>";
?>


php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
<?php
include("Datenbank.php");
$id "$_GET[id]";

$Ergebnis mysql_query("SELECT * FROM Mitglieder where ID='$id'");
if(mysql_num_rows($Ergebnis) == 0) { 
  echo "Dieses Mitglied existiert nicht!"; } else {
  $Data mysql_fetch_array($Ergebnis);
  echo "<table><tr><td colspan="2">$Data[Name]</td></tr>
  <tr><td>Alter:</td><td>$Data[Alter] Jahre</td></tr>
  <tr><td>Email:</td><td>$Data[Email]</td></tr>
  <tr><td colspan="2">Selbstbeschreibung</td></tr>";
  if(!$Data[Selbstbeschreibung]) {
    echo "<tr><td colspan="2">- keine bekannt -</td></tr>"; } else {
    echo "<tr><td colspan="2">$Data[Selbstbeschreibung]</td></tr>"; }
echo "</table>"; }
?>


Danke & LG Pony-girl



Geschrieben von Nanni am 11.02.2013 um 20:18:

 

Du brauchst eine Seite "profil.php", die genau so heißt... deine profil-Dateien haben alle noch einen Anhang nach der Ende (.php) - dadurch findet er die Datei nicht. Das ?id= gehört nicht zum Dateinamen, alles danach sowieso nicht (der Link lautet ja nicht profil.php?id=$Data[ID], sondern zb profil.php?id=1 usw. Aber das hängt sich automatisch an den Dateinamen dran ;D



Geschrieben von Pony-girl am 11.02.2013 um 21:08:

 

Upps großes Grinsen
Hat sich erledigt, jetzt klappt alles.
Vielen Dank Herz



Geschrieben von Andora am 04.05.2013 um 13:23:

 

hallo ich nochmal Zunge raus ,
ich wollte nochmal betonen das es ein wirkich tolles tut ist, funktioniert auch.
Jetzt hätte ich eine frage und zwar, ist es möglich das man sobald ein pferd intern gekauft wird (per formular) dieses auch im profil des mitglieds eintragen zu lassen? und wenn ja wie.

lg smile



Geschrieben von +Debbie+ am 04.05.2013 um 16:04:

 

Dafür bräuchtest Du ein Feld "Besitzer", hast Du das? Dann könntest Du alle Pferde ausgeben lassen bei denen Besitzer = "Mitglied" ist (hier am besten mit IDs arbeiten). Um es beim kaufen direkt beim Mitglied "einzutragen" einfach beim Kaufen UPDATE "Tabelle" WHERE besitzer = "Mitglied" Augenzwinkern

Ist gar nicht so wild das ganze ... Wenn ich Dein Kaufformular und DB-Struktur kennen würde könnte ich Dir mehr sagen großes Grinsen


Forensoftware: Burning Board, entwickelt von WoltLab GmbH