Formular verarbeiten
Rolf
- php
0 ChrisB0 Bademeister
Hallo Miteinander
Ich habe mir, (mit Hilfe zweier PHP Bücher!) ein Upload-Skript für Bilder geschrieben. Die hochgeladenen Bilder werden mittels:
<form action="bestellung_schritt_2_material_groesse_waehlen.php" method="post" enctype="multipart/form-data" name="uploadform" id="uploadform">
an eine weitere Seite übergeben. Auf dieser Seite werden das hochgeladene Bild, sowie dessen Name angezeigt. Man kann nun mittels Dropdown-Menue eine Auswahl für Format und Grösse treffen und dann auf "In den Warenkorb" klicken.
Auf der "Warenkorb" Seite sollten jetzt alle Angaben wie: Das Bild selbst, der Bildname und die Auswahl aus dem Dropdown nochmals angezeigt werden.
Die Daten aus dem Dropdown bekomme ich mit:
$dropdown_m1 = $_POST["material1"] And $dropdown_f1 = $_POST["format1"];
for($i=0;$i<count($dropdown_m1);$i++)
for($i=0;$i<count($dropdown_f1);$i++)
{
echo "<table class='warenkorb'><tr><td><p><strong>Uploadfeld 1:</strong></p><p>Hochgeladenes Bild: <br />Gewähltes Material: <strong>$dropdown_m1[$i]</strong><br />Gewähltes Format: <strong>$dropdown_f1[$i]</strong></p><p>Preis Position 1:</p></td></tr></table>";
}
angezeigt, aber wie ich das Bild und den Namen auch noch da hineinbekomme, ist mir trotz tagelanger Suche im Netz nicht klar gworden.
Geht das überhaupt? Und wenn, wie wäre ein möglicher Ansatz?
Besten Dank und Gruss aus Roggwil am Bodensee
Rolf
Hi,
[...] Auf dieser Seite werden das hochgeladene Bild, sowie dessen Name angezeigt. Man kann nun mittels Dropdown-Menue eine Auswahl für Format und Grösse treffen und dann auf "In den Warenkorb" klicken.
Dadurch hast du dir schon dein erstes Problem eingehandelt, wenn du nicht in deiner Beschreibung ausgelassen hast, dass du das hochgeladene Bild an dieser Stelle schon aus dem temp-Verzeichnis herausgeholt hast - sonst ist es nämlich nach dem Ende dieses Scriptes, also noch bevor du dem Benutzer die obige Seite anzeigst, auch schon wieder gelöscht worden.
Auf der "Warenkorb" Seite sollten jetzt alle Angaben wie: Das Bild selbst, der Bildname und die Auswahl aus dem Dropdown nochmals angezeigt werden.
Wenn du die Version von deinem Server anzeigen willst - dann musst du das Bild wie oben geschrieben erst mal gesichert haben, und dann jetzt die Adresse dieser Version in dein IMG-Element einsetzen. Damit läd sich der Benutzer dann das Bild, das er gerade hochgeladen hat, gleich noch mal runter, weil sonst kann's ja nicht angezeigt werden.
Nein, JavaScript und das file-Protokoll helfen hier auch kaum weiter, wenn man damit wenigstens die lokale Version des Bildes noch mal anzeigen könnte - das wird nicht crossbrowser und einstellungsunabhängig funktionierend umsetzbar sein.*
Geht das überhaupt? Und wenn, wie wäre ein möglicher Ansatz?
Auf Grund der genannten Problematik solltest du, wenn es sich um größere Bilder handelt, maximal ein Thumbnail davon verwenden, wenn es anschließend auf dem Client im Verlaufe eines Bestellvorgangs wieder angezeigt werden soll.
* da käme dann höchstens noch Flash in Frage - das darf sich vielleicht von den Rechten her den Pfad und Namen bei der Auswahl einer lokalen Datei merken, und dann auch in Folgeinstanzen selber darauf zugreifen, um die lokale Version des Bildes anzuzeigen, so dass das Mehr an Traffic nicht entsteht.
MfG ChrisB
Hallo Chris
Du hast recht, ich habe vergessen zu erwähnen, dass das Bild auf dem Server gespeichert wird, das ist also nicht das Problem.
Ich weiss nur nicht, wie ich es auf der "Warenkorb" Seite wieder ausgeben kann.
Deine Idee mit dem Thumbnail finde ich spitze und ich habe auch versucht beim Upload eines zu erstellen, was mir aber auch nicht gelungen ist. Hast Du eventuell eine Idee :-)
Hier noch das Upload-Script für besseres Verständnis:
<?php
if (isset($_FILES["bild1"]) AND ! $_FILES["bild1"]["error"] AND ($_FILES["bild1"]["size"] < 300000000 )) {
$bildinfo = getimagesize($_FILES["bild1"]["tmp_name"]);
if ($bildinfo === false) {
echo("<p class='javascriptwarnung'>Die Upload-Datei in Feld Nr.1 scheint kein Bild zu sein !</p>");
} else {
$mime = $bildinfo["mime"];
$mimetypen = array (
"image/jpeg" => "jpg",
"image/gif" => "gif",
"image/png" => "png"
);
if (!isset($mimetypen[$mime])) {
die("<p class='javascriptwarnung'>Kein erlaubter Bildtyp in Feld 1, erlaubt sind .jpeg, .gif und .png !</p>");
} else {
$endung = $mimetypen[$mime];
}
$neuername = basename($_FILES["bild1"]["name"]);
$neuername = preg_replace("/\.(jpe?g|gif|png)$/i", "", $neuername);
$neuername = preg_replace("/[^a-zA-Z0-9_-]/", "", $neuername);
$neuername .= ".$endung";
$ziel = "kunden_bilder/$neuername";
while (file_exists($ziel)){
$neuername = "1. $neuername";
$ziel = "kunden_bilder/$neuername";
}
if (@move_uploaded_file($_FILES["bild1"]["tmp_name"], $ziel)) {
echo "<table class='materialwahl'>\n\n";
echo "<tr>\n\n";
echo "<td class='dropdown'>$dropdown1<p class='vorschau_text'>Hochgeladenes Bild: <strong>$neuername</strong></p>
<p class='vorschau_text2'>Die Druckqualität bei der gewählten Bildgrösse ist: <strong>?</strong></p>\n\n</td>\n\n";
echo "<td>\n\n<div class='bildvorschau'><img class='vorschau_bild' src=\"kunden_bilder/".$neuername."\" alt='Kundenbild_1' /><p class='bildnr'>Uploadfeld 1</p></div>\n\n</td>\n\n";
echo "</tr>\n\n";
echo "<tr><td class='distanz_unten'></td></tr>\n\n";
echo "</table>\n\n";
echo "<div class='abstand'></div>\n";
} else {
echo "<p class='javascriptwarnung'>Der Upload in Feld 1 hat nicht geklappt, probieren Sie es bitte noch einmal !</p>";
}
}
}
?>
Gruss Rolf
Hi,
Deine Idee mit dem Thumbnail finde ich spitze und ich habe auch versucht beim Upload eines zu erstellen, was mir aber auch nicht gelungen ist.
Das ist wieder mal eine Umschreibung von „funzt nich“, und das ...
Hast Du eventuell eine Idee :-)
.. führt natürlich zu der Idee: </hilfe/charta.htm#tipps-fuer-fragende>
MfG ChrisB
Hi Rolf.
ChrisB hat ja auf Deine Fragen schon geantwortet - mal kurz noch ein paar Anmerkungen zu Deinem PHP-Code:
$dropdown_m1 = $_POST["material1"] And $dropdown_f1 = $_POST["format1"];
Das ist problematisch. Erstens solltest Du pruefen, ob $_POST["material1"] und $_POST["format1"] tatsaechlich existieren.
Zweitens ist es unnuetz, die Variablen $dropdown_m1 und $dropdown_f1 ueberhaupt einzufuehren.
Drittens hat da der Operator 'and' nicht zu suchen. Nicht nur, weil er unnoetig ist und das Ganze unnoetig unleserlich macht, sondern auch, weil der zweite Ausdruck des Operstors 'and' nur dann ausgewertet wird, wenn der erste == true ist. (Das kann in diesem Fall m.E. nicht schiefgehen, so lange $_POST["material1"] wirklich ein Array ist (und Du nicht im Skript dran rumgepfuscht hast) weil ein http-Request kein leeres Array in $_POST erzeugen kann, aber bei Strings koennte es das ohne weiteres).
for($i=0;$i<count($dropdown_m1);$i++)
for($i=0;$i<count($dropdown_f1);$i++)
Erstens: Zweimal $i als Laufvariable ist - klar - recht problematisch.
Zweitens: [foreach](http://www.php.net/manual/de/control-structures.foreach.php)
Viele Gruesse,
der Bademeister