Ankündigung

Einklappen
Keine Ankündigung bisher.

mehrere Bilder uploaden - CakePHP

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • regi
    hat ein Thema erstellt mehrere Bilder uploaden - CakePHP.

    mehrere Bilder uploaden - CakePHP

    Hallo Community!

    Ich habe ein Problem mit meinem Bilderupload. Ich versuche mehrere Auswahlfelder in meinem Formular einzubauen und habe deshalb in meiner MySQL Datenbank mehrere Felder eingefügt, die ein Bild enthalten dürfen
    (img1_type, img2_type, img3_type,img4_type und img_type).

    Daraufhin habe ich dann meinen Code so angepasst (ads_controller.php):

    PHP-Code:
    //and file upload
                    
    $root WWW_ROOT;

                    if(
    $_FILES['file']['tmp_name'])
                     {
                         switch ( 
    $_FILES['file']['type'] )
                         {
                             case 
    "image/gif":
                            
    move_uploaded_file($_FILES['file']['tmp_name'], $root."upload/".$last_id.".gif");
                                 
    chmod ($root."upload/".$last_id.".gif"0755);
                             break;
                            case 
    "image/jpeg":
                                 
    move_uploaded_file($_FILES['file']['tmp_name'], $root."upload/".$last_id."_full.jpeg");
                                 
    chmod ($root."upload/".$last_id.".jpeg"0755);
                                 
    chmod ($root."upload/".$last_id."_full.jpeg"0755);
                             break;
                             case 
    "image/png":
                                 
    move_uploaded_file($_FILES['file']['tmp_name'], $root."upload/".$last_id."_full.png");
                                 
    chmod ($root."upload/".$last_id."_full.png"0755);
                                 
    chmod ($root."upload/".$last_id.".png"0755);
                             break;
                             default:
                                 
    $this->set("error","2"); //File not allowed
                             
    break;
                         }
                     }

                    if(isset(
    $_FILES['file2']['tmp_name']))
                     {
                         switch ( 
    $_FILES['file2']['type'] )
                         {
                             case 
    "application/msword":
                                 
    move_uploaded_file($_FILES['file2']['tmp_name'], $root."upload/".$last_id.".doc");
                                 
    chmod ($root."upload/".$last_id.".doc"0755);
                             break;
                            case 
    "application/pdf":
                                 
    move_uploaded_file($_FILES['file2']['tmp_name'], $root."upload/".$last_id.".pdf");
                                 
    chmod ($root."upload/".$last_id.".pdf"0755);
                             break;
                             default:
                                 
    $this->set("error","2"); //File not allowed
                             
    break;
                         }
                     }
                    
                    if(isset(
    $_FILES['file3']['tmp_name']))
                     {
                         switch ( 
    $_FILES['file3']['type'] )
                         {
                             case 
    "image/jpg":
                                 
    move_uploaded_file($_FILES['file3']['tmp_name'], $root."upload/".$last_id.".jpg");
                                 
    chmod ($root."upload/".$last_id.".jpg"0755);
                             break;
                            case 
    "image/gif":
                                 
    move_uploaded_file($_FILES['file3']['tmp_name'], $root."upload/".$last_id.".gif");
                                 
    chmod ($root."upload/".$last_id.".gif"0755);
                             break;
                            case 
    "image/png":
                                 
    move_uploaded_file($_FILES['file']['tmp_name'], $root."upload/".$last_id."_full.png");
                                 
    chmod ($root."upload/".$last_id."_full.png"0755);
                                 
    chmod ($root."upload/".$last_id.".png"0755);
                             break;
                             default:
                                 
    $this->set("error","2"); //File not allowed
                             
    break;
                         }
                     } 
    Dann habe ich mein Formular so bearbeitet (add.tpl):

    Code:
    <form method="post" enctype="multipart/form-data" name="form" action="{$html->url('/ads/add')}"/>
    <input type="hidden" value="500000" name="max_file_size" />
    		<input type="file" style="width: 250px;" name="file" /><br/>
    		<input type="hidden" value="500000" name="max_file_size" />
    		<input type="file" style="width: 250px;" name="file3" /><br/>
    		<input type="hidden" value="500000" name="max_file_size" />
    		<input type="file" style="width: 250px;" name="file4" /><br/>
    		<font color="#888888">nur GIF-, JPG- und PNG-Bilder mit max. 200 KB</font>
    Aber irgendwie funktioniert mein Upload nur mit einem Bild.Selbst wenn ich 3 Bilder einfüge, dann wird das 2. davon eingefügt. Trage ich nur 2 Bilder ein, erscheint dass Bild, dass ich als erstes eingefügt habe.

    Was stimmt hier nicht? Habe ich etwas übersehen? Leider konnte ich im Forum und in Google nichts finden, oder hab einfch falsch gesucht -.-

    Ich hoffe jemand kann mir hier helfen...

    Liebe Grüße
    regi

  • regi
    antwortet
    Vielen Dank @ Paul.Schramenko!
    Ich muss nur noch etwas über FOR oder FOREACH - Schleife lesen, um das dann auszuführen, wie du es schreibst...

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Code:
    <form method="post" enctype="multipart/form-data" name="form"  action="{$html->url('/ads/add')}"/>
    <input type="hidden" value="500000" name="max_file_size" />
    <input type="file" style="width: 250px;" name="file[]"  /><br/>
    <input type="file" style="width: 250px;" name="file[]"  /><br/>
    <input type="file" style="width: 250px;" name="file[]"  /><br/>
    So sollte dein Formular aussehen. Da max_file_size bei dir mehrmals mit dem selben Name und dem selben Inhalt vorkommt brauchst dus auch einmal hinzu schreiben.
    Im PHP-Code kannste dann einfach mit einer FOR oder FOREACH - Schleife über $_FILES['file'][$i] iterieren und machen was du willst

    Einen Kommentar schreiben:


  • litterauspirna
    antwortet
    Zitat von Manko10 Beitrag anzeigen
    Du darfst nicht alle Felder gleich benennen, allenfalls file[], sodass du ein Array erhältst (habe ich bei Bilduploads allerdings noch nicht ausprobiert).
    Keine Sorge das geht auch damit wunderbar, ich habe mir selber so ein Script geschrieben was genau das macht.

    Gruß litter

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Die Eingabefelder!

    <input type="file" style="width: 250px;" name="file" /><br/>

    Einen Kommentar schreiben:


  • regi
    antwortet
    Mhh.. Du sagst, dass man die Felder nicht alle gleich bennen darf. So sieht das bei mir aus und jedes Feld hat auch einen anderen Namen, oder verwechsel ich da etwas?

    PHP-Code:
    //MySQL inserts
                    
    if($_FILES['file']['tmp_name'])
                    {
                        switch ( 
    $_FILES['file']['type'] )
                         {
                             case 
    "image/gif":
                                 
    $this->data['Ad']['img_type'] = "gif";
                             break;
                            case 
    "image/jpeg":
                                 
    $this->data['Ad']['img_type'] = "jpeg";
                             break;
                             case 
    "image/png":
                                 
    $this->data['Ad']['img_type'] = "png";
                             break;
                             case 
    "image/jpg":
                                 
    $this->data['Ad']['img_type'] = "jpg";
                             break;
                             default:
                                 
    $this->data['Ad']['img_type'] = "";
                             break;
                            }
    //end switch
                    
    }//end if

                    
    if($_FILES['file3']['tmp_name'])
                    {
                        switch ( 
    $_FILES['file3']['type'] )
                         {
                             case 
    "image/gif":
                                 
    $this->data['Ad']['img_type'] = "gif";
             
    1                break;
                            case 
    "image/jpeg":
                                 
    $this->data['Ad']['img1_type'] = "jpeg";
                             break;
                             case 
    "image/png":
                                 
    $this->data['Ad']['img1_type'] = "png";
                             break;
                             case 
    "image/jpg":
                                 
    $this->data['Ad']['img1_type'] = "jpg";
                             break;
                                                     }
    //end switch
                    
    }//end if 
    LG
    regi

    Einen Kommentar schreiben:


  • regi
    antwortet
    Leider stehe ich derzeit auf dem Schlau, tut mir Leid
    Also so wie ich es jetzt verstanden habe, muss ich meine PHP wohl mit:

    PHP-Code:
    <?php $images= array("gif""jpg""png"); ?>
    bearbeiten? Das ist alles immer noch etwas verwirrend für mich, aber für mein Projekt einfach sehr wichtig

    Und in meiner Datenbank habe ich jetzt die Tabelle "images" angelegt. Soll diese dann die jeweiligen Datentypen erhalten, wie oben aufgelistet und in die Tabelle in der ich früher die vielen Spalten angelegt habe, hinverweisen?

    Einen Kommentar schreiben:


  • Manko10
    antwortet
    Du darfst nicht alle Felder gleich benennen, allenfalls file[], sodass du ein Array erhältst (habe ich bei Bilduploads allerdings noch nicht ausprobiert).
    Außerdem stellt sich mir die Frage, warum du für mehrere Bilder mehrere Spalten anlegst. Viel sinnvoller und skalierbarer wäre es, hier mit einer 1:n-Beziehung zweier Tabellen zu arbeiten.

    Einen Kommentar schreiben:

Lädt...
X