Avatar billede marzman Nybegynder
11. maj 2007 - 18:44 Der er 5 kommentarer

upload script (fra bogen avanceret php)

Hej eksperter..

Jeg har siddet og læst i en af mine PHP bøger og fandt script som kunne være meget dejligt at bruge.
Et script som kan uploade flere filer via en form:

<?php
$page = "index.php";
?>
<html>

<head>

<title>marZman.dk | Upload</title>
</head>

<body>


<?php

function antal_uploads() {
    global $page;
?>
<form action="<?=$page?>" method="post">
    <p>Hvor mange filer ønsker du at uploade?</p>
    <p>Indtast hvor mange felter du ønsker:
        <input type="text" name="felter" maxlength="1" style="width: 20px;" />
    </p>
    <p><input type="submit" name="felter_submit" value="submit" /></p>
</form>

<?php
} // afslutter funktionen
function form($felter) {
    $felter = $_POST['felter'];
    global $page;

?>


<form enctype="multipart/form-data" action="<?=$page?>" method="post">

    <table style="border: 2px solid black;">
<?php
    for($i = 0; $i < $felter; $i++) {
?>
        <tr>
            <td>Fil:</td>
            <td>
                <input type="hidden" name="MAX_FILE_SIZE" value="20971520" />
                <input type="file" name="file_<?=$i?>" />
            </td>
        </tr>
<?php
}
?>
   
                <input type="hidden" name="felter" value="<?=$felter?>" />
        <tr>
            <td>
                <input type="submit" name="submit" value="Upload fil(er)!" />
            </td>
        </tr>
    </table>
    </form>

<?php

} //afslutter funktionen

//Hvor skal filerne uploades?
        $upload_dir = "/customers/marzman.dk/marzman.dk/httpd.www/upload/files/";
        $felter = $_POST['felter'];

//hvis formen er blevet sendt
if (isset($submit)) {
       

       
    for($i = 0; $i < $felter; $i++) {
        if(is_uploaded_file(${"file_".$i})) {
   
    // $newfile indeholde sti og navn til den uploadede fil
        $newfile = $upload_dir . $_FILES['file_' . $i]['name'];
        //Forsøger at flytte den uploadede fil
            if(!@copy($file, $newfile)) {
                echo "<p>Fejl ved upload: <em>" . $_FILES['file_' . $i]['name'] . "</em> Prøv igen</p>";
            } else {
            echo "<p>Tillykke! <em>" . $_FILES['file_' . $i]['name'] . "</em> er uploadet</p>";
            }
        }
       
    }
} elseif(isset($felter)) {
    form($felter);
} else {
    antal_uploads();
}
?>

</body>
</html>


Problemet med dette script er: når jeg når til step 2, altså indsætning af filer som skal uploades. Når jeg så trykker upload bliver den stående i samme vindue somom den ikke kan gå videre til step 3...
nogen som kan se fejlen ?

Hilsen marZman
Avatar billede showsource Seniormester
12. maj 2007 - 06:06 #1
Du kan prøve et bruge de "rigtige" variabler, altså $_POST["submit"] og ikke bare $submit.

Og jeg ville bruge [] i navnet på uploadfelter,
<input type="file" name="upfile[]" />

og derefter:

if(isset($_FILES["upfile"]) && is_array($_FILES["upfile"]))
{
    for($a = 0; $a < count($_FILES["upfile"]); $a++)
    {

        if(is_uploaded_file($_FILES["upfile"]["tmp_name"][$a]))
        {
        move_uploaded_file($_FILES["upfile"]["tmp_name"][$a], $dist . $_FILES["upfile"]["name"][$a]);
        }
    }
}
Avatar billede showsource Seniormester
12. maj 2007 - 09:55 #2
Blev lidt inspireret, så bryggede det her sammen:

<?php

session_start();

$dist = "upload/";

if(isset($_FILES["upfile"]) && is_array($_FILES["upfile"]))
{
    foreach($_FILES["upfile"]["error"] as $key => $error)
    {
        if($error == UPLOAD_ERR_OK)
        {

        move_uploaded_file($_FILES["upfile"]["tmp_name"][$key], $dist . $_FILES["upfile"]["name"][$key]);
        $_SESSION["files"]["navn"][$key] = $_FILES["upfile"]["name"][$key];
        $_SESSION["files"]["str"][$key] = filesize($dist . $_FILES["upfile"]["name"][$key]);

        }
    }

header("Location:http://". $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"]);
exit;
}

?>
<html><head><title>Upload af flere filer</title>

<script type="text/javascript">

function div_text($antal) {

    if(er_et_tal($antal) != false && $antal > 0) {
    var ialt = 0;
    var str = '';
      while(ialt < $antal) {
      str = str+'<br />\n<input type="file" name="upfile[]" size="32">';
      ialt++;
      }
  document.getElementById('uploadfelter').innerHTML = str;
  }

}

function er_et_tal() {
    var reg = /^[\d]+$/;
    var navn = document.forms['do_upload'].elements['antal'];
    if(navn.value !='' && !navn.value.match(reg)){
      alert("Kun tal kan indtastes i feltet!");
      navn.value = '';
      navn.focus();
      return false;
    }
}

</script>

</head>
<body>

<form name="do_upload" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
Max. upload p&aring; en gang: <b><?php echo min(ini_get("post_max_size"), ini_get("upload_max_filesize")); ?>b.!</b><br />
Antal felter: <input type="text" name="antal" onkeyup="er_et_tal();" size="2">
<input type="button" value="Vis felter" onclick="div_text(this.form.antal.value);" onkeydown="div_text(this.form.antal.value);">

<div id="uploadfelter">

<script>
div_text(3);
</script>

</div>

<br />

<input type="submit" value="Upload">

</form>

<?php

if(isset($_SESSION["files"])) {
echo count($_SESSION["files"]["navn"]);
echo"<pre>";
print_r($_SESSION["files"]);
echo"</pre>";
unset($_SESSION["files"]);
}


?>
Avatar billede showsource Seniormester
12. maj 2007 - 09:56 #3
"error" elementet blev først tilføjet i version 4.2 af PHP, b.t.w. ......
Avatar billede real_per Nybegynder
25. juni 2007 - 21:52 #4
Bruger sidstnævnte php scrip, som virker rigtig fint.

Men er der nogen der kan fortælle mig hvordan jeg fjerner filgrænsen på 64MB?
Avatar billede showsource Seniormester
26. juni 2007 - 08:29 #5
i php.ini eller med en .htaccess
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester