Ankündigung

Einklappen
Keine Ankündigung bisher.

Bei Dateiupload in Datenbank bleibt Dateninhalt leer

Einklappen

Neue Werbung 2019

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

  • Bei Dateiupload in Datenbank bleibt Dateninhalt leer

    Hallo!

    Ich lade mittels einem Formular Daten in eine Datenbank hoch. Der Dateiname, Dateigroesse wird eingespeichert nur der inhalt bleibt bei 0 Byte
    hierzo habe ich folgendes geschrieben
    Das Formular:
    PHP-Code:
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" enctype="multipart/form-data" >
                    <fieldset><legend>Dateiupload</legend>
                        <p><label for="file">Datei</label>
                            <input type="file" name="file"/></p>
                        <p>Wichtig! Es ist ein Auswahl zu treffen um welche Art von Dokument es sich handelt</p>
                        <p>
                            <label for="medkind">Animation</label>
                            <input type ="radio" name="medkind" id="anim" value="anim"/>
                            <label for="medkind">Anleitung</label>
                            <input type ="radio" name="medkind" id="doc" value="doc"/>
                        </p>
                        <p>
                            <input type="submit" name="submit" value="Datei speichern" />
                        </p>
                    </fieldset>
       </form>
    Die verarbeitenden Zeilen
    PHP-Code:
      if($data_send) {
                    
    $db = @new mysqliHOSTUSERPASSWORDDATABASE );
                    if(!
    $medkind) {
                        
    $error"<div>";
                        
    $error .= "<span style=\"color:red;font-size: 14px; font-family:arial;font-style:bold\"><p><b>Bitte angeben ob es sich um eine animation oder eine Anleitung handelt</b></p></span>";
                        
    $error .= "</div>";
                        echo 
    $error;
                    }else {
                        
                        if (
    $_FILES['file']['name'] && $_FILES['file']['name'] != "none") {
                            echo 
    "medkind files=$medkind<br/>";
                            
    $datas addslashes(fread(fopen($_FILES['file']['tmp_name'], "rb"), filesize($_FILES['file']['tmp_name'])));
                            
    #echo $datas;
                            
    if ($medkind=="anim") {

                                
    $sql 'INSERT INTO `Animation` (`Dokumentname`, `Daten`, `Dateigroesse`, `ZID`)';
                                
    $sql .='VALUES(?,?,?,?)';
                                
    $eintrag $db->prepare($sql);
                                
    $eintrag->bind_param('sbii'$_FILES['file']['name'],$datas,$_FILES['file']['size'],$zid);
                                
    $eintrag->execute();
                                if (
    $eintrag->affected_rows == 1) {
                                    echo 
    "erfolgreich";
                                }
                                else {
                                    echo 
    "Fehler=".$db->mysqli_error;
                                }

                            }else {.... 
    andere Variante falls es keine Animation ist 
    Wenn ich mir dann das Ergebniss in phpMYadmin anschau stellt sih besipeilsweise folgendes Bild dar
    Code:
    DID 	Dokumentname 	Daten 	            Dateigroesse 	     ZID 
     6	dokuhinakt.tex	[BLOB - 0Bytes]	201	                    15
    Was läuft da falsch?

    gruß niesel


  • #2
    Was steht denn in $datas? Wieso speicherst du die Datei nicht ins Filesystem und speicherst nur den Link dazu in der Datenbank. Dateien sollten wenn möglich nie in der Datenbank abgelegt werden!

    Kommentar


    • #3
      Wieso in einer Datenbank?-->Um es besser verwalten zu können.
      In $datas stehen eigentlich die Daten. Ich hatte diese Methode schon einmal verwendet doch sonst nicht mit mysqli sondern auf folgende weise:
      PHP-Code:
      ($_FILES['Datei']['name'] && $_FILES['Datei']['name'] != "none") {
              
      $Daten addslashes(fread(fopen($_FILES['Datei']['tmp_name'], "rb"), filesize($_FILES['Datei']['tmp_name'])));

              
      $sqldata "INSERT INTO Dokument ";
              
      $sqldata .= "(DoId, Name, Datum, Autor, Typ, Daten, Dateigroesse ) VALUES ";
              
      $sqldata .= "(NULL, '" $_FILES['Datei']['name'] . "', '" $str->datetosqldate(date("d.m.Y")) . "', '" $autor "', '" $_FILES['Datei']['type'] . "', '" .
              
      $Daten "','" $_FILES['Datei']['size'] . "')";
              
      $ResultPointer1 $db->query($sqldata); 
      Gruß niesel

      Kommentar


      • #4
        hmm, ziemlich unübersichtlich !
        MfG
        ~Capfly

        Kommentar


        • #5
          Naja ob es dadurch einfacher wird bezweifel ich. Du hast zwar keine Dateien auf der Festplatte, hast aber das Problem dass die Datenbank sehr riesig wird (langsam, sehr schwierig zu sichern -> Backup). Und zum anderen müssen die Dateien beim anzeigen/downloaden jedes mal durch eine PHP Datei geschleust werden -> umständlich und langsam. Dabei wird die Datenbank auch noch stark belastet!

          Kommentar


          • #6
            OK dass mag deine Ansicht sein und die ist sicherlich bei einigen Aspekten durchaus richtig. Nur wozu hat man das LARGEBLOB bei Mysql bzw überhaupt BLOB bei Datenbanken? Aber nichts desto trotz hilft es mir nicht, bitte nicht falsch versehen, über Sinn und Unsinn zu philosophieren Dateien in Datenbank zu speichern bei meinem Problem.

            Gruß niesel

            Kommentar


            • #7
              Zitat von nieselfriem Beitrag anzeigen
              OK dass mag deine Ansicht sein und die ist sicherlich bei einigen Aspekten durchaus richtig. Nur wozu hat man das LARGEBLOB bei Mysql bzw überhaupt BLOB bei Datenbanken?
              „Wenn's da ist, dann muss man's auch mal benutzen - soll ja nicht in der Ecke stehen und verstauben“?
              So argumentiert Oma bzgl. ihres hässlichen Kaffeeservice, aber kein Programmierer.

              Aber nichts desto trotz hilft es mir nicht, bitte nicht falsch versehen, über Sinn und Unsinn zu philosophieren Dateien in Datenbank zu speichern bei meinem Problem.
              Stimmt, bei deinem Problem hilft dir ganz grundlegendes Debugging.
              Und wenn du dich damit noch nicht auskennst, dann informierst du dich darüber erst mal - die anderen Diskussionen führen wir dann (weiter), wenn du mitreden kannst.


              Peter Kropff - Tutorials - PHP / MySQL - Fehlersuche - Überblick
              Debugging - Fehlersuche in PHP

              Kommentar


              • #8
                Zitat von ChrisB Beitrag anzeigen
                [I]Stimmt, bei deinem Problem hilft dir ganz grundlegendes Debugging.
                Und wenn du dich damit noch nicht auskennst, dann informierst du dich darüber erst mal - die anderen Diskussionen führen wir dann (weiter), wenn du mitreden kannst.
                Wenn ich nicht schon mit verschiedenen Debug-Methoden versucht hätte hinter das Geheimnis des Problems zu kommen würde ich mich nicht in diesem Forum melden. Weiterhin versteh ich nicht, wieso du einschätzt ob ich mich mit etwas auskenne oder nicht, bzw, wenn ich mich mit allem auskenne würde, brauchte ich mich nicht in diesem Forum melden. Ich habe eine Frage gestellt und es werden bis jetzt leider nur Diskussionen darüber geführt ob es Sinn macht Binärdaten zu speichern. Ich verwende nun mal relativ frisch mysqli. Habe es vorher eben mit dem Klassiker probiert und mir erschließt es sich einfach nicht warum die Daten nicht eingetragen werden. Ich habe nachprüft ob Datenobjekt $daten die Daten vorhanden sind. Und ja sie sind vorhanden.

                Gruß

                Kommentar


                • #9
                  In $datas stehen eigentlich die Daten.
                  Was heißt eigentlich. Hast Du es ausgegeben oder nicht?
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Hallo!

                    Ich habe einfach mal eien textdatei angeben und diese dann mittels echo $datas wieder ausgeben lassen. Diese wird auch ausgeben.

                    Nun habe ich vor lauter Verzweiflung einfach mal die alte Methode angewendet
                    PHP-Code:
                    if ($_FILES['file']['name'] && $_FILES['file']['name'] != "none") {
                                            
                    $filename=$_FILES['file']['name'];
                                            
                    $filesize=$_FILES['file']['size'];
                                            
                    $datas addslashes(fread(fopen($_FILES['file']['tmp_name'], "rb"), filesize($_FILES['file']['tmp_name'])));
                                            
                    #echo $datas;
                                            
                    if ($medkind=="anim") {
                                                
                    $dbold=new mysql_db();
                                                
                    $sql 'INSERT INTO `Animation` (`DID`, `Dokumentname`, `Daten`, `Dateigroesse`, `ZID`)';
                                                
                    $sql .='VALUES (';
                                                
                    $sql .= "NULL, '" $filename "', '" $datas "', '" $filesize "', '" $zid "')";
                                                echo 
                    $sql;
                                                
                    $Result=$dbold->query($sql);
                    ... 
                    wobei dann
                    Code:
                    $dbold->query
                    mit einer klassischen
                    Code:
                    $result= mysql_query($sql, $this->link)
                    in einer Klasse bearbeitet wird.

                    Und siehe da. Ich bekomme die Dateninhalte in die Tabelle. Nur eben nicht mit mysli und Prepared
                    Statements

                    Gruß niesel

                    Kommentar


                    • #11
                      Mal in die Nutzerkommentare im Handbuch geschaut ...?

                      http://www.php.net/manual/en/mysqli-...aram.php#96850

                      Kommentar


                      • #12
                        Ja habe ich. Habe dort aber leider nichts gefunden! Gruß

                        Kommentar


                        • #13
                          Zitat von nieselfriem Beitrag anzeigen
                          Ja habe ich. Habe dort aber leider nichts gefunden!
                          Und dass meine Antwort einen Link auf einen ganz speziellen Nutzerkommentar enthielt, hast du natürlich auch übersehen ...

                          Kommentar


                          • #14
                            Entschuldigung!!!!!!!

                            Mann sollte mal etwas gewissenhafter lesen, wenn man schon ein Hinweis bekommt.
                            Es funktioniert

                            Danke!!

                            Gruß niesel

                            Kommentar

                            Lädt...
                            X