Neben einem Thumbnail, weitere Bilder aus einer Datenbank anzeigen

Ich bin schon wieder über einen Fehler gestolpert.
Es wird beim Aufruf des Profiles immer ein Link zum Löschen angezeigt obwohl kein Bild dafür da ist. Das liegt daran das die Abfrage mit der die Bilder pro User ermittelt werden falsch ist....

Sobald ich Zeit habe mich damit wieder auseinanderzusetzen, werde ich das auf jeden Fall prüfen, ich Danke dir, super lieb von dir!
 
Ich glaube du wirst mich bald hassen!

HTML:
<tr>
<!--  Du öffnest in einer Tabellenzelle eine Form, schließt sie aber nicht  -->
<td><form action="{$_SERVER['PHP_SELF']}" name="frm_bild" method="post" enctype="multipart/form-data"></td>
</tr>
<tr>
<td>Bild-Datei(jpg) w&auml;hlen :</td>
<!--  Du beginnst unten eine neue Zeile, wo ist aber das Zeilenende?  -->
<tr>
<td><input name="userfile" type="file"></td>
</tr>
<tr>
<td><input type="submit" name="bild" value="Hochladen"></td>
</tr>
<tr>
<!--  Hier öffnest du das zweite Formular obwohl das erste noch nicht geschlossen wurde.  -->
<!--  Dazu kommt das du in der Zelle auch dieses Formular nicht schließt  -->
<td><form action="{$_SERVER['PHP_SELF']}" name="frm_thumb" method="post" enctype="multipart/form-data"></td>
</tr>
<tr>
<td>Bild-Datei/Thumbnail(jpg) w&auml;hlen :</td>
<!--  Hier beginnt wieder eine neue Zeile obwohl die vorherige nicht geschlossen wurde  -->
<tr>
<td><input name="userfile2" type="file"></td>
</tr>
<tr>
<td><input type="submit" name="thumb" value="Hochladen"></td>
</tr>
<!--  Hier ist zwischen 2 Zeilen ein (******) schließendes FORM-Tag obwohl es 2 Formulare gibt  -->
<!--  Außerdem gehört das hier gar nicht hin!  -->
</form>
</table>

Wenn du schon 2 Formulare hast (was gar nicht nötig ist) und du sie in eine Tabellenzelle machst, dann musst du die Formulare auch innerhalb dieser Zelle wieder schließen.

Schreibst du den HTML Code komplett von Hand? Auch wenn sie oft nicht gerne gesehen sind. Ich arbeite gerne mit einem Editor der mir den HTML Code auch gleich in der Vorschau anzeigt und ich ihn da bearbeiten kann. Dadurch gehen mir z.B. keine Zeilenenden verloren.
 
Hallo "tombe",
ich habe gerade mal deine Dateien (function,upload) übernommen und festgestellt, dass kein Eintrag in die DB vorgenommen wird (wie du ja auch beschrieben hast)und deshalb auch nur der Link zum Löschen angezeigt wird, da kein Name aus der DB gelesen werden kann. (vermutlich)Ich habe auch deine sql-anweisung übernommen und trotzdem wurde kein eintrag vorgenommen. Des weiteren wird jetzt keine Fehlermeldung mehr angezeigt, wenn ich ein Thumbnail hochlade, aber es wird auch keine prüfung der Dateiformate mehr vorgenommen. Man kann also nun jedes beliebiges Dateiformat uploaden? Ich werd jetzt nochmal alles genauer unter die Lupe nehmen, sicherlich hab ich da irgendwo irgendwas blödes übersehen etc. Über deine Unterstützung freue ich mich natürlich weiterhin :) LG Kerstin

P.S. Kannst du mir deine sql-anweisung bitte nochmal erklären, was passiert da genau?
PHP:
$sql3="INSERT INTO picture (id, thumbnail) VALUES ({$_SESSION["id"]}, '$filename2') ON DUPLICATE KEY UPDATE thumbnail = '$filename2'";

Gruß
Kerstin
 
Zuletzt bearbeitet:
GuMo Kerstin,

ich wollte auf deine Rückmeldung warten was jetzt klappt oder auch nicht. Ich begebe mich dann auch wieder auf die Suche nach dem Fehler.

Die SQL-Anweisung geht her und versucht einen neuen Datensatz in die DB einzutragen (INSERT INTO). Wird hierbei bemerkt das der eindeutige Schlüssel (DUPLICATE KEY) bereits vorhanden ist, dann wird der vorhandene Datensatz einfach mit den neuen Werten gespeichert (UPDATE).

Was bei dir scheinbar auch noch fehlt, ist die Funktion das wenn ein Bild aus der DB gelöscht wird dann die Datei selber auch gelöscht wird. Kann das sein?

Gruß Thomas
 
GuMo Kerstin,

ich wollte auf deine Rückmeldung warten was jetzt klappt oder auch nicht. Ich begebe mich dann auch wieder auf die Suche nach dem Fehler.

Die SQL-Anweisung geht her und versucht einen neuen Datensatz in die DB einzutragen (INSERT INTO). Wird hierbei bemerkt das der eindeutige Schlüssel (DUPLICATE KEY) bereits vorhanden ist, dann wird der vorhandene Datensatz einfach mit den neuen Werten gespeichert (UPDATE).

Was bei dir scheinbar auch noch fehlt, ist die Funktion das wenn ein Bild aus der DB gelöscht wird dann die Datei selber auch gelöscht wird. Kann das sein?

Gruß Thomas

GuMo Thomas,
danke, dass du mir auch weiterhin noch hilfst und
danke, für die Erläuterung des Statements. Hab diesen DUPLICATE KEY bisher noch nicht gesehen, darum meine blöde Frage. Die Datei selbst, lösche ich mit unlink in der php-Datei piclöschen.php

Gruß Kerstin


Edit:
Wenn man als erstes Bild ein Thumbnail hochläd, dann wird es auch angezeigt und in die DB geschrieben.(inkl. an erster Stelle ein zweiter Lösch-Link was ich eigentlich gar nicht gewollt hab) Des weiteren, wenn ich anschließend ein weiteres, normales Bild uploade, wird an zweiter Stelle, das erste normale Bild angezeigt , rechts neben dem 2. Lösch-Link vom Thumbnail. Nach einem weiteren Upload, eines weiteren normalen Bildes,verschwindet das eben noch angezeigte Thumbnail inkl Lösch-Link. Das 3. normale Bild wird an erster Stelle angezeigt und der 2. Lösch-Link vom Thumbnail rückt vor zur zweiten Stelle. Näheres ist in den Anhängen zu erkennen.

irgendwie schaffe ich es nicht, das Thumbnail in die Anzeigerutine zu integrieren, vielleicht hast du ja eine Möglichkeit?
 
Zuletzt bearbeitet:
Ich glaube es gibt ein weiteres Problem in der Upload:

PHP:
$query ="SELECT count(thumbnail) FROM `picture` WHERE picture.id = {$_SESSION['id']}";
$result = do_mysql($query);
$anzahl = mysql_fetch_row($result);

if($anzahl[0] < 1)

Hiermit werden alle Bilder ermittelt die zu einem bestimmten User gehören und dann beim IF-Block geprüft ob es weniger als 1 ist.
Wenn nun aber ein normales Bild gespeichert ist, ergibt diese Abfrage schon einen falschen Wert und der IF-Block wird nicht mehr ausgeführt.

NACHTRAG: Das Problem mit dem Link zum Löschen liegt daran das bei der SQL-Abfrage mit der die Bilder ausgelesen werden nicht unterschieden wird ob es ein Bild oder "nur" ein Thumbnail ist. Es wird dann der Link angezeigt, da aber die Datei im Thumb-Pfad liegt, wird sie nicht angezeigt.
 
Zuletzt bearbeitet:
Ich glaube es gibt ein weiteres Problem in der Upload:

PHP:
$query ="SELECT count(thumbnail) FROM `picture` WHERE picture.id = {$_SESSION['id']}";
$result = do_mysql($query);
$anzahl = mysql_fetch_row($result);

if($anzahl[0] < 1)

Hiermit werden alle Bilder ermittelt die zu einem bestimmten User gehören und dann beim IF-Block geprüft ob es weniger als 1 ist.
Wenn nun aber ein normales Bild gespeichert ist, ergibt diese Abfrage schon einen falschen Wert und der IF-Block wird nicht mehr ausgeführt.

Damit wollte ich eigentlich verhindern, dass zusätzliche Thumbnails hochgeladen werde, da jeder User nur 1 uploaden sollte.
 
SQL:
SELECT count(thumbnail) As anzahl FROM picture WHERE id = {$_SESSION['id']} AND thumbnail <> ''

Versuche es mal damit.
Hier werden nur die Datensätze zurückgeliefert die zum User gehören und bei denen in Feld "thumbnail" auch etwas (Dateiname) eingetragen ist.

Weiter oben habe ich ja schonmal geschrieben das ich die Unterscheidung zwischen normalem Bild und Thumbnail nicht über 2 Textfelder gemacht hätte sondern über ein numerischen Feld.

Dann könntest du auch zum Auslesen der Daten und zum Anzeigen mit folgender Anweisung erledigen:
SQL:
SELECT pic FROM picture WHERE id = {$_SESSION['id']} AND art = 1

bzw.:
SQL:
SELECT pic FROM picture WHERE id = {$_SESSION['id']} AND art = 0

Das Feld "art" bekommt bei normalen Bildern den Wert 0 oder bei Thumbs den Wert 1. In diesem Fall würde sogar eine Abfrage reichen wo wirklich alle Bilder für diesen User ermittelt werden. Es könnte dann immer beim Auswerten des jew. Datensatzes das Feld "art" geprüft werden.
 
Ändere mal bitte in der upload.php (müsste Zeile 224 sein) diese Abfrage:

PHP:
$dsq="SELECT thumbnail, pic_id FROM picture WHERE id = {$_SESSION["id"]}";

wie folgt ab:

PHP:
$dsq="SELECT thumbnail, pic_id FROM picture WHERE id = {$_SESSION["id"]} AND thumbnail <> ''";

Bei mir werden dann die Bilder richtig angezeigt.

Noch was:
Du hast zumindest in fast jeder Datei verschiendene Konstanten deklariert. Alle mit dem gleichen Namen und alle mit dem gleichen Inhalt.
Da es sich hier um Pfadangaben handelt, stell dir mal vor was passiert wenn sich diese ändern! Du hast doch auch eine Datei die mit include überall eingebunden wird. Definiere die Konstanten doch besser einmal in dieser Datei, dann hast du sie auch überall zur Vefügung und musst sie aber nur einmal anpassen wenn es mal erforderlich ist.
 
Zuletzt bearbeitet:
Zurück