Neben einem Thumbnail, weitere Bilder aus einer Datenbank anzeigen

Im SQL hast du bei den VALUES ganz am Anfang ein Komma zuviel, bzw keine pic_id
SQL:
...VALUES (, 1, ...

Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 
Zuletzt bearbeitet von einem Moderator:
Das Komma ist nicht wirklich zuviel. Jedoch fehlt die pic_id.
Irgendwo wird $pic_id = "" gesetzt. Das gibt im SQL-String dann ein Fehler

Ist die pic_id in der Tabelle ein autoincrement-Feld und zugleich der Schlüssel der Tabelle? Wenn ja, geht das so mit dem Insert nicht. Dann muss beim Insert das ID-Feld leergelassen werden (also bereits in der Felderauflistung weglassen) . Aber die Liste ...VALUES(,1,'test')... geht so sicher nicht. Die Anzahl Felder in der Feldliste muss immer mit der Anzahl Werte übereinstimmen
 
Verflixt, da hat sich ein Fehler eingeschlichen.

Der Block zum Ermitteln ob es schon ein Bild gibt oder nicht muss so aussehen:

PHP:
$query ="SELECT pic_id FROM picture WHERE id = {$_SESSION['id']} AND thumbnail <> ''";
$result = do_mysql($query);

$anzahl = mysql_num_rows($result);
if ($anzahl != 0) {
	$pic_feld = "pic_id, ";
	$pic_id = mysql_result($result, 0, "pic_id") .", ";
} else {
	$pic_feld = "";
	$pic_id = "";
}

und so muss die SQL-Anweisung zum Einfügen/Ändern aussehen:

PHP:
$sql3="INSERT INTO picture ($pic_feld id, thumbnail) VALUES ({$pic_id} {$_SESSION["id"]}, '$filename2') ON DUPLICATE KEY UPDATE thumbnail = '$filename2'";

Was die Position der Bilder angeht, siehe Anhang. Scheinbar verstehe ich da was falsch.

Tja, yaslaw und ich haben das Komma gefunden. Ob es daran liegt das wir Jungs sind und du ein Mädchen? :suspekt:
 

Anhänge

  • position.jpg
    position.jpg
    18,5 KB · Aufrufe: 6
Zuletzt bearbeitet:
Ein schöner Weg das mit den fehlenden Values zu handeln währe sowas
PHP:
//Alle Parameter in einen Array schreiben: Feldname => Feldwert bereits für SQL formatiert
$sql_args = array('pic_id' => $pic_id, 'id' => $_SESSION["id"], 'thumbnail' => "'{$filename2}'");
//Alle leeren Values rausfiltern
$sql_args = array_filter($sql_args);
//SQL-String zusammensetzen
$sql = "
INSERT INTO picture 
    (". implode(', ', array_keys($sql_args)) .") 
VALUES 
    (". implode(', ', $sql_args) .")
ON DUPLICATE KEY UPDATE thumbnail = '{$filename2}';";
 
Ein schöner Weg das mit den fehlenden Values zu handeln währe sowas
PHP:
//Alle Parameter in einen Array schreiben: Feldname => Feldwert bereits für SQL formatiert
$sql_args = array('pic_id' => $pic_id, 'id' => $_SESSION["id"], 'thumbnail' => "'{$filename2}'");
//Alle leeren Values rausfiltern
$sql_args = array_filter($sql_args);
//SQL-String zusammensetzen
$sql = "
INSERT INTO picture 
    (". implode(', ', array_keys($sql_args)) .") 
VALUES 
    (". implode(', ', $sql_args) .")
ON DUPLICATE KEY UPDATE thumbnail = '{$filename2}';";

Das war sicherlich an Thomas gerichtet, mich verwirrt das ein Wenig :)
 
Verflixt, da hat sich ein Fehler eingeschlichen.

Der Block zum Ermitteln ob es schon ein Bild gibt oder nicht muss so aussehen:

PHP:
$query ="SELECT pic_id FROM picture WHERE id = {$_SESSION['id']} AND thumbnail <> ''";
$result = do_mysql($query);

$anzahl = mysql_num_rows($result);
if ($anzahl != 0) {
	$pic_feld = "pic_id, ";
	$pic_id = mysql_result($result, 0, "pic_id") .", ";
} else {
	$pic_feld = "";
	$pic_id = "";
}

und so muss die SQL-Anweisung zum Einfügen/Ändern aussehen:

PHP:
$sql3="INSERT INTO picture ($pic_feld id, thumbnail) VALUES ({$pic_id} {$_SESSION["id"]}, '$filename2') ON DUPLICATE KEY UPDATE thumbnail = '$filename2'";

Was die Position der Bilder angeht, siehe Anhang. Scheinbar verstehe ich da was falsch.

Tja, yaslaw und ich haben das Komma gefunden. Ob es daran liegt das wir Jungs sind und du ein Mädchen? :suspekt:

Weil ich ein Määäädchen bin *sing* :) Thomas, ich weiß nicht wo der Block zum ermitteln hin soll :(
 
Ne, das war schon für dich bestimmt.
Yaslaw ist ein Meister dieses Fachs, der Nachteil für uns Normalos ist das wir es halt manchmal nicht verstehen.

Kannst es aber auch so machen wie ich es weiter vorne berichtigt habe.

Du hast irgendwo:

PHP:
/*------------------------------------------THUMBNAIL----------------------------------------------------------------------*/

stehen. Im Anschluss daran kommt der Codeblock hin.
 
Das war sicherlich an Thomas gerichtet, mich verwirrt das ein Wenig :)

Nope. An alle die hier mitlesen.
Es empfiehlt sich immer, wenn man Beispiele sieht diese zu Hinterfragen, Befehle die man nicht kennt auf php.net nachzuschlagen. Im Notfall nachzufragen. So kann man relativ einfach viel lernen und ist in Zukunft nicht mehr ganz so extrem von anderen Leuten abhängig.
 
Ne, das war schon für dich bestimmt.
Yaslaw ist ein Meister dieses Fachs, der Nachteil für uns Normalos ist das wir es halt manchmal nicht verstehen.

Kannst es aber auch so machen wie ich es weiter vorne berichtigt habe.

Du hast irgendwo:

PHP:
/*------------------------------------------THUMBNAIL----------------------------------------------------------------------*/

stehen. Im Anschluss daran kommt der Codeblock hin.

Ich möchte Yaslaw ja auch nicht seine Kompetez absprechen, aber mich verwirrt es ein bisschen, wenn ich jetzt andere Lösungswege einschlage. Ich weiß es natürlich sehr zu schätzen und frage mich, warum ich dieses Forum erst jetzt gefunden habe :) Vielen Dank, Yaslaw... Ich wollte auf keinen Fall undankbar erscheinen, nicht böse sein.

Gruß
Kerstin
 
Zurück