🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ امیرحسین سلطانی
عدم کار کرد صحیح کد
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۲۹ مرداد ۱۴۰۲

دو تا مشکل داخل کد‌ها دارم:

۱- وقتی province_id مساوی هر عددی میذارم، اصلا تاثیری در پاسخ نداره و باز هم همه شهر‌ها نمایش داده میشه. (از province_id وردامپ گرفتم و همون عدد بعد از مساوی رو بر میگردوند به نظر مشکلی نداشت).

۲- وقتی یکی از ورودی‌ها رو مثل name یا province_id طبق آموزش با متد پست ارسال می‌کنم پیام‌ها به درستی بر نمی‌گرده مثلا کد استتوس ۲۰۰ میاد که باید ۴۰۶ باشه موارد دیگه هم اشتباه هست.

برای هر دو مورد عکس رو در فایل زیپ به همراه کدها ارسال کردم.

سلام،

علت سؤال 1 اینست که لاین 13 فایل index.php در فولدر cities به کد زیر تغییر کند: (مقادیر ارسالی از سمت فرم html بصورت رشته هستند که باید تبدیل به int شود)

$province_id = (int) ($_GET['province_id'] ?? null);

داخل تابع getCities فایل iran.php لاین 26 یک if وجود دارد که در and چک میکند که آیا province_id عدد صحیح است یا نه (is_int()) به همین علت بود که مقادیری که میدهید تفاوتی در خروجی نداشت.

جهت اطلاع و بعنوان نکته ای اضافه:

کاری دیگری هم میتوانستید کنید تا مشکل سؤال 1 حل شود، بجای اینکه $_GET['province_id'] رو تبدیل به int کنید میتوانستید در تابع getCities فایل iran.php لاین 26 بجای تابع is_int از تابع is_numeric استفاده کنید. چون تابع is_int چک میکنه که آیا int است یا نه ولی تابع is_numeric چک میکنه مقدار عددی است یا نه، حالا int یا string بودنش تفاوتی ندارد. برای مثال "123", "23.45", و 12345 تمام این مقادیر اگر در is_numeric قرار بگیرند، جواب این تابع true خواهد بود ولی در is_int فقط مقدار 12345 جوابش true خواهد بود.


در ضمن لاین 19 فایل index.php در فولدر cities به کد زیر تغییر کند: (نام متغیر هم نام با بقیه نیست و در حرف c و s متفاوت است، گرچه اشتباه نوشتید منتها چون تمام متغیرها رو اشتباه نوشتید من تغییری ایجاد نمیکنم، خواستید همه ی متغیرهارو به شکل املای درست یعنی $response تغییر دهید.)

Response::respondAndDie($responce, Response::HTTP_NOT_FOUND);


سؤال 2:

برای اینکه بتونید یک شهر جدید اضافه کنید باید هم یک اسم(name) مشخص کنید و هم یک استان(province_id) و هر کدام از این موارد خالی باشد و همچنین اگر province_id مقدارش عددی نباشد، با خطایی که ازش عکس گذاشتید مواجه میشوید.

fcab-Screenshot 2023-08-22 004716.png

محسن موحد ۳۰ مرداد ۱۴۰۲، ۲۱:۱۹

ممنون از پاسخگویی بسیار خوبتون.

بابت سوال ۲ مشکلی که هست کد استتوس داخل قسمت کد نمایش داده نمیشه و در دیتا کد بر می‌گرده، همچنین message هم در قسمت data میاد و در قسمت خودش فقط ok بر می‌گرده. تصویرش رو ارسال کردم مجدد. این مشکل به نظرتون از کجای کدها هست؟

امیرحسین سلطانی ۳۱ مرداد ۱۴۰۲، ۰۵:۱۵

این قسمت مشخصه در کد، تنها دستوری که خروجی را تولید میکند متد respondAndDie هست.

این متد داخل فایل Response.php در پوشه App و Utilities قرار گرفته.

هر گونه تغییراتی نیاز دارید باید در متد respond ایجاد کنید.

برای PUT (ویرایش) و DELETE هم میتونید چنین ساختاری بنویسید: (یک مثال است)

case 'PUT':
    if (!isset($request_body['city_id']) || !isValidCity($request_body)) {
        Response::respondAndDie(['Invalid City Data ...', Response::HTTP_NOT_ACCEPTABLE]);
    }
    // this method must be written
    $response = $city_service->updateCity($request_body['city_id'], $request_body);
    
    if (!$response) {
        Response::respondAndDie(['Failed to update city.', Response::HTTP_INTERNAL_SERVER_ERROR]);
    }
    
    Response::respondAndDie([$response, Response::HTTP_OK]);
case 'DELETE':
    if (!isset($request_body['city_id'])) {
        Response::respondAndDie(['City ID required.', Response::HTTP_BAD_REQUEST]);
    }
    // this method must be written
    $response = $city_service->deleteCity($request_body['city_id']);
    
    if (!$response) {
        Response::respondAndDie(['Failed to delete city.', Response::HTTP_INTERNAL_SERVER_ERROR]);
    }
    
    Response::respondAndDie(['City deleted successfully.', Response::HTTP_OK]);
محسن موحد ۳۱ مرداد ۱۴۰۲، ۲۰:۱۲