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 Réponses :
Vous soumettez en utilisant Un exemple de travail 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>
<?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';
}
?>
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
.
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
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
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 ).
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))