💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۵۲ Hossein S
اضافه نشدن تسک به دیتابیس
جامعه پی اچ پی ایجاد شده در ۰۲ فروردین ۱۴۰۲

1ec4-Screenshot from 2023-03-22 22-31-40.png

485f-Screenshot from 2023-03-22 22-32-12.png

Hossein S ۰۲ فروردین ۱۴۰۲، ۲۰:۱۴

سلام حسین عزیز

توی لاین 35 بجای علامت کوچکتر علامت بزرگتر گذاشتید.

احمدرضا فاطمی کیا ۰۲ فروردین ۱۴۰۲، ۲۰:۵۳

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


Hossein S ۰۲ فروردین ۱۴۰۲، ۲۱:۱۵

سورس پیوست نشده.

احمدرضا فاطمی کیا ۰۲ فروردین ۱۴۰۲، ۲۱:۳۳

cdf6-Screenshot from 2023-03-23 02-43-56.png

Hossein S ۰۳ فروردین ۱۴۰۲، ۰۰:۱۸

استوس ۱ رو به من نشون نمیده


Hossein S ۰۳ فروردین ۱۴۰۲، ۰۰:۱۹
function addTask($taskTitle,$folderId){
    global $pdo;
    $current_user_id = getCurrentUserId();
    $sql = 'INSERT INTO `tasks` (`title`,`user_id`,`folder_id`) VALUES (:title ,:user_id,:folder_id)';
//    INSERT INTO `tasks`(`id`, `title`, `user_id`, `folder_id`, `is_done`, `created_at`) VALUES ('11','hosseim','1','34','0','2023-03-19');
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':title'=>$taskTitle , ':user_id'=>$current_user_id ,':folder_id'=>$folderId]);
    return $stmt->rowCount();
}##########################################################


Hossein S ۰۳ فروردین ۱۴۰۲، ۰۰:۴۵
case"addTask";
var_dump("hi", $_POST);
    $folderId = $_POST['folderId'];
    $taskTitle = $_POST['taskTitle'];
    if (empty($folderId)) {
        echo "فولدر را انتخاب کنید";
        die();
    }
    if (!isset($taskTitle) || strlen($taskTitle) > 3) {
        echo "عنوان تسک باید بزرگتر از 2حرف باشد";
        die();
    }
    echo addTask($taskTitle, $folderId);
    break;


Hossein S ۰۳ فروردین ۱۴۰۲، ۰۰:۴۵

حسین عزیز

ببین متد getCurrentUserId درست کار میکنه؟


احمدرضا فاطمی کیا ۰۳ فروردین ۱۴۰۲، ۰۸:۱۱
case"addTask";
var_dump("hi", $_POST);
    $folderId = $_POST['folderId'];
    $taskTitle = $_POST['taskTitle'];
    if (empty($folderId)) {
        echo "فولدر را انتخاب کنید";
        die();
    }
    if (!isset($taskTitle) || strlen($taskTitle) > 3) {
        echo "عنوان تسک باید بزرگتر از 2حرف باشد";
        die();
    }
    echo addTask($taskTitle, $folderId);
    break;


Hossein S ۰۳ فروردین ۱۴۰۲، ۱۳:۴۶

در داخل فانکشن AddTask ببین آیدی کاربر دریافت میشه؟


احمدرضا فاطمی کیا ۰۳ فروردین ۱۴۰۲، ۱۳:۵۳

عذر میخوام چجور باید چک کنم من داخل فانکشین vardumpمیکن فولدر ایدی رو چیزی نشون نمیده؟

Hossein S ۰۳ فروردین ۱۴۰۲، ۱۴:۰۶

حسین عزیز

در این فانکشن متغیر current user id رو دامپ کن:

function addTask($taskTitle,$folderId){
    global $pdo;
    $current_user_id = getCurrentUserId();
    var_dump($current_user_id);
    $sql = 'INSERT INTO `tasks` (`title`,`user_id`,`folder_id`) VALUES (:title ,:user_id,:folder_id)';
//    INSERT INTO `tasks`(`id`, `title`, `user_id`, `folder_id`, `is_done`, `created_at`) VALUES ('11','hosseim','1','34','0','2023-03-19');
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':title'=>$taskTitle , ':user_id'=>$current_user_id ,':folder_id'=>$folderId]);
    return $stmt->rowCount();
}###################


احمدرضا فاطمی کیا ۰۳ فروردین ۱۴۰۲، ۱۴:۱۰

هیچ چیز نشون نمیده ؟اگه بخوام بفهمم ریکویست تا این فانکشین میرسه یا ن چیکار باید کنم؟

Hossein S ۰۳ فروردین ۱۴۰۲، ۱۵:۳۰

یک آرگومان دیگه به دامپ بدید:

function addTask($taskTitle,$folderId){
    global $pdo;
    $current_user_id = getCurrentUserId();
    var_dump('***&--&__&&&__&----++$***',$current_user_id);
    $sql = 'INSERT INTO `tasks` (`title`,`user_id`,`folder_id`) VALUES (:title ,:user_id,:folder_id)';
//    INSERT INTO `tasks`(`id`, `title`, `user_id`, `folder_id`, `is_done`, `created_at`) VALUES ('11','hosseim','1','34','0','2023-03-19');
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':title'=>$taskTitle , ':user_id'=>$current_user_id ,':folder_id'=>$folderId]);
    return $stmt->rowCount();
}###################
احمدرضا فاطمی کیا ۰۳ فروردین ۱۴۰۲، ۱۵:۵۷

بازم هیچ چیز نشون نداد

Hossein S ۰۳ فروردین ۱۴۰۲، ۱۶:۳۰

من فقط همیجنا از وردامپ استفاده کردم ؟جای دیگه که نیاز نیست باشه؟

Hossein S ۰۳ فروردین ۱۴۰۲، ۱۷:۱۷

سورس پروژه رو میخوای توی تلگرام ارسال کنم اینجا نمیشه هم بخار اینترنتم هم اینکه نشون نمیده لود شدن رو؟

Hossein S ۰۳ فروردین ۱۴۰۲، ۱۷:۲۰

پروژه رو در گیت قرار بده بررسی بشه.

احمدرضا فاطمی کیا ۰۴ فروردین ۱۴۰۲، ۱۰:۲۵

https://gitlab.com/hosseinsarlaK/to-do

Hossein S ۰۴ فروردین ۱۴۰۲، ۱۵:۰۵

بررسی کردم اکی بود با تغییر علامت کوچکتر که در بالا اشاره شد.

احمدرضا فاطمی کیا ۰۴ فروردین ۱۴۰۲، ۱۵:۴۱

این هم پروژه

احمدرضا فاطمی کیا ۰۴ فروردین ۱۴۰۲، ۱۶:۱۰

سلام دوست عزیز ریسپانس ۱ که نشون بده به دیتابیس اضافه شده نشون نمیده

Hossein S ۰۴ فروردین ۱۴۰۲، ۱۷:۳۵

اصلا فکرنکنم به فانکشین add task برسه که بخواد کویری دیتا بیس اجرابشه؟

Hossein S ۰۴ فروردین ۱۴۰۲، ۱۷:۴۲

من تست کردم رسپانس یک رو هم نشون داد.

پروژه که پیوست کردم رو بررسی کن.

احمدرضا فاطمی کیا ۰۴ فروردین ۱۴۰۲، ۱۹:۰۶

اقای فاطمی کیا میشه شماره تماستونو بدید؟ مشکل من حل نشد


Hossein S ۰۴ فروردین ۱۴۰۲، ۱۹:۳۲

در تلگرام به این آیدی پیام بدید ریموت شم بررسی کنم:

ahmadreza_fatemikia@

احمدرضا فاطمی کیا ۰۴ فروردین ۱۴۰۲، ۱۹:۳۸

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

مشکلتون مربوط به میشه به لاین 35 از تصویری کدی که اولای تاپیک فرستادین که باید بصورت زیر تصحیحش کنید:

 if (!isset($taskTitle) || strlen($taskTitle) < 3)

تصویر مربوطه:

75ad-image.png

صادق برزگر ۰۵ فروردین ۱۴۰۲، ۲۲:۰۵

sسلام میشه انی دیسک بزنی روی سیستم من این مشکل داره ؟ولی مشکل این نیست

Hossein S ۰۵ فروردین ۱۴۰۲، ۲۲:۰۸

خب مشکلتون چی هست؟ بگید تا حلش کنیم.

صادق برزگر ۰۵ فروردین ۱۴۰۲، ۲۲:۲۸

مشک اینه که سورس کد من دست شما درست کارمیکنه ولی برای من داخل سیتم خودم ن؟ اگه انی دیسک میتونی بزنی مشکلمو حل کنید ممنون میشم

Hossein S ۰۶ فروردین ۱۴۰۲، ۱۷:۰۱

سلام،

سیستمتون برای اتصال مشکل دارد.

اگر سورسی که در بالا گذاشتید رو تغییری ندادید مشکلی ندارد ولی اگر تغییراتی داخلش داشتید باید مرحله به مرحله دیباگ کنید.

بجای enter از باتن Add New Task استفاده کنید و کدتون رو تغییر بدید و بگید زمانی که روی دکمه کلیک شد ...

مرحله ی بعدی باید یک آلرت بذارید یا console.log و مقداری که که در اینپوت وارد شده توسط خودتون رو دریافت کنید ببینید درست هست یا خیر.

مرحله بعدی این مقادیرو به سمت سرور ارسال کنید و پاسخی از سمت سرور ارسال کنید و response رو بصورت alert یا log چاپ کنید.

در این مراحل تب console رو هم باید ببینید که خطایی دارید یا نه.

اگر مشکل نرم افزاری وجود نداشته باشد متوجه مشکل خواهید شد. اگر مشکل نرم افزاری باشد که موضوع متفاوت خواهد بود.

در نهایت تمام این کار هارو کردید و نتونستید، سلوشن آخر این است که روی یک هاست آپلود کنید و دسترسی بدید تا روی هاست بررسی کنیم. چون یکبار سورستون رو روی سیستم تست کردیم و مشکلی نداشته و ویدیوی تست رو هم براتون ارسال شد.

محسن موحد ۰۷ فروردین ۱۴۰۲، ۱۹:۱۱

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

من این سناریو قبلا اجرا کردم یازم جواب ندادشاید من بلد نبودم درست اجراش کنم اگه ممکنه همین سناریو بالا رو برام فیلم بگیرید داخل واتساپ ارسال کنید

Hossein S ۰۸ فروردین ۱۴۰۲، ۱۳:۳۷

 سلوشن آخر این است که روی یک هاست آپلود کنید این کارو چجور انجام بدم ؟؟

Hossein S ۰۸ فروردین ۱۴۰۲، ۲۳:۲۵

جواب نداد که نمیشه، باید یا خطا بده و یا یک آلرتی داشته باشید. حتی اگر مقداری هم خروجی نده باز میشه نتایجی گرفت.

شما که تا این مرحله آموزش رو رفتید جلو، دیباگ کردن نباید کار سختی باشه چون فقط کافیه آلرت یا console.log بگیرید.

اگر هاست دارید روی یک هاست پروژه تون رو آپلود کنید اگر هاست ندارید که هیچی.

باتن Add New Task رو یک کلاس بهش اضافه کنید مثلا کلاس new-task:

<div class="button active new-task">Add New Taskdiv>

و داخل کدهای جاوااسکریپت انتهای صفحه اینها رو بنویسید: (داخل document.ready)

$('.new-task').click(function (e) {
    alert($('#TaskNameInput').val())
})

قبل از هرگونه تستی باید یکی از فولدرهارو از سمت چپ صفحه انتخاب کنید تا folder_id در آدرس بار ست شود.

بعد داخل اینپوت چیزی تایپ کنید و دکمه Add New Task رو کلیک کنید. همزمان تب console رو هم ببینید خطایی نداشته باشه. چون اگر خطای قرمز رنگی وجود داشته باشه کدها اجرا نمیشن. اگر کدها بدرستی اجرا شدن و مقدارو بدرستی آلرت گرفتید، مرحله بعدی نوشتن کدهای ajax هست ....

محسن موحد ۰۹ فروردین ۱۴۰۲، ۰۱:۴۷

f3c1-Screenshot from 2023-03-29 16-52-44.png

Hossein S ۰۹ فروردین ۱۴۰۲، ۱۵:۱۷

de58-Screenshot from 2023-03-29 16-51-51.png

Hossein S ۰۹ فروردین ۱۴۰۲، ۱۵:۱۷

خوب حالا این قسمت اجرا کردم

Hossein S ۰۹ فروردین ۱۴۰۲، ۱۵:۱۹

بازم نشدd806-Screenshot from 2023-03-29 21-12-06.png

Hossein S ۰۹ فروردین ۱۴۰۲، ۱۸:۴۴

16c7-Screenshot from 2023-03-29 21-11-08.png

Hossein S ۰۹ فروردین ۱۴۰۲، ۱۸:۴۴

73f5-Screenshot from 2023-03-29 21-51-06.png

Hossein S ۰۹ فروردین ۱۴۰۲، ۱۹:۲۹

بعنوان taskTitle باید $('#TaskNameInput').val() ارسال بشه.

سمت سرور هم پیام خطا رو چاپ نگیر. $taskTitle رو echo کنید تا ببینید چه چیزی ارسال شده است که وارد if میشود.

محسن موحد ۱۰ فروردین ۱۴۰۲، ۰۰:۲۹

خوب مقدار$taskTitleاکو گرفتم دارمشda91-Screenshot from 2023-03-30 06-18-54.png

Hossein S ۱۰ فروردین ۱۴۰۲، ۰۳:۵۰

d937-Screenshot from 2023-03-30 06-18-45.png

Hossein S ۱۰ فروردین ۱۴۰۲، ۰۳:۵۰

مقدار فولدر ایدی روهم اکو گرفتم دارمش7b64-Screenshot from 2023-03-30 06-21-59.png

Hossein S ۱۰ فروردین ۱۴۰۲، ۰۳:۵۲

5cc2-Screenshot from 2023-03-30 21-45-06.png

Hossein S ۱۰ فروردین ۱۴۰۲، ۱۸:۱۵

response رو اگر alert کردید تا اون قسمت همه چیز به درستی کار میکند.

همینطور ادامه بدید و از if که strlen رو چک میکند هم باید رد بشید اگر داخل if میوفته یکبار این رو هم چک کنید:

echo strlen($taskTitile);

alert بگیرید. از if که گذشتید وارد تابع addTask شوید و خط به خط از اونجا هم alert بگیرید و ببینید. برای مثال میتونید:

echo $stmt->rowCount();

ببینید تا این مرحله پیش اومدید، انتظار میره بقیه ی دیباگ رو هم بتونید انجام بدید، این تصاویری که گذاشتید همه نشون از درستی کار تا اون مرحله بوده و روی درستی کار نمیشه نظری داد. پس باید ادامه بدید تا به خطا و مشکلی بخورید. یا حلش کنید یا اگر نتونستید خطا رو بذارید.

خطای 500 رو هم بررسی کنید چه تغییری دادید یا وقتی به کدوم خط از کد سمت سرور میرسید این خطا رخ میدهد تا فیکسش کنید.

محسن موحد ۱۱ فروردین ۱۴۰۲، ۰۳:۰۸

این ارور جی کویری واسه چیه؟201f-Screenshot from 2023-03-31 23-23-45.png

Hossein S ۱۱ فروردین ۱۴۰۲، ۱۹:۵۷

خطا به این مورد مربوط نیست و علتش سمت سرور هست که 500 internal server error میگیرید.

تا زمانی که alert هارو نمایش دادید، عبارت هایی مثل hossein و 58 درست بوده، بعد ازون چه تغییری ایجاد کردید؟ (تنظیمات وب سرورو تغییر دادید یا ... ؟)

علت این خطای جی اس، بخاطر خطاییه که از سرور دریافت کرده و اتصالش موفق نبوده.

ببینید من تغییراتی داخل کدها انجام دادم سه فایل tpl-index.php و lib-tasks.php و ajaxHandler.php ضمیمه میکنم بهمراه فایل sql دیتابیس.

هم با Enter و هم با کلیک روی دکمه Add New Task میتونید تسک جدید اضافه کنید.

کدهای js به این شکل خواهد بود:

$(document).ready(function () {
    $('.new-task').click(function (e) {
        addTask();
    })
    $('#addFolderBtn').click(function (e) {
        var input = $('input#addFolderInput');
        if(input.val().length < 3) {
            alert('نام فولدر باید بزرگتر از 2 حرف باشد');
            return;
        }
        $.ajax({
            url: "process/ajaxHandler.php",
            method: "post",
            data: {action: "addFolder", folderName: input.val()},
            success: function (response) {
                if (response == 1) {
                    $(' ' + input.val() + '').appendTo('ul.folder_list');
                    input.val('');
                } else {
                    alert(response);
                }
            },
            error: function (jqXhr, textStatus, errorMessage) { // error callback
                alert('Error: ' + errorMessage);
            }
        });
    });
    $('#TaskNameInput').on('keypress', function (e) {
        if (e.which == 13) {
            addTask();
        }
    });
});
function addTask() {
    const folderId = <?= $_GET['folder_id'] ?? 'undefined' ?>;
    const taskTitle = $('#TaskNameInput').val();
    if (folderId === undefined) {
        alert('Folder ID is empty!');
        return;
    }
    if(taskTitle.length < 3) {
        alert('عنوان تسک باید بزرگتر از 2 حرف باشد');
        return;
    }
    $.ajax({
        url: "process/ajaxHandler.php",
        method: "post",
        data: {action: "addTask", folderId: folderId, taskTitle},
        success: function (response) {
            if (response == 1) {
                location.reload();
                return;
            }
            alert(response);
        },
        error: function (jqXhr, textStatus, errorMessage) { // error callback
            alert('Error: ' + errorMessage);
        }
    });
}

یه بکاپ از کدهای خودتون بگیرید و کدهایی که من نوشتمو تست کنید. یک دیتابیس جدید ایجاد کنید و فایلی که ضمیمه کردمو import کنید و روی دیتابیس جدید تست بگیرید.

بهترین پاسخ
محسن موحد ۱۳ فروردین ۱۴۰۲، ۰۰:۱۳