Ergebnis 1 bis 10 von 10

Thema: Upload Tutorial

  1. #1
    Kaiser(in)
    Registriert seit
    09.12.2005
    Alter
    29
    Beiträge
    2.496
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard Upload Tutorial

    Wird häufiger mal nachgefragt und damit wir dann immer nen schönen Link zur Hand haben, schreibe ich dieses Tutorial
    Für Tipps, Fehler, Verbesserungen und so weiter bin ich natürlich offen, postet einfach hier
    Das ist mein erstes Richtiges Turorial also nit zu streng mit mir sein

    Was soll das Script alles leisten ?
    1. Ein Formular bereitstellen, mit dem die Datei ausgewählt werden kann
    2. Die Datei in einen bestimmten Ordner hochladen
    3. Den Namen des Uploaders und den Pfad in einer Textdatei/MySQL-Tabelle speichern (optional)

    Ich werde alle wichtigen Funktionen des Script erklären, aber ich setze voraus, das bekannt is, wie Schleifen, Bedingungen und so weiter funktionieren..
    Also Voraussetzung ist eine gewisse PHP-Grundkenntnis.

    1. Das Formular (upload1.php):
    Code:
    <form action="upload2.php" method="post" enctype="multipart/form-data" name="Upload-Form">
    <table><tr><td>
    Bild</td><td>
    <input type="file" name="bild" size="30">
    </td></tr><tr><td height="5"></td></tr><tr><td>
    Upper</td><td>
    <input type="text" name="upper" size="30">
    </td></tr></table>
    <input type="submit" name="submit" value="Hochladen!">
    <input type="reset" name="reset" value="Zurücketzen!">
    </form>
    damit ist das Formular auch schon fertig...
    enctype="multipart/form-data"
    das ist notwendig, damit erkannt wird, dass Files mit gesand werden...
    file hat ausserdem einen eigenen Input-Typ, womit automatisch auch der Durchsuchen-Button erscheint und ein Feld in dem der Pfad steht.

    2. Das Script (upload2.php):
    Files werden wie die anderen POST-Daten in einem array gespeichert, doch heisst dieses Array $_FILES[][] und ist Zweidimensional, wodurch mehrere Files mit einem Formular geuppt werden können...
    $_FILES['input_name']['name etc'] ist der Aufbau.
    mehr dazu HIER.
    nun zum code:
    Code:
    <?php
    ## Einstellungen&#58;
    $max_size = "300000"; //In Bytes
    $ordner = "upload"; //In den Ordner wird das Bild geladen
    
    $save = true; //false wenn der Bildpfad nicht gespeichert werden soll
    $save_typ = "text"; // "datenbank" oder "text" hier eintragen
    $save_name = "upload"; /*Name des Textfiles/der MySQL-Tabelle, in
    dem die URL zum Bild gespeichert werden soll.
    Wenn Text gewählt ist, wird die Datei angelegt, wenn sie nicht existiert*/
    
    ## Zur Datenbank connecten, wenn nötig
    if&#40;$save_typ == "datenbank"&#41; &#123;
       $dbh=mysql_connect&#40;"localhost","............",".........."&#41;;
       mysql_select_db&#40;"db_name",$dbh&#41;;
    &#125;
    
    ## Bild-Daten werden aus $_FILES "geholt"
    $bild_typ = $_FILES&#91;'bild'&#93;&#91;'type'&#93;;
    $bild_groesse = $_FILES&#91;'bild'&#93;&#91;'size'&#93;;
    $bild = $_FILES&#91;'bild'&#93;&#91;'tmp_name'&#93;;
    $bild_name = $_FILES&#91;'bild'&#93;&#91;'name'&#93;;
    
    $upper = $_POST&#91;'upper'&#93;;
    
    ## Überprüfe, ob alle Kriterien erfüllt
    ## Hier kann alles Mögliche ausgetauscht werden
    if&#40;&#40;$bild_groesse <= $max_size&#41; && &#40;$bild_typ == "image/gif" ||
    $bild_typ == "image/jpg" || $bild_typ == "image/jpeg" ||
    $bild_typ == "image/png" || $bild_typ == "image/pjpeg"&#41;&#41; &#123;
    
    /* Hier nichts ändern, wenn man nicht weiss was man tut ^^ */
    
       $dest = $ordner."/".$bild_name;
       if&#40;move_uploaded_file&#40;$bild, $dest&#41;&#41; &#123;
    
           ## Pfad soll nicht gespeichert werden
           if&#40;!$save&#41; &#123;
    
               echo "Das Bild wurde erfolgreich hochgeladen
    ";
               echo "Ordner&#58; ".$ordner."
    ";
               echo "Name&#58; ".$bild_name."
    ";
               echo "Typ&#58; ".$bild_typ."
    ";
          &#125;
          ## Pfad wird gespeichert
          else &#123;
              if&#40;$save_typ == "datenbank"&#41; &#123;
                  mysql_query&#40;"INSERT INTO ".$save_name." SET upper = '".$upper."', bild = '".$bild_name."'"&#41;;
              &#125;
              else &#123;
                  $sn = $save_name.".txt";
                  $insert = $dest."|".$upper."\n";
                  $datei = fopen&#40;$sn, "a+"&#41;; //zum schreiben und ans ende der Datei
                  $inhalt = fread&#40;$datei, filesize&#40;$sn&#41;&#41;;
                  $inhalt .= $insert;
                  fwrite&#40;$datei, $inhalt&#41;;
                  fclose&#40;$datei&#41;;
              &#125;
               echo "Das Bild wurde erfolgreich hochgeladen
    ";
               echo "Ordner&#58; ".$ordner."
    ";
               echo "Name&#58; ".$bild_name."
    ";
               echo "Typ&#58; ".$bild_typ."
    ";
          &#125;
       &#125;
    &#125;
    else &#123;
       if&#40;$bild_groesse > $max_size&#41; &#123;
        echo "Das Bild ist zu groß";
       &#125;
       else &#123;
        echo "Die Datei muss ein Bild sein
    ";
        echo "Typ&#58; ".$bild_typ;
       &#125;
    &#125;
    ?>
    OK, das wars eigentlich, an unteren code muss eigentlich nichts verändert werden und ich glaube das meisste erklärt sich von alleine
    ich werde hier jetzt nicht jede einzelne funktion beschreiben, das ganze kann man wunderbar unter
    www.php.net nachlesen
    vll kann mir hier noch jemand helfen, es wäre natürlich schöner mit preg_match die typ-abfrage zu machen, aber ich hab mir noch nicht so mit reg. ausdücken / preg_match beschäftigt
    ausserdem bin ich mir bei dem eintrag in die files nicht sicher, da ich lange nicht mehr damit gearbeitet habe
    aber dafür seit ihr ja da, meine fehler berichtigen
    ich werde das ganze bei gelegenheit noch mal als .zip oder .rar auf meinen space hochladen (mit diesem script )
    ich glaub der upload sollte damit funktionieren, ich hab im mom leider keine möglichkeit das zu testen, werds aber nachholen (vieles is so frei hand geschrieben...)
    is ja doch ganz schön was zusammengekommen und ich behaupte einfach mal, dass es nicht zu schwer zu verstehen ist
    mfg
    *Updated
    *Läuft nu

    ** neustes update, für alle die das Problem haben, dass die hochgeladene datei nicht heruntergeladen werden kann etc !!!
    -->
    folgende zeilen finden :
    Code:
    /* Hier nichts ändern, wenn man nicht weiss was man tut ^^ */
    
       $dest = $ordner."/".$bild_name;
       if&#40;move_uploaded_file&#40;$bild, $dest&#41;&#41; &#123;
    und damit ersetzen !!
    Code:
    /* Hier nichts ändern, wenn man nicht weiss was man tut ^^ */
    
       $dest = $ordner."/".$bild_name;
       if&#40;move_uploaded_file&#40;$bild, $dest&#41;&#41; &#123;
       chmod&#40;$dest, 0755&#41;;
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  2. #2
    HTML Newbie
    Registriert seit
    19.04.2006
    Ort
    Kierspe
    Beiträge
    3
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Habe so einige kleine Fehler gefunden, aber das klappt bei mir trotzdem nicht. Ich erhalte immer die Ausgabe: Die Datei entspricht nicht den vorgegebenen Kriterien.

    Fehler:
    anstatt action stand da method: <form action="upload2.php" method="post" enctype="multipart/form-data" name="UploadForm">
    am Ende der Datei fehle das hier: </form>
    Semikolon fehlte: $ordner = "upload"; //In den Ordner wird das Bild geladen
    Semikolon fehlte: $save_typ = "datenbank"; // "datenbank" oder "text" hier eintragen
    Semikolon fehlte: $save_name = "upload"; /*Name des Textfiles/der MySQL-Tabelle, in
    falsche Variable: if($save == "datenbank") {
    Hochkomma fehlt: $bild_typ = $_FILES['bild']['type'];

    könnt ihr mir bitte sagen wieso es nicht geht? Klingt ja eigentlich alles ganz logisch


    Edit:
    ich hab's geschafft, nun klappt es, bloß teilweise
    Die Dateien werden auf den server in das richtige Verzeichnis gespeichert.
    Mein Problem ist nun: Es wird nichts in der MYSQL Datenbank gespeichert. Außerdem frage ich mich, ob es nicht eine Möglichkeit gibt komplette Bilder in der Datenbank zu speichern. Hier in dem Script werden ja nur der Uploadername und der Dateiname abgespeichert.
    also ich habe folgende Teile soweit verändert:

    Hier sollte man die Gänsefüsschen wegtun, weil PHP das sonst als String sieht und damit folglich nicht rechnen kann. Dieser Wert entspricht in etwa einem MB.
    Code:
    $max_size = 1048576; //In Bytes
    Hier habe ich zwei Slashes hingeschrieben, Das soll den Pfad angeben der eigentlich immer in der Form "ordner\" oder in linux "ordner/" ist. Der zweite Slash neutralisiert seine PHP Wirkung.
    Code:
    $ordner = "upload\\";  //In den Ordner wird das Bild geladen
    Das hier sieht etwas kompliziert aus. Erstens, es ist ganz wichtig noch den Wert "image/pjpeg" reinzubringen, damit sind JPEG Dateien gemeint. Weiterhin habe ich ein paar Klammer hinzugefügt, damit das richtig abgelesen kann, hier eine abstrakte Form davon: if (A=1 and ( (B=3) or (C=4) or (D=5) ) ){ Ausführung; }:
    Code:
    if&#40;&#40;$bild_groesse <= $max_size&#41; AND &#40;&#40;$bild_typ == "image/gif"&#41; OR 
    &#40;$bild_typ == "image/jpg"&#41; OR &#40;$bild_typ == "image/pjpeg"&#41; OR 
    &#40;$bild_typ == "image/png"&#41;&#41;&#41; &#123;
    übrigens, wer noch andere Typen außer Bilder abfragen möchte muss folgenden Typ reinbringen: "application/zip "; //Dateizip anstatt "image/pjpeg"

    ich hoffe ich habe jemandem geholfen,
    helft mir auch

  3. #3
    Kaiser(in)
    Themenstarter

    Registriert seit
    09.12.2005
    Alter
    29
    Beiträge
    2.496
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    ja ich hab mir mal selbst eben geholfen, da ich es eben austesten konnte :P
    also mit datenbank hab ich nicht überprüft, aber mit file funzt das alles und der lädt das auch in den ordner hoch, hatte schlicht übersehen, dass es dort
    $dest = $ordner."/".$bild_name; heissen muss (den slash vergessen...)

    das andere problem war einfach, das der browser (ie zumindest) das bild als image/pjpeg erkennt...

    im mysql_query ist mir wohl ein komma abhanden gekommen, das sollte nun aber auch gehen

    die tabelle muss natürlich noch angelegt werden, mit den beiden entsprechenden feldern und die ordner müsen die richtigen berechtigungen haben (777)
    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  4. #4
    HTML Newbie
    Registriert seit
    19.04.2006
    Ort
    Kierspe
    Beiträge
    3
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    also ich habe mir eine Tabelle mit den Spalten: upper, name und Datum angelegt.
    Und ich habe die mysql_query wie folgt geschrieben.
    Code:
    if&#40;$save_typ == "datenbank"&#41; &#123; 
                  mysql_query&#40;"INSERT INTO ".$save_name." &#40;upper, bild, Datum&#41; VALUES &#40;'".$upper."', '".$bild_name."', NOW&#40;&#41;"&#41;; &#125;
    klappt aber trotzdem nicht. Ich checks nicht. Dass ich zu Mysql auch wirklich verbunden bin und dass ich die richtige Datenbank ausgewählt habe, bin ich mir ganz sicher.

    ALSO WO IST DER FEHLER ????

  5. #5
    Kaiser(in)
    Themenstarter

    Registriert seit
    09.12.2005
    Alter
    29
    Beiträge
    2.496
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    was gibt es wenn für einen error aus ? mach mal ein or die($mysql_error)
    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  6. #6
    HTML Newbie
    Registriert seit
    19.04.2006
    Ort
    Kierspe
    Beiträge
    3
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Der rote Bereicht muss laut der Fehlermeldung Falsch sein:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4
    if($save_typ == "datenbank") {
    mysql_query("INSERT INTO ".$save_name."
    (upper, bild, Datum)
    VALUES
    ('".$upper."', '".$bild_name."', NOW()") or die(mysql_error());

  7. #7
    grw
    Gast

    Standard Bilder upload - klappt nicht

    Hallo, habe von PHP fast null Ahnung und wurstele schon 2 Tage rum. Kann mir jemand
    bei folgendem Fehler helfen ?????? Danke vielmals.



    Fatal error: Allowed memory size of 52428800 bytes exhausted (tried to allocate 65489033 bytes) in /kunden/135668_93437/webseiten/litauen/upload2_2.php on line 63

    Für was ist die Variable upper gebraucht? Welcher Wert muss sie enthalten?

    Quellcode:

    <html><head><title>sender</title>

    </head>
    <body bgcolor="#ffffff" text="#000000">
    <div align="center">
    <table bgcolor="#FFFFFF" width="600" cellspacing="0" cellpadding="3" border="1">
    <tr>
    <td height="300" valign="top" bgcolor="#ffffff" align="center">
    <?php
    ## Einstellungen:
    $max_size = 1048576; //In Bytes
    $ordner = "upload"; //In den Ordner wird das Bild geladen
    $EMailAdresse;
    $upper++;
    $save = true; //false wenn der Bildpfad nicht gespeichert werden soll
    $save_typ = "text"; // "datenbank" oder "text" hier eintragen
    $save_name = "upload"; /*Name des Textfiles/der MySQL-Tabelle, in
    dem die URL zum Bild gespeichert werden soll.
    Wenn Text gewählt ist, wird die Datei angelegt, wenn sie nicht existiert*/

    ## Zur Datenbank connecten, wenn nötig
    if($save_typ == "datenbank") {
    $dbh=mysql_connect("localhost","............","... .......");
    mysql_select_db("db_name",$dbh);
    }

    ## Bild-Daten werden aus $_FILES "geholt"
    $bild_typ = $_FILES['bild']['type'];
    $bild_groesse = $_FILES['bild']['size'];
    $bild = $_FILES['bild']['tmp_name'];
    $bild_name = $_FILES['bild']['name'];

    $upper = $_POST['upper'];

    ## Überprüfe, ob alle Kriterien erfüllt
    ## Hier kann alles Mögliche ausgetauscht werden
    if(($bild_groesse <= $max_size) && ($bild_typ == "image/gif" ||
    $bild_typ == "image/jpg" || $bild_typ == "image/jpeg" ||
    $bild_typ == "image/png" || $bild_typ == "image/pjpeg")) {

    /* Hier nichts ändern, wenn man nicht weiss was man tut ^^ */

    $dest = $ordner."/".$EMailAdresse."-".$bild_name;
    if(move_uploaded_file($bild, $dest)) {

    ## Pfad soll nicht gespeichert werden
    if(!$save) {

    echo "Das Bild wurde erfolgreich hochgeladen
    ";
    echo "Ordner: ".$ordner."
    ";
    echo "Name: ".$bild_name."
    ";
    echo "Typ: ".$bild_typ."
    ";
    }
    ## Pfad wird gespeichert
    else {
    if($save_typ == "datenbank") {
    mysql_query("INSERT INTO ".$save_name." SET upper = '".$upper."', bild = '".$bild_name."'");
    }
    else {
    $sn = $save_name.".txt";
    $insert = $dest."|".$upper."\n";
    $datei = fopen($sn, "a+"); //zum schreiben und ans ende der Datei
    $inhalt = fread($datei, filesize($sn));
    $inhalt .= $insert;
    fwrite($datei, $inhalt);
    fclose($datei);
    }
    echo "Das Bild wurde erfolgreich hochgeladen
    ";
    echo "Ordner: ".$ordner."
    ";
    echo "Name: ".$bild_name."
    ";
    echo "Typ: ".$bild_typ."
    ";
    }
    }
    }
    else {
    if($bild_groesse > $max_size) {
    echo "Das Bild ist zu groß";
    }
    else {
    echo "Die Datei muss ein Bild sein
    ";
    echo "Typ: ".$bild_typ;
    }
    }
    ?>
    <body bgcolor="#ffffff" text="#000000">
    <div align="center">
    <table bgcolor="#FFFFFF" width="600" cellspacing="0" cellpadding="3" border="0">
    <tr>
    <td height="300" valign="top" bgcolor="#ffffff" align="center">
    </td></TR>
    <tr><td><font color="#FF0000">Möchten Sie uns noch ein Foto schicken ?</font></td></tr>
    <tr><td><a href="bild_hochladen.html"><font color="#0000FF"><u> Hier klicken !</u>
    </font></a></td></tr></table></div>
    </body></html>

  8. #8
    Prinz(essin)
    Registriert seit
    19.03.2005
    Ort
    Dinslucken
    Beiträge
    762
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Dieser Fehler:
    Fatal error: Allowed memory size of 52428800 bytes exhausted (tried to allocate 65489033 bytes) in /kunden/135668_93437/webseiten/litauen/upload2_2.php on line 63

    Heißt glaube ich entweder das du keinen Speicherplatz mehr auf deinem Webserver hast oder das die datei die du hochladen wolltest viel zu groß ist...

    <?php
    $artists = array("Methodman", "Big L");
    if(!in_array($new_artist, $artists)) {
    array_push($artists, $new_artist);
    }

  9. #9
    Kaiser(in)
    Themenstarter

    Registriert seit
    09.12.2005
    Alter
    29
    Beiträge
    2.496
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    $upper++;
    da ist der fehler, das hast da eigentlich nichts zu suchen
    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  10. #10
    miau
    Gast

    Standard

    Hi Leute

    Hier noch eine Ergänzung. Damit wird für jedes raufgeladene Bild automatisch ein einmaliger Name generiert. Für meine Anwendung war das unumgänglich, da sonst bestehende Bilder überschrieben werden die den selben Namen haben wie neu heraufgeladene Bilder.


    //einen String erzeugen, der die Datei eindeutig identifiziert
    $id = uniqid(rand());

    //vom upload den originalnamen beibehalten und durch die id ergänzen
    $bild_name = "".$id."".$_FILES['bild']['name']."";



    Diese Antwort wurde von jojo87 auf meine Frage in folgendem posting gegeben. Danke an Ihn!
    Allerdings lief es bei mir nicht so wie er es gepostet hat. Deshalb habe ich es so wie oben angepasst.
    http://www.forum-hilfe.de/viewtopic.php?t=37491

    miau

Ähnliche Themen

  1. Tutorial
    Von Dingo20 im Forum Das Forum für Spiele, Fun & Jokes
    Antworten: 3
    Letzter Beitrag: 03.02.2008, 10:55
  2. [C#] Tutorial
    Von gast im Forum Forum für alle anderen Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 11.07.2007, 00:03
  3. IRC Tutorial
    Von rockstar990 im Forum Tutorials, Workshops und Anleitungen
    Antworten: 5
    Letzter Beitrag: 04.05.2007, 13:28
  4. Suche Tutorial
    Von gelöschter User im Forum Tutorials, Workshops und Anleitungen
    Antworten: 0
    Letzter Beitrag: 25.07.2006, 21:00
  5. PHP tutorial
    Von supersass1 im Forum Tutorials, Workshops und Anleitungen
    Antworten: 19
    Letzter Beitrag: 04.08.2005, 13:57

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •