Ankündigung

Einklappen
Keine Ankündigung bisher.

File Upload auf doppelte Datei prüfen

Einklappen

Neue Werbung 2019

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

  • File Upload auf doppelte Datei prüfen

    Hallo,
    ich bin noch ganz neu, seit also nicht all zu streng mit mir

    Ich möchte ein Formular machen, wo 2 Dateien hochgeladen werden sollen, inkl. Textfelder...das steht schon soweit.
    Auch die Prüfung der Felder steht schon mal.

    Was ich nicht hinbekomme ist:
    Ich möchte die beiden Dateien (1 Bild & 1 Datei) vor dem hochladen prüfen, ob die schon im upload ordner sind oder nicht.
    Wenn eine Datei schon vorhanden ist, dann soll die Datei umbenannt werden, zum beispiel so:

    -Soll hochgeladen werden: Dateiname_test_2018.jpg
    -DATEI GIBT ES SCHON
    -Soll dann umbenannt werden in: Dateiname_test_2018 [524376].jpg Das [524376] soll eine einmalige Nummer sein.
    -Falls die Datei noch nicht vorhanden ist, soll sie so hochgeladen werden

    Evtl sollte noch eine Prüfung rein für die Größe, das Format oder so, wenn das wichtig wäre...

    Ich poste mal mein Script mit und evtl kann mir einer helfen.
    Falls es noch Verbesserungen an dem Script gibt, würde ich mich über tipps freuen.
    Danke schon einmal.


    PHP-Code:
    <?php
    $error1 
    0;
    $error2 0;
    $error3 0;
    $error4 0;
    $error5 0;
    $error6 0;
    $errorout "";
    $title "" ;
    $beschreibung "";
    $kategorie "";
    $setnr "";
    $bild "";
    $datei "";
    $uploadfolder "upload/";

    if( isset(
    $_POST['submit']) )
        {
        if( 
    $_POST['title'] != "" )
            {
                if (!
    preg_match("#^[a-zA-Z0-9 _-]+$#"$_POST['title']))
                {
                    echo 
    'Title: Unerlaubte Zeichen im Title.<br>'// Kontrolausgabe
                    
    $error1 1;
                }
                else
                {
                    echo 
    "Title= " $_POST['title'] . "<br>"// Kontrolausgabe
                    
    $title $_POST['title'];
                }
            }
            else
            {
                
    $error1 1;
            }

        if( 
    $_POST['beschreibung'] != "" )
            {
                if (!
    preg_match("#^[a-zA-Z0-9 !?_.\(\)\[\]-]+$#"$_POST['beschreibung']))
                {
                    echo 
    'Beschreibung: Unerlaubte Zeichen in der Beschreibung.<br>'// Kontrolausgabe
                    
    $error2 1;
                }
                else
                {
                    echo 
    "Beschreibung= " $_POST['beschreibung'] . "<br>"// Kontrolausgabe
                    
    $beschreibung $_POST['beschreibung'];
                }
            }
            else
            {
                
    $error2 1;
            }
        if( 
    $_POST['kategorie'] != "" )
            {
                echo 
    "Kategorie= " $_POST['kategorie'] . "<br>"// Kontrolausgabe
                
    $kategorie $_POST['kategorie'];
            }
            else
            {
                
    $error3 1;
            }        
        if( 
    $_POST['setnr'] != "" )
            {
                echo 
    "Set-Nr= " $_POST['setnr'] . "<br>"// Kontrolausgabe
                
    $setnr $_POST['setnr'];
            }
            else
            {
                
    $error4 1;
            }            

        if( 
    $_POST['datei'] != "" )
            {
                echo 
    "Datei= " $_POST['datei'] . "<br>"// Kontrolausgabe
                
    $datei $_POST['datei'];
            }
            else
            {
                
    $error5 1;
            }        

        if( 
    $_POST['bild'] != "" )
            {
                echo 
    "Bild= " $_POST['bild'] . "<br>"// Kontrolausgabe
                
    $bild $_POST['bild'];
            }
            else
            {
                
    $error6 1;
            }


        if ( 
    $error1 == && $error2 == && $error3 == && $error4 == && $error5 == && $error6 == )
            {
                
    // Verarbeitung in einer anderen Datei starten.....
                
    echo "<br><font color=green><a href="Formular-Upload-1.php">Alles OK - Zurück</a></font><br>"// Kontrolausgabe
                
    exit;
            }
            else
            {
                
    $errorout "<font color=red>&bull; Es sind Fehler aufgetreten &bull;</font>";
            }
        }
        else
        {
        }
    ?>

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="style-upload.css">
    </head>
    <body>
    <br><center>
    <form name="Upload" method="post" action="Formular-Upload-1.php">
        <table style="width:800px; padding:20px; border: 1px solid #666666; background-color: #eeeeee;">
            <tr>
                <td colspan="2" align="center">USER UPLOAD FORM<br><br></td>
            </tr>
            <tr>
                <td style="padding:6px; background-color: #cccccc;">Titel: </td><td style="padding:6px; background-color: #cccccc;"><input type="text" name="title" style="width:300px;" value="<?php echo $title?>"><?php if ($error1 == 1) echo "<br><font color=red size=2>Bitte Titel eingeben. Erlaubte Zeichen: a-z A-Z 0-9 - _ [space]</font>"?></td>
            </tr>
            <tr>
                <td style="padding:6px; background-color: #cccccc;">Beschreibung: </td><td style="padding:6px; background-color: #cccccc;"><textarea rows="4" cols="36" name="beschreibung" maxlength="150" style="width:300px; resize:none;"><?php echo $beschreibung?></textarea><?php if ($error2 == 1) echo "<br><font color=red size=2>Bitte eine Beschreibung eingeben. Max 150 Zeichen. Erlaubte Zeichen: a-z A-Z 0-9 - _ [space] . ! ?</font>"?></td>
            </tr>
            <tr>
                <td style="padding:6px; background-color: #cccccc;">Kategorie: </td><td style="padding:6px; background-color: #cccccc;">
                    <select name="kategorie" style="width:306px;">
                        <option value="">Bitte wählen:</option>
                        <option value="Kategorie01" <?php if( $kategorie == 'Kategorie01' ) echo"selected"?> >Kategorie 1</option>
                        <option value="Kategorie02" <?php if( $kategorie == 'Kategorie02' ) echo"selected"?> >Kategorie 2</option>
                        <option value="Kategorie03" <?php if( $kategorie == 'Kategorie03' ) echo"selected"?> >Kategorie 3</option>
                        <option value="Kategorie04" <?php if( $kategorie == 'Kategorie04' ) echo"selected"?> >Kategorie 4</option>
                    </select>
                    <?php if ($error3 == 1) echo "<br><font color=red size=2>Bitte eine Kategorie eingeben.</font>"?>
                </td>
            </tr>
            <tr>
                <td style="padding:6px; background-color: #cccccc;">Set-Nr: </td><td style="padding:6px; background-color: #cccccc;"><input type="text" name="setnr" style="width:300px;" value="<?php echo $setnr?>"><?php if ($error4 == 1) echo "<br><font color=red size=2>Bitte eine Set-Nr eingeben.</font>"?></td>
            </tr>
            <tr>
                <td style="padding:6px; background-color: #cccccc;">Datei: </td><td style="padding:6px; background-color: #cccccc;"><input type="file" name="datei" accept=".png, .jpg"><?php if ($error5 == 1) echo "<br><font color=red size=2>Bitte eine Datei auswählen</font>"?></td>
            </tr>
            <tr>
                <td style="padding:6px; background-color: #cccccc;">Bild: </td><td style="padding:6px; background-color: #cccccc;"><input type="file" name="bild" accept=".png, .jpg"><?php if ($error6 == 1) echo "<br><font color=red size=2>Bitte ein Bild auswählen</font>"?></td>
            </tr>

            <tr>
                <td colspan="2" align="center" style="border: 1px solid #cccccc;">
                    <br><?php if ( $error1 != || $error2 != || $error3 != || $error4 != || $error5 != || $error6 != 0) { echo $errorout; } else { echo "&nbsp;"; } ?><br><br>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center"><br><br><input type="submit" name="submit" value="UPLOAD" style="width:300px; height:40px; font-size:20px;"></td>
            </tr>
        </table>
    </form>

    <br><br><a href="Formular-Upload-1.php">Zurück</a>
    Nobody expects the Spanish inquisition.

  • #2
    Was konkret bekommst du denn nicht hin? Den Upload? Das Überprüfen? Das Umbenennen? Im Script sehe ich noch keinen Versuch in diese Richtung.

    Die nummerierten error-Variablen machen auch nicht so viel Sinn. Eine Variable dürfte reichen, die setzt du zu Beginn auf false und wenn ein Fehler auftritt auf true. Dann musst du zum Schluss nur diese Überprüfen und nicht alle. Und verwende dafür einen boolean, dann musst du nicht mehr:

    PHP-Code:
    if ($error == 1
    machen sondern es reicht:
    PHP-Code:
    if ($error

    Kommentar


    • #3
      Verwende einen aussagenden Beitragstitel, Worte, wie Hilfe etc., haben da nichts verloren, die braucht hier jeder.
      PHP-Code:
      $bild "";
      $datei "";
      $uploadfolder "upload/"
      verwende zudem englische Namen für Variablen und erzeuge kein Sprachengewirr..

      HTML-Code:
      <table style="width:800px;...
      Styleangaben gehören in eine Datei, die du ja auch schon hast. Siehe <link rel="stylesheet" href="style-upload.css">

      Das Font-Element ist veraltet.

      PHP-Code:
       echo 'Beschreibung: Unerlaubte Zeichen 
      echo hat da nichts verloren, deine Ausgabe beginnt weiter unten mit der Einleitung des HTML-Elementes.

      Formulare mit Tabellen-Elementen darzustellen ist veraltete Technik, nutze CSS dafür und HTML-Tabellen nur, wenn du auch tabellarische Daten hast.

      Um zu prüfen ob eine Datei schon existiert gibt es file_exits, das in Verbindung mit einem if-Konstrukt muss du einbauen.
      Im Form-Element fehlt dir das Attribut enctype.

      Zu mehr habe ich jetzt nicht geschaut.

      Kommentar


      • #4
        @jonas3344:
        Danke für den Hinweis der error behandlung ! Aber wie fange ich so die verschiedenen Fehlermeldungen ab?
        Ich bekomme den Upload bzw das Überprüfen einer doppelten Datei inkl Umbenennung nicht hin.
        Da würde mir ein kleines Beispiel Script schon viel helfen oder gleich in meinem Script

        @protestix:
        Ist der Titel jetzt besser: [Problem] File Upload auf doppelte Datei prüfen

        Die Styleangaben kommen alle noch in die css, die echos (kontrollausgaben) kommen noch weg und die Tabellen werde ich noch in div wandeln...
        Ich mache einige Sachen nur so, weil ich es dann besser nachfolziehen kann...sorry für meine Vorgehensweise

        Das file_exits habe ich mir ja schon angeschaut und testweise mal ausprobiert, aber ich schaffe es nicht das die Datei die ich hochladen möchte geprüft/umbenannt wird.
        Ich möchte ja prüfen ob die Datei (die ich per input ausgewählt habe) schon im Uploadordner vorhanden ist oder nicht und wenn die Datei schon vorhanden ist, dann soll die Datei umbenannt werden.
        Nobody expects the Spanish inquisition.

        Kommentar


        • #5
          Ist der Titel jetzt besser: [Problem] File Upload auf doppelte Datei prüfen
          Bitte beachten: Bitte aussagekräftige Threadtitel verwenden

          Das Wort "Problem" gehört nicht in den Threadtitel
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            @hausi: Ist es so ok ?
            Nobody expects the Spanish inquisition.

            Kommentar


            • #7
              1. Schritt: Fileupload programmieren. Beispiele dafür gibts wie Sand am Meer im Internet. Wenn das funktioniert gehst du zu Schritt 2 und 3.
              2. Schritt: Überprüfen ob die Datei bereits existiert. Dafür brauchst du $_FILES resp. den Index name in diesem Array sowie wie schon erwähnt file_exists
              3. Anschliessend passt du move_uploaded_file() an, welches du unter Schritt 1 benutzt hast. Indem du den Parameter destination so anpasst, dass Dir der Dateiname passt.

              Links:
              http://php.net/manual/de/function.mo...oaded-file.php
              http://php.net/manual/de/function.file-exists.php
              https://www.w3schools.com/php/php_file_upload.asp (Da hats sogar ein Beispiel drin wie man überprüft ob eine Datei schon existiert)

              Kommentar


              • #8
                Danke jonas !
                Ich habe mir das noch einmal in Ruhe angesehen und nun habe ich das wohl so wie ich es gerne hätte.
                Es funktioniert endlich !

                Jetzt kommt nur noch dazu das ich noch eine Datei hochladen möchte und die auch geprüft werden soll.
                Ich denke mit der dateigröße und der extention bekomme ich hin, aber wie mache ich das mit dem mine typ?
                Die Datei die erlaubt sein wird ist eine .lxfml (eine xml Datei) für ein 3D-Programm.
                Kann ich das auch prüfen?

                Hier mal das kleine Testscript, ich hoffe keine großen Fehler.

                PHP-Code:
                <?php
                $timestamp 
                md5(strftime("%e %b %Y %H:%M:%S"));
                $target_dir "upload/";
                $uploadOk 1;
                $newfilename "";

                if(isset(
                $_POST["submit"]))
                    {
                        
                $target_file $target_dir basename($_FILES["picToUpload"]["name"]);
                        
                $imageFileType strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
                        
                $check getimagesize($_FILES["picToUpload"]["tmp_name"]);
                        if(
                $check !== false)
                        {
                            
                $uploadOk 1;
                        }
                        else
                        {
                            echo 
                "File is not an image.";
                            
                $uploadOk 0;
                        }

                        if (
                file_exists($target_file))
                        {
                            echo 
                "Sorry, file already exists. We rename the file...<br>";
                            
                $temp explode("."$_FILES["picToUpload"]["name"]);
                            
                $newfilename =  $temp[0] . "_" $timestamp '.' end($temp);
                            
                $target_file $target_dir basename($newfilename);
                            
                $uploadOk 1;
                        }

                        if (
                $_FILES["picToUpload"]["size"] > 1000000)
                        {
                            echo 
                "Sorry, your file is too large.";
                            
                $uploadOk 0;
                        }

                        if( 
                $imageFileType != "jpg" && $imageFileType != "png" )
                        {
                            echo 
                "Sorry, only JPG & PNG files are allowed.<br>";
                            
                $uploadOk 0;
                        }

                        if (
                $uploadOk == 0)
                        {
                            echo 
                "Sorry, your file was not uploaded.";
                        }
                        else
                        {
                            if (
                move_uploaded_file($_FILES["picToUpload"]["tmp_name"], $target_file))
                            {
                                echo 
                "<br>The file has been uploaded.<br>";
                            }
                            else
                            {
                                echo 
                "Sorry, there was an error uploading your file.<br>";
                            }
                        }

                    }
                ?>


                <!DOCTYPE html>
                <html>
                <body>
                <br><br>
                <form action="Datei existiert check 3.php" method="post" enctype="multipart/form-data">
                    Select pic to upload: <input type="file" name="picToUpload" id="picToUpload"><br><br>
                    Select file to upload: <input type="file" name="fileToUpload" id="fileToUpload"><br><br>
                    <input type="submit" value="Upload Image" name="submit">
                </form>
                <br><br><a href="Datei existiert check 3.php">zurück</a>
                </body>
                </html>
                Nobody expects the Spanish inquisition.

                Kommentar


                • #9
                  Du prüfst ja bei Deinem Bild die Dateiendung. Weshalb sollte das bei einer anderen, x-beliebigen Datei nicht auch möglich sein? Dann ist es halt nicht jpg oder png sondern lxfml.

                  Kommentar


                  • #10
                    das stimmt schon , aber um sicher zu gehen habe ich gelesen, das man den mine typ prüfen soll. es könnte ja eine fake datei sein :/
                    oder muss ich das nicht zwingend prüfen?
                    Nobody expects the Spanish inquisition.

                    Kommentar


                    • #11
                      Dann musst Du halt Merkmale definieren um die Datei abzulehnen. Eine KI wird Dir selten einer programmieren. Du kannst ja noch den Head der Datei lesen und Prüfen ob immer bestimmte Zeichen vorkommen. Setzt Dich mal mit Dateiformaten auseinander. Es gibt so viel Anleitungen im Netz, dass das Forum eigentlich tot sein müsste.
                      bitcoin.de <- Meine Freelancerwährung

                      Kommentar


                      • #12
                        Hi. Ich erwarte auch nicht das mir einer eine KI programmiert
                        Ich suche nur Hilfe / Ansätze, weil ich teilweise nicht weiterkommen oder es nicht richtig verstehe
                        Das mit den Dateiformate hab ich schon ansatzweise gelesen, aber ebend nicht ganz und dabei habe ich noch keine idee wie ich die xml Datei prüfen sollte...

                        Soweit ich weiss ist die erste Zeile in der 3D-datei ist immer so:
                        PHP-Code:
                        <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
                        Kann ich soetwas genau prüfen, ob das in der Datei drin steht?
                        Oder mache ich mir da zuviel Mühe, die sich nicht lohnt?
                        Nobody expects the Spanish inquisition.

                        Kommentar


                        • #13
                          XML-Dateien sind ja besonders einfach zu lesen. Du liest einfach die erste Zeile ein und prüfst ob es einem bestimmten Muster entspricht. Kannst ja mal nach preg_match() und Regulären Ausdrücken DuckDuckGo'en. Stichwort regex101 bringt Dich auch zu Onlinetools zum testen. Im übrigen kannst Du alles prüfen. Die Frage ist wohl eher was zu prüfst und wie. Dein Benutzerkontext ist auch entscheidend. Wenn Du eine öffentliche Upload-Seite anbietest, solltest Du evtl. noch andere Dinge prüfen. Eine Komplettberatung kann ich Dir aber nicht bieten.
                          bitcoin.de <- Meine Freelancerwährung

                          Kommentar


                          • #14
                            Mal einige Anregungen:

                            es macht wenig Sinn auf Dateinamen zu prüfen und dann notfalls irgendwas an den Namen zu hängen.
                            wie lange willst Du die datei notfalls werden lassen, wenn alle 20M nutzer dateien mit dem selben Namen hochladen?

                            Der Inhalt einer Datei ist entscheidend, dafür gibt es Prüfsummen.
                            Genauso macht es kein Sinn davon auszugehen das eine Datei mit der Endung JPG ein Bild ist, oder eine Datei ohne Endung keins.
                            Dafür gibt es Mimetypes.

                            Ein XML mit Regex zu testen scheint mir völlig absurd, eine XML zu validieren finde ich aber weniger abwegig.
                            zusätzlich, lästs ich die datei analysieren:
                            https://www.eurobricks.com/forum/ind...omment=1876550
                            um sicherzustellen das diese sinnvoll ist. eine dtd wäre da sinnvoll, sowas gibt es sicher.

                            Es kann sein, das ich einiges überlesen habe, aber das ist ja mal ein Anfang.

                            Kommentar


                            • #15
                              @alpha:
                              danke für die tipps. ich werde mir das mal angucken...
                              die uploadseite wird nicht öffentlich, nur für registriete user und die hochgeladenen dateien sollen ja beim eintrag in die db erstmal gesperrt sein und dann freigegeben werden.
                              das ganze wird ein modul für das wbce cms und dort kann ich dann prüfen ob ein registrieter user die seite aufruft oder nicht...
                              jetzt versuche ich mir die frontend und backend seiten aufzubauen, so wie ich sie gerne hätte oder mir einer sagt mach lieber das oder das so...


                              @tom:
                              Danke für die Anregungen.
                              wegen dem dateinamen, sollte ich jede datei umbenennen, oder gibt es eine bessere lösung für die dateinamen?
                              Den inhalt der datei prüft man doch durch den mine typ, oder? das möchte ich ja gerne realisieren...
                              Ich muss mich damit mal beschäftigen, wie ich das genau dann in php umsetzte...auch mit dtd habe ich noch nichts gemacht :/ aber ich gucke mal was ich finde...

                              Leider bin ich nicht der Profi und muss einfach meine fragen stellen.
                              Nobody expects the Spanish inquisition.

                              Kommentar

                              Lädt...
                              X