Hier gibt's sicher einen PHP und MySQL-Profi...

blue-jean

Medium Knochen
...Jetzt hab ich folgende Frage: mit PHP und MySQL is es doch möglich, Eingabefelder für Fotos zu erstellen, in die man Kommentare eingiebt, die dann in der Datenbank gespeichert und halt unter dem Foto angezeigt werden...So, also, grundsätzlich müsste es gehn, aber ich hab heute meine erste Stunde PHP ghabt, und so wie das in unserer Informatikgruppe vom Tempo her ausschaut, werdn ma a vor der Matura nächstes jahr net zu so was kommen...
Also deswegen meine Bitte: Kann mir irgendwer bei dem Problem helfen??=)
lg!
Bernd;)
 
Hallo blue-jean!

Vorab: Ja, das mit den Fotos und den zugehörigen Texten geht.

Schilder' doch einfach dein konkretes Problem, dann kann ich dir ja vielleicht den einen oder anderen Lösungsweg aufzeigen ...
 
Die größte Hilfe wäre, wenn du mir sagen könntest, ob mein Denkansatz stimmt, den genauen Synthax kann ich mir wahrscheinlich ohnehin dann aus irgendeinem Buch suchen: Ich möcht jedes Bild durch Datum und einer Zahl (die bei jedem neuen Datum wieder mit 1 anfängt) "identifizierbar machn". Naja, und wenn jemand einen Kommentar eingibt wird der im Datensatz des Bildes gespeichert (Da bin ich mir über folgendes nicht im klaren: Auf längere SIcht möchte ich das ganze noch mit einer Benutzerregistrierung verbinden, d.h. Man kann nur Kommentare abgeben, wenn man registriert ist und Datum, Uhrzeit und Benutzername werden dann mit dem Kommentar angezeigt - Also, vielleicht denke ich jetzt zu kompliziert, aber heißt dass, dass ich in einem Datensatz (=Foto) ein Datenfeld mit "Kommentar1", eines mit "Kommentar1 Datum", eines mit " Kommentar1 Uhrzeit" und eines mit "Kommentar1 Benutzer" brauche, und das für...nur als hausnummer...50 maximal mögliche Kommentare??). Naja, und dann werden alle Kommentare, Datum, Uhrzeiten und Benutzernamen in einer Tabelle ausgegeben...
Naja, und dann hab ich noch ein Rießenproblem: Ich hab noch relativ keine Ahnung von mySQL...kannst du mir da irgendeinen Buchtipp oder so was geben?
lg!
Bernd
 
Hi,

das mit dem "identifizierbar machen" ist im Prinzip schon die richtige Idee.
Nur solltest du das Datum nicht nit einer Nummer mischen.
Der Standard-Ansatz wäre der, dass du jedem Datensatz eine eindeutige ID in Form einer Fortlaufenden Nummer verpasst und das Datum in einem seperaten Feld speicherst.

Wenn du das mit mehr als einem Kommentar pro Bild realisieren willst, dann kommst du mit deinem jetzigen Ansatz auf den Holzweg. Denn dir gehen dann mit Sicherheit irgendwann die Kommentar-Felder aus. Ob das nun beim 3. oder beim 51. ist, ist im Prinzip egal - du wirst auf lange Sicht eine (theoretisch) unbegrenzte Anzahl an Kommentarfeldern brauchen.

Daher folgender Vorschlag mit 2 Tabellen. Und zwar eine für die Bilder und eine für die Kommentare.

Illustration folgt in kürze ;)
 
Zur Veranschaulichung:

Tabelle für die Bilder sieht so aus:
Code:
------------------------------------
| bild_ID | datum      | dateiname |
------------------------------------
| 1       | 01-01-2004 | name1.jpg |
------------------------------------
| 2       | 17-01-2004 | name4.jpg |
------------------------------------
| 3       | 03-02-2004 | name9.jpg |
------------------------------------
Und die mit den Kommentaren folgendermassen:
Code:
-----------------------------------------------
| kommentar_id | bild_id | datum     | text   |
-----------------------------------------------
| 1            | 1       |02-01-2004 | blabla |
-----------------------------------------------
| 2            | 1       |17-01-2004 | blabla |
-----------------------------------------------
| 3            | 2       |04-02-2004 | blabla |
-----------------------------------------------

In dem Beispiel gibt es zum Bild mit der ID "1" zwei Kommentare - das könnten theoretisch aber hunderte sein :D
Dadurch, dass jeder Kommentar mit der bild-ID eindeutig zu einem Bild gehört, lassen sich die Kommentare jederzeit eindeutig einem Bild zuordnen.

Ach ja - hier ein paar Links zu php/mysql:

Das offizielle mysql-Referenz-Handbuch (deutsch): http://www.mysql.com/doc/de/index.html
Das offizielle php-Handbuch: http://at2.php.net/manual/de/

Ausgezeichnete Tutorials und Beispiele zu php & mysql findest du auf folgenden Seiten:
http://dclp-faq.de/
http://php-center.de/
http://php-bar.de/


Hoffe, das hilft dir ein wenig weiter. Wenn du noch Fragen hast, frag einfach ;)
 
Sooooooo...jetzt noch eine Frage: ich jetzt grundsätzlich verstandn, wie man MySQL Datenbanken und Tabellen erstellt und wie man auf sie zugreift - Jetzt noch eine Frage: Am Beginn einer Abfrage steht immer "mysql_connect()" - nur woher weiß er, zu welche datenbank er "connecten" soll?
Ah ja - und noch was: wenn ich den link auf "http://...../****.php?bild_id=1 setzt, heißt das dann, dass die variable bild_id auf 1 gesetzt ist?
lg!
Bernd
 
Hi,

dein Code für die Verbindung zum mysql-server müsste ungefähr so aussehen:
PHP:
<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
   or die("keine Verbindung möglich: " .mysql_error());
echo "Verbindung erfolgreich";
?>
wobei "mysql_user" und "mysql_password" von dir durch deine Zugangsdaten zur Datenbank ersetzt werden müssen.
Bis hierher hast du allerdings noch keine Datenbank ausgewählt. Das würde nach folgendem Schema gehen:
PHP:
<?php
mysql_select_db('datenbankname', $link)
   or die ('Kann foo nicht benutzen : ' . mysql_error());
?>
Hier musst du "datenbankname" durch die zu benutzende Datenbank ersetzen.

wenn ich den link auf "http://...../****.php?bild_id=1 setzt, heißt das dann, dass die variable bild_id auf 1 gesetzt ist?
Ja, auf den Wert zugreifen könntest du dann z.B. folgendermassen:
PHP:
<?php
echo $_REQUEST['bild_id'];
?>
 
Und wenn ich gleichzeitig einen Datenbankabfruf machen will verwende ich etwas in der Art von " $res = mysql_db_query("firma","select * from personen"); - und dass liefert dann alles, was in der tabelle (oder in der Datenbank??) Firma in der Tabelle (oder im Datensatz??) Personen steht?
und was für ein Ergebniss liefert der Befehl
$id = mysql_result($res, $i, "kommentar_id");??? liefert das was in der ausgewählten Datenbank, bei den Ergebnissen im Datensatz Zeile "i" im Feld "kommentar_id") steht?
lg!
Bernd
 
Original geschrieben von blue-jean
Und wenn ich gleichzeitig einen Datenbankabfruf machen will verwende ich etwas in der Art von " $res = mysql_db_query("firma","select * from personen"); - und dass liefert dann alles, was in der tabelle (oder in der Datenbank??) Firma in der Tabelle (oder im Datensatz??) Personen steht?
Momentchen, jetzt vermischt du ein paar Sachen ;)

vorweg: die Funktion "mysql_db_query" ist veraltet, du solltest "mysql_query" verwenden.

Zum Unterschied zwischen Datenbank und Tabelle:
Ein DBMS (Datenbank-Management-System) wie mysql eines ist, kann beliebig viele Datenbanken verwalten. Auf eine (oder mehrere dieser Datenbanken kannst du mit deinen Zugangsdaten zugreifen. In jeder Datenbank kannst du beliebig viele Tabelen anlegen.

In deinem Beispiel würde die Anfrage an die Datenbank [nach dem Verwenden von mysql_connect() und mysql_select_db()] so aussehen:
PHP:
<?php
$result = mysql_query("SELECT * FROM tabellenname", $link);
?>
wobei hier alle Informationen (Spalten und Zeilen) der Tabelle "tabellenname" abgefragt werden.

Was du dann mit dem Ergebnis der Abfrage anstellen kannst, findest du hier: http://at2.php.net/manual/de/function.mysql-fetch-array.php
 
ooohh, ich find´s toll was ihr für nen fach-chinesisch benutzt!!
blick zwar nicht durch...naja, als pc-grufti ;)
 
Zuletzt bearbeitet:
@ Birgitt: Keine Sorge, ich versteh's eh selber noch nicht 100%ig=)

@ Admin: Ok, ich hab mir das ganze jetzt noch mal durchgedacht, könntest du dir anschaun, ob das so hinhaun kann:

$db = mysql_connect("localhost","user","pwd");
mysql_select_db('bilder', $db);
$bild=$_REQUEST['bild]'];
$turnier=$_REQUEST['turnier'];

also, bis hierhin bin ich jetzt mit der Datenbank verbunden, hab die Datenbank "Bilder" ausgwählt und hab auf die variablen bild und turnier die werte gespeichert, die beim link so in der richtung *.php?turnier=1&&bild=1 gestanden sind

$res = mysql_query("db","select * from kommentare where turnier_id=$turnier && bild_id=$bild");

damit möchte ich jetzt alle Datensätze aus der Tabelle Kommentare auswählen, die bei "turnier_id" und "bild_id" bei dem jetztigen Beispiel 1 stehen haben

$res2 = mysql_query("db","select * from bilder where turnier_id=$turnier && bild_id=$bild");

und damit wähle ich den (da gibt's ja dann nur einen) datensatz aus der Tabelle Bilder aus, der wie oben bei turnier_id und bild_id 1 stehen hat

$num = mysql_num_rows($res);
echo "$num Kommentare<br>";

Das gibt im Grunde nur an, wie viele Kommentare es zu diesem Bild gibt, indem es die datensätze (zeilen) der Ergebnisse die's bei Kommentare gegeben hat zählt

$datei=mysql_result($res2,"1","dateiname");
echo ("<table><tr><td><img src=$datei></img></td></tr></table>");

So, ab hier bin ich mir nicht mehr ganz sicher: Ich möchte den Wert, der unter "dateiname" steht, auf die variable "$datei" speichern, und das ganze dann mit eben als image ausgeben...
wenn ich das richtig verstanden habe, wählt der Befehl mysql_result aus den Ergebnissen $res2, Zeile 1 den Wert in der Spalte "dateiname" aus, stimmt das?

for ($i=0; $i<$num; $i++)
{
$id = mysql_result($res, $i, "kommentar_id");
$dat = mysql_result($res, $i, "datum");
$komm = mysql_result($res, $i, "text");
echo ("<table><tr><td widht=20>".$id."<tr><td widht=50px>".$dat."</td><td>".$komm."</td></tr></table>");
}

So, und das war jetzt der schwierigste Teil: Unter $id/$dat/$komm speichert er jeweils die Resultate aus der Abfrage $res, mit der Zeile i (in dem Fall von 0 bis zum letzten), und wieder dem jeweiligen Feldnamen, und gibt das ganze dann in form einer Tabelle aus...

So, ich hoffe es waren nicht ZU viele Fehler drinnen! Würd mich echt freun, wenn du dir das ganze mal schnell durchschaun könntest, ich hab zur zeit leider noch keinen Testserver und bin mir auch noch nicht immer 100% sicher ob meine Gedankengänge jetzt stimmen=)
lg!
Bernd
 
Hallo blue-jean,

im grossen und ganzen sieht das gut aus. Den Testserver (den du übrigens unbedingt haben solltest) kann ich dir nicht ersetzen, aber die eine oder andere kleinigkeit ist ir beim überflieben aufgefallen (kein anspruch auf vollständigkeit):
PHP:
 $res = mysql_query("db","select * from kommentare where turnier_id=$turnier && bild_id=$bild");
das sollte so aussehen (zuerst das SQL-statement und keine Anführungszechen bei "db", dafür ein Dollar-Zeichen; ausserdem besser ein "AND" statt der "&&" in sql):
PHP:
 $res = mysql_query("select * from kommentare where turnier_id=$turnier AND bild_id=$bild", $db);
Das gleiche natürlich bei "$res2"

Weiter komm' ich momentan nicht, muss an die Arbeit ;)
Ich werd' schaun, ob ich mir in nächster Zeit den Rest ansehen kann.

In der Zwischenzeit kannst du dir, diesen Link hier ansehen http://at2.php.net/manual/de/ref.mysql.php - besonders die Absätze unter den Übeschriften "Begriffserläuterung" und "Beispiele" sind vielleicht hilfreich für dich.
 
Oben