• 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 :D

    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):


    damit ist das Formular auch schon fertig...

    Zitat

    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:


    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
    http://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 :oops:
    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 8)
    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(move_uploaded_file($bild, $dest)) {

    und damit ersetzen !!

    Code
    /* Hier nichts ändern, wenn man nicht weiss was man tut ^^ */
    
    
       $dest = $ordner."/".$bild_name;
       if(move_uploaded_file($bild, $dest)) {
       chmod($dest, 0755);

    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  • 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(($bild_groesse <= $max_size) AND (($bild_typ == "image/gif") OR 
    ($bild_typ == "image/jpg") OR ($bild_typ == "image/pjpeg") OR 
    ($bild_typ == "image/png"))) {


    ü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 :D

  • 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!

  • 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($save_typ == "datenbank") { 
                  mysql_query("INSERT INTO ".$save_name." (upper, bild, Datum) VALUES ('".$upper."', '".$bild_name."', NOW()"); }


    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 ???? :(

  • 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!

  • Der rote Bereicht muss laut der Fehlermeldung Falsch sein:

    Zitat

    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());

  • 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>

  • 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...

    [Blockierte Grafik: http://azustek.az.funpic.de/hf.gif]
    <?php
    $artists = array("Methodman", "Big L");
    if(!in_array($new_artist, $artists)) {
    array_push($artists, $new_artist);
    }

  • Zitat


    $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!

  • 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.
    https://www.forum-hilfe.de/viewtopic.php?t=37491

    miau