• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

multi upload

sarah15

Neues Mitglied
Hallo,

ich habe im Internet folgendes Script gefunden. Diese Art eines multiuploads gefällt mir sehr gut, nur funktioniert dieser nicht wirklich :(

HTML:
<script language="JavaScript" type="text/javascript">
            var i=1;
            function addupload()
            {
                i=i+1;
                
                var row = document.getElementById("table").insertRow( document.getElementById("tr").rowIndex+1 );
                var cell = row.insertCell( 0 );
                cell.className = 'links';
                
                cell = row.insertCell( 1 );
                
                var input = document.createElement( 'input' );
                input.type = 'file';
                input.name = 'file[]';
                cell.appendChild( input );
                
                document.getElementById("i").value = i;
            }
        </script>
        
    <table cellspacing="0" cellpadding="0" width="450">
        
    <tr><td>
        <form name="form" action="test.php" method="post" enctype="multipart/form-data">
        <table cellspacing="0" cellpadding="0" width="450" id="table">
        <tr id="tr"><td width="50%" class="links">
            File
        </td>
        <td width="50%" class="zeug">
            <input type="file" name="file[]" />
            <a href="javascript:addupload()" class="link1">+ weitere Datei</a>
        </td></tr>
        <tr><td width="50%" class="links"></td>
        <td width="50%" class="rechts">
            <input type="submit" name="submit" class="input2" value="Hinzuf&uuml;gen" />
        </td></tr>
    </table>
</form>
</td></tr>

Wie füge ich eine Funktion hinzu die nach Umlauten im Filename überpruft und zB aus einem Ü automatisch ein Ue macht?
 
Danke, werd mich mal damit versuchen :wink:

Aber woran liegt es, das mit dem Script keine Files hochgeladen werden?
 
PHP:
<?php
    $uploaddir = '/uploads/';
print "<pre>";
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))
    {
    print "Die Datei wurde gepr&uuml;ft und erfolgreich hochgeladen.";
    print_r($_FILES);
    } else {
    print "Datei-Upload fehlgeschlagen!";
    print_r($_FILES);
    }
?>
 
In deinem Formular gibt es kein Feld namens "userfile", nur "file" und das ist noch dazu ein Array. Dieser PHP-Code ist somit für diese Anwendung falsch.
 
Ahhh ok, das mit dem "userfile" habe ich verstanden und verbessert ;)

Aber ich benötige doch ein Array um mehrere Files hochzuladen oder nicht :?:

Wie muss das Formular denn abgeändert werden?
 
Im Formular definierst Du bereits ein Array, mit "file[]". In der PHP-Datei musst Du dieses nun "nur" noch auslesen. Beispiel:

PHP:
for( $f=0;$f<count($_FILES);$f++) {
 var_dump($_FILES["file"][$f]);
}
 
Ich habe das Formular folgendermaßen abgeändert:

PHP:
<?php
$uploaddir = '/upload/';
     for( $f=0;$f<count($_FILES);$f++) {
     var_dump($_FILES["file"][$f]);    
        print "<pre>";
            if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $_FILES['file']['name']))
            {
            print "Die Datei wurde gepr&uuml;ft und erfolgreich hochgeladen.";
            print_r($_FILES);
            } else {
            print "Datei-Upload fehlgeschlagen!<pre><pre>";
            print_r($_FILES);
            }
    }
?>

Zum testen wollte ich zwei leere Textfiles hochladen, erhalte jedoch folgende Meldung:

NULL

Datei-Upload fehlgeschlagen!

Array
(
[file] => Array
(
[name] => Array
(
[0] => 1.txt
[1] => 2.txt
)

[type] => Array
(
[0] => text/plain
[1] => text/plain
)

[tmp_name] => Array
(
[0] => /tmp/phpNSZb91
[1] => /tmp/phpMOGwyJ
)

[error] => Array
(
[0] => 0
[1] => 0
)

[size] => Array
(
[0] => 0
[1] => 0
)

)

)
 
Wie du deinem dump entnehmen kannst ist $_FILES['file']['tmp_name'] ein Array....

PHP:
if (move_uploaded_file($_FILES['file']['tmp_name'][$f], $uploaddir . $_FILES['file']['name'][$f]))
 
Der upload funktioniert jetzt, leider wird jedoch nur die Datei hochgeladen die als erstes ausgewählt wird. Ich habe die for schleife in eine do-while sowie foreach abgeändert aber weiterhin wird nur eine Datei hochgeladen :(
 
Von php.net:
Multiple upload might not work if you use a table for displaying your form inputs when <form> element is inside the <table> element. In this case only the first file will be uploaded.
Put the <form> element outside the <table> element to get it to work.
 
Zurück
Oben