روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۴ محمدجوکار
upload file
جامعه پی اچ پی ایجاد شده در ۲۶ تیر ۱۴۰۱
html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>upload Timetitle>
head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="input"><br>
        <button type="submit" name="button" value="upload">uploadbutton><br>
    form>
body>
html>
__________________________________________________________

        

انگار کدهای html که ارسال کردم تگ‌های اصلیش درست نیومدن


محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۴:۲۷

سلام دوست عزیز

انتظار چه اروری داشتید؟

محمد گازری ۲۶ تیر ۱۴۰۱، ۰۴:۲۸

اومدم پیام‌ها رو درست کنم، قاطی کردن که

ارور منظورم همون echo هایی هست که در بخش else شروطم گذاشتم

محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۴:۳۱

..........


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['button']) && $_POST['button'] == 'upload') {
        if (isset($_FILES['input']) && !empty($_FILES['input'])) {
            $fileName $_FILES['input']['name'];
            $fileTmp $_FILES['input']['tmp_name'];
            print_r($fileName);
        } else {
            echo 'a problem in input"';
        }
    } else {
        echo "a problem in button";
    }
} else {
    echo "the method is not POST";
}
محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۴:۳۴

توی اینجور مواقع یه راه دیباگ آسون وجود داره که همه جا کاربرد داره

مثلا شما الان طبق برنامتون میتونید بیاید و در خط‌های مختلف var_dump کنید $_POST رو و بعدش die() کنید

اینطوری میتونید ببینید در چه شرایطی قرار دارید و چرا شرط else کار نمیکنه!

محمد گازری ۲۶ تیر ۱۴۰۱، ۰۴:۴۱

نشد باز

در هر سه لایه یه ارایه برام برگردوند شبیه به بهم . متوجه نشدم راستش

اومدم برای امتحان یه سری چیزای دیگه اکو کردم ولی قاااااطی کرده اصلا

الان بدون در نظر گرفتن شروطی که گذاشتم داره هر سه تا اکو رو باهم برام نمایش میده اونم بدون اینکه بخوام چیزیو بارگذاری کنم

دکمه اپلود رو خالی خالی بزنم نتایج میان

یعنی چه ؟؟؟؟


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // var_dump($_POST);
    // die;
    echo "hello";
    if (isset($_POST['button']) && $_POST['button'] == 'upload') {
        // var_dump($_POST);
        // die;
        echo "hello 2";
        if (isset($_FILES['input']) && !empty($_FILES['input'])) {
            // var_dump($_POST);
            // die;
            $fileName $_FILES['input']['name'];
            $fileTmp $_FILES['input']['tmp_name'];
            echo "hello 3";
        } else {
            echo 'a problem in input"';
        }
    } else {
        echo "a problem in button";
    }
} else {
    echo "the method is not POST";
}
محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۴:۵۶

6a23-Screenshot (396).png

محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۴:۵۶

خب الان کاری که کردی بهت یه راهنمایی داره میده و این یعنی شرط آخرت برقرار که hello 3 داره اجرا میشه

زمانی که فایل آپلود نمیکنی مقدار این شرط رو بررسی کنی

isset($_FILES['input']) && !empty($_FILES['input'])

یعنی داخل شرط بالا مثلا بیا به این شکل مقدار رو چاپ کن تا ببینی زمانی که فایل آپلود نمی‌کنی چه اتفاقی میوفته که شرط اجرا میشه

var_dump($_FILES['input']);
die();
محمد گازری ۲۶ تیر ۱۴۰۱، ۰۵:۰۲

خب این کار رو کردم و ارایه ای که برمیگرده درصورتی که فایلی اپلود نکرده باشم ولیو هاش خالیه و در صورتی که فایلی بارگزاری کنم، ولیو میگیرهd41f-Screenshot (397).png

ولی بازم درک نمیکنم که چرا با وجود اپلود نشدن فایل، چطوری اصلا وارد شرط میشه و چکش میکنه

خب من شرط گذاشتم که اگر چیزی اپلود نشده بود، اصلا شرط اجرا نشه و به لایه else بره

الان چطوریه که وارد شرط میشه، واردامپ مارو چک میکنه

محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۵:۱۷

ببین جناب

من این کد رو مجدد نوشتم ولی دقیقا همون اتفاقات میافته

دوباره بدون در نظر گرفتن شرط، وارد لایه میشه و پیام اوکی رو برمیگردونه

if($_SERVER['REQUEST_METHOD'] == "POST") {
    
    if(isset($_POST['button']) && $_POST['button'] == 'upload') {
      if(isset($_FILES['input']) && !empty($_FILES['input'])) {
        echo 'everythings are okey';
      }else {
          echo 'this is an error';
      }
    }
}
محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۵:۲۸

اگر داخل لینک زیر رو مشاهده کنید میبینید که ارورهای مختلف رو داخل آرایه $_FILES توضیح داده

UPLOAD_ERR_NO_FILE
Value: 4; No file was uploaded.

https://www.php.net/manual/en/features.file-upload.errors.php

ببینید شما چه فایل آپلود کنید چه نکنید یه آرایه ای دارید که مقدار داره بنابرابن نمیتونید با !empty آپلود نشدن رو بسنجید

بنابراین راه اصولی اینه که برای آپلود نشده از کلید error آرایه $_FILES استفاده کنید

موفق باشید ?

بهترین پاسخ
محمد گازری ۲۶ تیر ۱۴۰۱، ۰۵:۵۹

آقای گازری عزیز مچکرم از وقتی که گذاشتید :)

بعد از کلی آزمون و خطا، و کد زدن

به این روش حل شد :))))))))))

if($_SERVER['REQUEST_METHOD'] == "POST") {
    
    if(isset($_POST['button']) && $_POST['button'] == 'upload') {
        if(isset($_FILES['input']) && $_FILES['input']['error'] == 0 ){
            echo 'uploaded successfully';
        }else {
            echo 'there is an error!!!';
        }
    }
}
محمدجوکار ۲۶ تیر ۱۴۰۱، ۰۶:۴۷