Bildupload in drei Verzeichnisse mit Datenbankeintrag.

mactrisha

mactrisha

Aktives Mitglied
Thread Starter
Dabei seit
27.11.2003
Beiträge
744
Reaktionspunkte
17
Hi all,

über drei Datei-Browser-Felder in einem einzigen Formular <form action="diesedatei.php" method="post" name="eintragen" enctype="multipart/form-data"> lade ich über

<input type="file" name="nl_bildurl_01" size="55" >
<input type="file" name="nl_bildurl_02" size="55" >
<input type="file" name="nl_bildurl_03" size="55" >

drei Bilder in je ein dazugehöriges Verzeichnis (upload_01/, upload_02/ und upload_03/), gleichzeitig schreibt sich der Pfad der Datei in eine Datenbank in dieser Form "upload_01/dateinameausdateibrowser.jpg", "upload_02/dateinameausdateibrowser.jpg" und "upload_03/dateinameausdateibrowser.jpg". Bleibt ein Datei-Browser leer, geht das ganze Script nicht oder es schreibt sich in Felder der Datenbank, die eigentlich leer bleiben sollten der Teilpfad z.B. "upload_02" ein. Das Datenbankfeld soll aber ganz frei bleiben.

PHP:
/* Dieser Code lädt mein Bild 1 up, das ganze habe ich dreimal geschrieben */
if ($_POST["eintragen"]) {

if ($_FILES["nl_bildurl_01"]["error"] != 4) {
	$nl_zielname_01 = "upload_01/".$_FILES["nl_bildurl_01"]["name"];
	move_uploaded_file($_FILES["nl_bildurl_01"]["tmp_name"] , "upload_01/".$_FILES["nl_bildurl_01"]["name"]);
/* Jetzt diese if-Bedingung noch zweimal für die anderen Bilder 02 und 03 */

/* Dieser Code schreibt den Dateipfad in meine Datenbank */
$wert = "INSERT into $tname VALUES (  
	'$nl_zielname_01',
	'$nl_zielname_02',
	'$nl_zielname_03')";

Es funktioniert auch alles soweit, aber nur, wenn ich auch immer drei Bilder hochlade. Ich will aber nicht immer alle drei Bilder hochladen, sondern mal nur eines, mal zwei und mal alle drei. Wie kann ich jetzt bitte den Code ergänzen, dass wenn nur ein Bild hochgeladen wird, die anderen beiden Felder der Datenbank komplett leer bleibe? Ich will aber auch keine Kontrollebedingungen mit nachfolgenden Warnungen, dass Formularfelder (sprich Datei-Browser) leer bleiben, sondern wenn der User will, dann sollen sie leer bleiben. Es soll auch möglich sein, dass gar kein Bild upgelodet wird (es werden nämlich auch noch Texteingaben mit diesem Form in Datenbankfelder übertragen). Der Code ist bestimmt nicht schick, mit dem dreimaligen if... oder? Aber ich habe ihn selbst gemacht, um es zu verstehen und zu lernen ... bitte um Hilfe.


Salü,
mactrisha.
 
Mal so auf die Schnelle aus dem Gedächtnis gecodet (nicht ausprobiert)

/* In die DB schreiben */
$fields = $nl_zielname_01 ? "feldname_in_db_01,";
$fields .= $nl_zielname_02 ? "feldname_in_db_02,";
$fields .= $nl_zielname_03 ? "feldname_in_db_03";
$fields = substr($fields, -1) == "," ? substr($fields,0 , -1) : $fields;

$values = $nl_zielname_01 ? $nl_zielname_01 . ",";
$values .= $nl_zielname_02 ? $nl_zielname_02 . ",";
$values .= $nl_zielname_03 ? $nl_zielname_03;
$values = substr($values, -1) == "," ? substr($values,0 , -1) : $values;

$sql = "INSERT INTO Tabellenname (" . $fields . ") VALUES (" . $values . ")";
 
Zuletzt bearbeitet:
Du kannst die Felder doch nach dem Senden erst einmal mit !empty überprüfen ob was drin steht. Wenn nicht, schreibst Du auch nichts.
Einfach den SQL Syntax aus Strings zusammen setzten, je nachdem ob was eingetragen wurde oder nicht.
 
Hi ihr beiden,

Danke für die Anregungen. Leider habe ich es so trotz massiver Anstrengungen nicht hinbekommen. Meine Fähigkeiten sind offensichtlich noch nicht so toll, die Zeit hat gedrängt und ich hatte auch nicht mehr viel Geduldsfaden. --- Dann hatte ich einen Geistesblitz --- Worauf ich es dann so gemacht habe, dass sich das jeweilige Bild (oder die jeweiligen Bilder) zwar in die dazugehörigen Ordner upload_01, -02 und _03 raufladen aber als Name immer nur der Name des Bildes in die Datenbank eingetragen (IMG_2380.jpg) wird.
PHP:
$nl_zielname_01 = $_FILES["nl_bildurl_01"]["name"];
Mein Script arbeitet absichtlich oder unabsichtlich jetzt schon so, dass alle nicht gewählten Bilder auch keinen Eintrag in der Datenbank hinterlassen. Wie schon beschrieben hat die Verkettung, die den Pfad zum Bild ergeben sollte bisher immer zu einem Eintrag in der DB geführt,
PHP:
$nl_zielname_01 = "upload_01/".$_FILES["nl_bildurl_01"]["name"];
auch wenn kein Bild im Datei-Browser ausgewählt wurde und somit hatte sich immer ein "kaputtes" Bild in meiner Vorschau-Datei eingeblendet. Auf diese Art stimmte aber nun für die Vorschau der Pfad zum Bild jetzt nicht mehr, also habe ich einfach in der Vorschau-Datei, die die drei möglichen Bilder ein- und ausblendet (Bedingung: je nachdem ob und welche Datenbankfelder gefüllt sind) die Verkettung (also den fehlenden Pfadteil zum Bild
PHP:
"upload_01/". ...
eingefügt, und so funktioniert es jetzt genau so, wie ich es mir vorgestellt habe. Ich weiß nicht, ob das nicht vielleicht ein bisschen "schildbürgermäßig" ist, aber ich habe das Resultat, das ich mir gewünscht habe.

PHP:
<img src='<?php echo "upload_01/".$xyz_01->Value("nl_bildurl_01")?>' height="170" width="213">

Salü,
mactrisha.
 
Aber ein einfaches
PHP:
if(!empty[$nl_zielname_01])
{
Aktion
}
hättes es doch auch getan, oder?
 
Zurück
Oben Unten