Bildupload in drei Verzeichnisse mit Datenbankeintrag.

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von mactrisha, 20.06.2005.

  1. mactrisha

    mactrisha Thread Starter MacUser Mitglied

    Beiträge:
    674
    Medien:
    2
    Zustimmungen:
    4
    Registriert seit:
    27.11.2003
    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.
     
  2. ApfelRalf

    ApfelRalf MacUser Mitglied

    Beiträge:
    642
    Zustimmungen:
    22
    Registriert seit:
    14.01.2004
    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: 20.06.2005
  3. ThaHammer

    ThaHammer MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    Registriert seit:
    01.06.2004
    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.
     
  4. mactrisha

    mactrisha Thread Starter MacUser Mitglied

    Beiträge:
    674
    Medien:
    2
    Zustimmungen:
    4
    Registriert seit:
    27.11.2003
    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.
     
  5. ThaHammer

    ThaHammer MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    Registriert seit:
    01.06.2004
    Aber ein einfaches
    PHP:
    if(!empty[$nl_zielname_01])
    {
    Aktion
    }
    hättes es doch auch getan, oder?
     

Diese Seite empfehlen