upload script mit progressbar funktioniert nicht

  • Hi,

    hab nen vorhandenes und funktionierendes Upload script um eine Progressbar erweitert. Der Upload und die Progressbar funktionieren. Leider werden die Formular daten nicht an das php-Script zur weiterverarbeitung der Daten übergeben. Hat einer ne Idee wo mein fehler liegt?

    PHP
    <body>
    <script language="javascript">    function fileChange(){        var fileList = document.getElementById("file").files;     var file = fileList[0];     if(!file)        return;     document.getElementById("fileName").innerHTML = 'Dateiname: ' + file.name;    document.getElementById("fileSize").innerHTML = 'Dateigröße: ' + file.size + ' B';    document.getElementById("fileType").innerHTML = 'Dateitype: ' + file.type;    document.getElementById("progress").value = 0;    document.getElementById("prozent").innerHTML = "0%";}
    var client = null; function uploadFile(){    var file = document.getElementById("file").files[0];        var formData = new FormData();        client = new XMLHttpRequest();     var prog = document.getElementById("progress");     if(!file)        return;     prog.value = 0;    prog.max = 100;         formData.append("datei", file);     client.onerror = function(e) {        alert("onError");    };     client.onload = function(e) {        document.getElementById("prozent").innerHTML = "100%";        prog.value = prog.max;    };     client.upload.onprogress = function(e) {        var p = Math.round(100 / e.total * e.loaded);        document.getElementById("progress").value = p;                    document.getElementById("prozent").innerHTML = p + "%";    };     client.onabort = function(e) {        alert("Upload abgebrochen");    };     client.open("POST", "add_script.php");        client.onreadystatechange = function() {    if(this.readyState == this.DONE && this.status == 200)    {    var ausgabe = document.getElementById("upload_ausgabe");    ausgabe.innerHTML = this.responseText;    }};
        client.send(formData);}
    function uploadAbort() {    if(client instanceof XMLHttpRequest)        //Briecht die aktuelle Übertragung ab        client.abort();}</script>
    <form id="form1" name="form1" method="post" enctype="multipart/form-data" action="" id="upload_form">      <label>Serie:    <select name="serie" id="serie">            </select>  </label>       Titel:<input name="titel" type="text" size="25" />  Sprache:  <select name="lang" id="lang">  <option value="./images/german.jpg">deutsch</option>  <option value="./images/english.jpg">englisch</option>  </select><br /><br />  Inhalt:<br />  <textarea class="textarea" id="inhalt" name="inhalt" cols="75" rows="10"></textarea>  <br />  <br />  Datei:<input name="file" type="file" id="file" multiple/>  <br />  <br />    <input name="upload" value="Upload" type="button" onclick="uploadFile();" />    <input name="abort" value="Abbrechen" type="button" onclick="uploadAbort();" />  </form>
    <div>    <div id="fileName"></div>    <div id="fileSize"></div>    <div id="fileType"></div>    <progress id="progress" style="margin-top:10px; width:500px;"></progress> <span id="prozent"></span></div>
    <div id="upload_ausgabe">
    </div>
    </body>
  • Der Upload und die Progressbar funktionieren.


    Na, dann ist ja alles beim Besten.

    Zitat


    Leider werden die Formular daten nicht an das php-Script zur weiterverarbeitung der Daten übergeben.


    Ich dachte der Upload funktioniert?

    Zitat


    Hat einer ne Idee wo mein fehler liegt?


    Bei dem Quelltext wird sich niemand die Mühe machen. Bitte poste sauber eingerückten Code.
    Ansonsten kann man nur sagen debuggen und Header des HTTP-Requests ansehen.
    Stimmen Feldnamen und Parameter, Gross--Kleinschreibung etc.

  • Die Daten werden in den Temp Ordner des Servers geladen. Dann sollte das php-Script mit move_uploaded_file die Datei in ihr eigentliches Ziel bewegen. Da dasScript aber keine Daten vom Formular bekommt passiert das nicht. Feldnamen stimmen denn das Script hat ja vorher funktioniert und eigentlich hat sich außer den Zeilen für die progressbar nichts geändert

    Den Code hatte ich sauber rein kopiert. Keine Ahnung warum der so rum gewürfelt worde. Habs jetzt nochmal ordentlich gemacht.

  • so wars vorher. Also nur das Formular. Da wurde nur der action pfad raus genommen und an die entsprechende Stelle im Script gesetzt und der button zum abbrechen kam hinzu.

  • Action war

    Code
    [COLOR=#FF8000]action=[COLOR=#0000FF]"./index.php?page=add edit/add_episode_script.php"[/COLOR][/COLOR]



    und ist zu

    Code
    [COLOR=#000000][COLOR=#0000BB]client[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]open[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"POST"[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"add_episode_script.php"[/COLOR][/COLOR]


    geworden. Das kann ja schon mal nicht sein. Achte auch auf das Leerzeichen zwischen add und edit, was eigentlich escaped gehört.

    Aus

    HTML
    <select name="lang" id="lang">          
        <option value="./images/german.jpg">deutsch</option>        
        <option value="./images/english.jpg">englisch</option>  
    </select><br /><br />


    hast du

    HTML
    <select name="serie" id="serie">
    
    
    Titel:<input name="titel" type="text" size="25" />  
    Sprache:  <select name="lang" id="lang">
      <option value="./images/german.jpg">deutsch</option>
      <option value="./images/english.jpg">englisch</option>
      </select><br /><br />


    gemacht.

    Das ist auf jeden Fall fehlerhaft.

    Auf mehr habe ich derzeit nicht geachtet, weil das schon schlimm ist.

    2 Mal editiert, zuletzt von explanator (10. November 2013 um 17:47)

  • die änderung in action ist richtig da das ergebnis des scripts in bei der progressbar variate in nem div ausgegeben wird. da in dem div aber nicht die ganz index.php geladen werden muss sondern nur das script fällt der teil weg.
    Wie geschrieben wird das script auch geladen. ich sehe aber das an der ausgabe des scripts das es keine werte vom formular bekommen hat. (var_dump der scriptvariablen)

    das

    HTML
    <select name="serie" id="serie">

    ist nur nen überbleibsel eines selects mit ca.50 optionen die für den fall aber nicht wichtig sind. deswegen hab ich das beim eintragen ins forum gelöscht (bis auf die eine vergessene zeile)
    um es übersichtlicher zu machen.

  • die änderung in action ist richtig da das ergebnis des scripts in bei der progressbar variate in nem div ausgegeben wird. da in dem div aber nicht die ganz index.php geladen werden muss sondern nur das script fällt der teil weg.


    Falsch gedacht.
    Ich habe dir aber schon gesagt. dass du dir mal die Header anschauen solltest, die da übertragen werden. Nun mach das auch mal.
    Mit den Entwicklerwerkzeugen im Firefox ist das mittlerweile kein Problem mehr.

    Pfadangaben am besten immer absolut angeben, vielleicht hilft dir dieser Hinweis ja weiter.