1
votes

Téléchargement de fichier enctype = multipart / form-data ne fonctionne pas en php

J'essayais de télécharger un fichier via un formulaire en PHP. Malheureusement, le téléchargement de fichiers ne fonctionne pas. Il semble que le fichier ne soit pas sélectionné. Ci-dessous mon code. J'ai répliqué le code d'origine ci-dessous.

<?php
if(!empty($_FILES['cv']))
    {
        $filename = $_FILES["cv"]["name"];
        echo $filename;

        // $random = substr(number_format(time() * rand(),0,'',''),0,5);
        // $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
        // $file_ext = substr($filename, strripos($filename, '.')); // get file name
        // $allowed_file_types = array('.doc','.docx','.rtf','.pdf');
        // // Rename file
        // $newfilename = $file_basename.$random.'_cv'. $file_ext;
        // $filepath = "resume/" . $newfilename;
        // if(move_uploaded_file($_FILES["cv"]["tmp_name"], $filepath))
        // {
        //     echo "moved";
        // }
        // else
        // {
        //     echo "not moved";
        // }

    }
    else
    {
        echo "no file";
    }
  ?>

submit.php

<?php
if(isset($_POST['cv']))
    {
        $filename = $_FILES["cv"]["name"];
        echo $filename;

        $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
        $file_ext = substr($filename, strripos($filename, '.')); // get file name
        $allowed_file_types = array('.doc','.docx','.rtf','.pdf');
        // Rename file
        $newfilename = $file_basename.$random.'_cv'. $file_ext;
        $filepath = "resume/" . $newfilename;
        if(move_uploaded_file($_FILES["cv"]["tmp_name"], $filepath))
        {
            echo "moved";
        }
        else
        {
            echo "not moved";
        }

    }
    else
    {
        echo "no file";
    }
?>

Chaque fois que je lance ce code J'obtiens toujours l'erreur aucun fichier .

Quelqu'un pourrait-il m'aider à trouver où je me trompe.

Modifier 1

J'ai mis à jour le code regroupant les réponses commentées.

submit.php

<html>
<body>
    <table>
            <form action="submit.php" method="POST" enctype="multipart/form-data">
        <tr>
            <td><label>Resume</label></td>
            <td><input type="file" name="cv" id="cv"></td>
        </tr>
        <tr></tr>
        <tr></tr>
        <tr>
            <td colspan="2"><button type="submit">Submit</button></td>
        </tr>
    </form>
    </table>
</body>

Pour l'instant je suis juste commenter le code de déplacement du fichier et essayer simplement d'obtenir le nom du fichier. Il affiche toujours une erreur aucun fichier


3 commentaires

où est défini $ random ?


Sans rapport: placez votre

en dehors de votre
, pas à l'intérieur


@kerbholz - C'est lié. La récupération d'erreur de cette erreur est douloureuse. (Habituellement, le formulaire est déplacé en dehors de la table en laissant les entrées derrière (et n'est associé à aucun formulaire))


3 Réponses :


0
votes

Vous soumettez en utilisant POST mais vous devez tester si le champ de fichier est là et pas vide - donc essentiellement vous testez pour isset ($ _FILES ['cv']) code> etc ~ ou vous pouvez utiliser ! empty () qui teste s'il est défini et a une valeur de qualification qui n'équivaut pas à zéro ou nul etc

<!DOCTYPE html>
<html>
    <head>
        <title>PHP: Upload resumé</title>
        <meta charset='utf-8' />
    </head>
    <body>
        <form method='post' enctype='multipart/form-data'>
            <input type='file' name='cv' />
            <input type='submit' />
        </form>
        <?php
            if( $_SERVER['REQUEST_METHOD']=='POST' ){

                $directory='c:/temp/resume';
                if( !file_exists( $directory ) ) mkdir( $directory, 0777, true );

                $random=uniqid();
                $status=false;

                if( !empty( $_FILES['cv'] ) ){

                    $obj=(object)$_FILES['cv'];
                    $name=$obj->name;
                    $tmp=$obj->tmp_name;
                    $ext=strtolower( pathinfo( $name, PATHINFO_EXTENSION ) );
                    $allowed=array('doc','docx','rtf','pdf');



                    if( is_uploaded_file( $tmp ) && in_array( $ext, $allowed ) ){

                        $filename=basename( $name ) . $random . '_cv.' . $ext;

                        $filepath=$directory . '/' . $filename;

                        $status=move_uploaded_file( $tmp, $filepath );
                    }

                    echo $status ? 'moved' : 'not moved';
                }
            }
        ?>
    </body>
</html>

Un exemple de travail

<?php

    $random=uniqid();
    $status=false;

    if( !empty( $_FILES['cv'] ) ){
        $obj=(object)$_FILES['cv'];
        $name=$obj->name;
        $tmp=$obj->tmp_name;
        $ext=strtolower( pathinfo( $name, PATHINFO_EXTENSION ) );
        $allowed=array('doc','docx','rtf','pdf');

        if( is_uploaded_file( $tmp ) && in_array( $ext, $allowed ) ){
            $filename=basename( $name ) . $random . '_cv.' . $ext;
            $filepath='resume/' . $filename;

            $status=move_uploaded_file( $tmp, $filepath );
        }
        echo $status ? 'moved' : 'not moved';
    } else {
        echo 'bogus';
    }

?>


3 commentaires

Fait le changement mentionné. Toujours le même résultat.


désolé à ce sujet - j'ai manqué que les extensions de fichier dans le tableau $ allowed aient le point - supprimé cela et ça devrait aller


J'ai commenté tous les autres codes pour le téléchargement de fichiers. J'essaie juste d'obtenir le nom de fichier du fichier sélectionné. Mais toujours affichant l'erreur aucun fichier .



0
votes

Modifiez simplement le fichier submit.php

 if (isset($_FILES['cv']['tmp_name']) && !empty($_FILES['cv']['tmp_name'])) {

    $random = rand(11111, 999999);
    $filename = $_FILES["cv"]["name"];
    //echo $filename;

    $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
    $file_ext = substr($filename, strripos($filename, '.')); // get file name

    $allowed_file_types = array('.doc','.docx','.rtf','.pdf');
    // Rename file
    $newfilename = $file_basename.$random.'_cv'. $file_ext;
    $filepath = "resume/" . $newfilename;
    if(in_array($file_ext, $allowed_file_types)){
        if(move_uploaded_file($_FILES["cv"]["tmp_name"], $filepath))
        {
            echo "moved";
        }
        else
        {
            echo "Not moved";
        }
    }else{
       echo "File type invalid";
    }


}
else
{
    echo "no file";
}

Et c'est fait


2 commentaires

J'ai changé le code comme vous l'avez mentionné. Mais aucun résultat.


Je mets à jour le code complet ci-dessus, pouvez-vous vérifier, cela devrait fonctionner pour vous



0
votes

Vous devez d'abord rechercher les erreurs possibles comme celle-ci:

if (UPLOAD_ERR_OK == $_FILES["cv"]["error"]) {
    $tmp_name = $_FILES["cv"]["tmp_name"];
    $real_name = basename($_FILES["cv"]["name"]);
    move_uploaded_file($tmp_name, "resume/{$real_name}");
} else {
    // process the file upload errors here
    var_dump($_FILES["cv"]["error"]);
}

Recherchez les erreurs. Il peut y avoir des limites UPLOAD_MAX_FILESIZE ou POST_MAX_SIZE, par exemple (voir ici ).


0 commentaires