如果发生错误,则停止所有文件上传 - PHP

我创建了一些代码,允许用户在 MySQL 数据库中上传一些图像。
这是我的两个问题:

  1. 当发生错误时,例如因为文件不是图像,有问题的文件不会被加载,但其他文件会加载。
    相反,我希望即使只是发生错误,也不会上传任何文件。
    示例:如果我上传 3 个文件,其中 1 个不是图片:

    • 我现在不想要的输出:
      File 1 uploaded File 2 uploaded Just JPG and PNG images are allowed // file 3 not uploaded

    • 我期望拥有:
      No files uploaded // Even if a single file is not good, nobody gets uploaded

  2. 如果我上传n 个文件,将打印n 条消息。例如,如果我上传 3 个文件,输出将是:
    File 1.png upload correctly File 2.png upload correctly File 3.png upload correctly
    But what I hope to have only one sentence, like 3 files uploaded.

这是我的代码:

$timestamp = time();

$total = count($_FILES[ 'upload' ][ 'name' ]);

                if ($total==0) {

                    echo "Please upload at least one file";

                    $uploadOk = 0;

                } else {

                    $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

                    for($i = 0; $i < $total; $i++) {

                        if ($tmpFilePath != '') {

                            $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];

                            $completeFileName = basename($_FILES["upload"]["name"][$i]);

                            $target_file = "uploads/$completeFileName"; $uploadOk = 1;

                            $estensione = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

                            $Name = basename($_FILES["upload"]["name"][$i]);

                            if($extension != 'jpg' && $extension != 'png') {

                                echo "Only JPG and PNG files are allowed";

                                $uploadOk = 0;

                            } 


呼如林
浏览 131回答 1
1回答

慕尼黑8549860

<?php/*&nbsp;* CREATE TABLE `uploads` (&nbsp; `id` int(11) unsigned NOT NULL AUTO_INCREMENT,&nbsp; `timestamp` int(11) DEFAULT NULL,&nbsp; `file` varchar(400) DEFAULT NULL,&nbsp; PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;&nbsp;*/$mysqli = new mysqli('localhost', 'devel', 'devel', 'upload_db');$timestamp = time();$success_images = [];$total = count($_FILES[ 'upload' ][ 'name' ]);if ($total == 0) {&nbsp; &nbsp; echo "Please upload at least one file";&nbsp; &nbsp; $uploadOk = 0;} else {&nbsp; &nbsp; $uploadOk = 1;&nbsp; &nbsp; for ($i = 0; $i < $total; $i++) {&nbsp; &nbsp; &nbsp; &nbsp; $tmpFilePath = $_FILES[ "upload" ][ "tmp_name" ][ $i ];&nbsp; &nbsp; &nbsp; &nbsp; if ($tmpFilePath != '') {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $newFilePath = "./uploadFiles/" . $_FILES[ 'upload' ][ 'name' ][ $i ];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $Name = basename($_FILES[ "upload" ][ "name" ][ $i ]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $parts = pathinfo($Name);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $extension = strtolower($parts[ 'extension' ]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($extension == 'jpg' || $extension == 'png') {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // there may be $newFilePath I think&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (move_uploaded_file($_FILES[ "upload" ][ "tmp_name" ][ $i ], $newFilePath)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $mysqli->query("INSERT INTO uploads (timestamp, file) VALUES ('$timestamp', '$Name')");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $id = $mysqli->insert_id;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $success_images[ $id ] = $newFilePath;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $uploadOk = 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "Error";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $uploadOk = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break; // break loop !!!&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "Just JPG and PNG files are allowed";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $uploadOk = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; if ($uploadOk === 0) {&nbsp; &nbsp; &nbsp; &nbsp; foreach ($success_images as $id => $filename) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // `id` - primary key of table uploads?&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $mysqli->query(sprintf('DELETE FROM uploads WHERE `id`=%d', $id));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (file_exists($filename)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unlink($filename);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; foreach ($success_images as $id => $filename) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "<h2>The file <i>$filename</i> has been uploaded.</h2>";&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}?><form method="POST" enctype="multipart/form-data">&nbsp; &nbsp; <input type="file" multiple name="upload[]"/>&nbsp; &nbsp; <input type="submit" value="do_upload"/></form>
打开App,查看更多内容
随时随地看视频慕课网APP