Bild Upload Skript - Hilfe, ich stecke fest

Hallo,

ich arbeite gerade an einem kleine Upload Skript für Produktbilder und komme nicht weiter. Pro Produkt sollen bis zu 4 Bilder hochgeladen werden können.

for ($i = 1; $i ';
}

Gleichzeitig mit dem Upload der Bilder sollen die Produkt ID, die Bildnamen (quasi die URLs) und die Position der Bilder in eine Datenbank geschrieben werden.

+------------+----------------+----------+
| produkt\_id | url | position | 
+------------+----------------+----------+
| 25 | id25\_vorne.jpg | 1 |
| 25 | id25\_seite.jpg | 2 |
+------------+----------------+----------+

Sind nun die Positionen 1 und 2 vergeben (die Bilder wurden bereits hochgeladen), soll die for-Schleife nur „Bild #3“ und "Bild #4’ ausgeben. Wurden zuerst „Bild #3“ und „Bild #4“ hochgeladen, soll die for-Schleife nur „Bild #1“ und „Bild #2“ ausgeben, usw.!

Nun komme ich aber bei zwei Problemen nicht weiter:

1.) Wie übergebe ich die Position des Bildes an das Skript, dass den Upload bearbeitet?

2.) Wie muss ich die for-Schleife verändern, damit sie die richtigen Eingabefelder anzeigt? Dazu muss ich wohl die Positionsnummern auslesen und dann irgendwie in die Schleife bekommen (wenn Position nicht vorhanden --> erzeuge Eingabefeld).

Hallo!

Wie du schon meintest muss man die bereits existierenden Positions-
nummern abfragen.
Wenn du dann ein Array mit den schon existierenden Positionsnummern hast,
muss deine Schleif dann in etwa so aussehen:

for ($n = 1,$i = 0; $i ';
}
}

Achte bei der Abfrage das du order by position machst sonst bekommst du hier probleme
if($position[$i] != $n).

Lg favorite

Danke für die Hilfe. Ich kann deinen Lösungsweg aber leider noch nicht ausprobieren, da ich daran scheitere die Positionsnummer in die Datenbank zu schreiben:

foreach ($\_FILES['bild']['tmp\_name'] as $key =\> $tmp\_name) {
 if (!empty($tmp\_name)) {
 $query = "insert into produktbilder values ($\_POST['produkt\_id'], $\_FILES['bild']['name'][$key], **Positionsnummer???** )";
 $result = $db-\>query($query);
 }
}
// Anmerkung: vereinfacht

Wie komme ich an diese Nummer?

foreach ($_FILES[‚bild‘][‚tmp_name‘] as $key => $tmp_name) {
if (!empty($tmp_name)) {
$query = „insert into produktbilder values
($_POST[‚produkt_id‘], $_FILES[‚bild‘][‚name‘][$key],
Positionsnummer??? )“;
$result = $db->query($query);
}
}
// Anmerkung: vereinfacht

Wie komme ich an diese Nummer?

Wenn du dein Uploadformular vom jeweiligen Produkt abschickst, hat dein
Array $_FILES[‚bild‘][‚name‘] bestimmt 4 verschiedene Felder oder?
also in etwa so:

$_FILES[‚bild‘][‚tmp_name‘][0]
$_FILES[‚bild‘][‚tmp_name‘][1]
$_FILES[‚bild‘][‚tmp_name‘][2]
$_FILES[‚bild‘][‚tmp_name‘][3]

mal angenommen Position 2 und 3 waren nicht leer und werden
in die Datenbank geschrieben. beim erneuten Absenden des Formulars
wird dein Array so aussehen:

$_FILES[‚bild‘][‚tmp_name‘][0]
$_FILES[‚bild‘][‚tmp_name‘][1]

welche Positionen stehen noch zur Vergabe? 1 und 4 !

$_FILES[‚bild‘][‚tmp_name‘][0] ist Position 1
und $_FILES[‚bild‘][‚tmp_name‘][0] ist Position 4.

Oder seh ich das Falsch ? :wink:

Hat zwar nichts mit deinem Problem zu tun aber

insert into produktbilder values($_POST[‚produkt_id‘], $_FILES[‚bild‘][‚name‘][$key])

ist schlecht gelöst. Ich könnte jetzt per Firebug im Htmlcode die ProduktID
in irgendeine ausgedachte Zahl ändern und die Bilder werden für
das falsche Produkt hochgeladen. Und denk nicht das es solche Menschen
nicht gibt die sowas unnötiges nicht tun würden :smiley:

LG favorite

Das mit dem Firebug muss ich mir erst ansehen. Grundsätzlich ist dieses Upload Skript nur mir als Admin zugänglich. Das Thema Sicherheit werde ich natürlich trotzdem nicht vernächlässigen. Auch möchte ich alle hochzuladenden Dateien auf Herz und Nieren prüfen, aber erst soll mein Skript laufen.

Zum Hauptproblem:

In der Zeile echo ‚Bild #‘ . $n . ’ ';
wird (anscheinend) in der eckigen Klammer die „Positionsnummer“ an das auszuführende Skript übermittelt. Diese Nummer muss ich für jede hochgeladene Datei (mittels Schleife) in meine Datenbank schreiben. Daran scheitere ich leider noch. Deinen Ausführungen kann ich momentan nicht ganz folgen. Vielleicht weiß ich nach einer kurzen Pause (wirkt oft Wunder) weiter. Jedenfalls vielen Dank für deine Hilfe!

Pobiers einfach mal aus. ich hoffe mein 2. Post war etwas Hilfreicher :smile:

LG favorite

So, deine Ausführungen haben mich tatsächlich zu einer Lösung gebracht :smiley:

for ($i = 1; $i query($query);
 }
}

Allerdings funktioniert das Formularskript noch nicht wie es soll:

$query = "select \* from produktbilder where produkt\_id = '$produkt\_id'order by position";
$result = $db-\>query($query);

while ($bild = $result-\>fetch\_assoc()) {
 $data['position'][] = $bild['position'];
}

// Schleife im HTML Formular
for ($n = 1, $i = 0; $n ';
 }
}

Ich weiß „gefühlt“ auch wo der Fehler liegt. Die Array Ausgabe kann man in dieser Form nicht in die Schleife stecken. Näheres sehe ich mir morgen an. Heute bin ich schon k.o.! Nochmals danke und gute Nacht.

So, ich glaube, ich habe eine Lösung gefunden:

/\*\*\*\*\*Formular Skript\*\*\*\*\*/

// Datenbankabfrage
$query = "select \* from produktbilder where produkt\_id = '$produkt\_id' order by position";
$result = $db-\>query($query);

// Erstellung Array mit Positionsnummern
$i = 1;
while ($bild = $result-\>fetch\_assoc()) {
 $position[$i] = $bild['position'];
 $i++;
}

// Schleife in HTML Formular
for ($i = 1; $i ';
 }
}

/\*\*\*\*\*"Process" Skript\*\*\*\*\*/

// Eintrag in die Datenbank
for ($i = 1; $i query($query);
 }
}