🔥 ۴۰ درصد تخفیف ثبت‌نام دوره‌ها قبل از افزایش قیمت‌ها
۰ ثانیه
۰ دقیقه
۰ ساعت
۵۲ مهرورز نیلوفری
اضافه نشدن تسک به دیتابیس
جامعه پی اچ پی ایجاد شده در ۰۲ فروردین ۱۴۰۲

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

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

مهرورز نیلوفری ۰۲ فروردین ۱۴۰۲، ۲۰:۱۴

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

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

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

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


مهرورز نیلوفری ۰۲ فروردین ۱۴۰۲، ۲۱:۱۵

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

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

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

مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۰۰:۱۸

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


مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۰۰:۱۹
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();
}##########################################################


مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۰۰:۴۵
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;


مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۰۰:۴۵

حسین عزیز

ببین متد 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;


مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۱۳:۴۶

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


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

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

مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۱۴:۰۶

حسین عزیز

در این فانکشن متغیر 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();
}###################


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

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

مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۱۵:۳۰

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

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();
}###################
خانم پرمیدا نوبختی ۰۳ فروردین ۱۴۰۲، ۱۵:۵۷

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

مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۱۶:۳۰

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

مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۱۷:۱۷

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

مهرورز نیلوفری ۰۳ فروردین ۱۴۰۲، ۱۷:۲۰

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

خانم پرمیدا نوبختی ۰۴ فروردین ۱۴۰۲، ۱۰:۲۵

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

مهرورز نیلوفری ۰۴ فروردین ۱۴۰۲، ۱۵:۰۵

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

خانم پرمیدا نوبختی ۰۴ فروردین ۱۴۰۲، ۱۵:۴۱

این هم پروژه

خانم پرمیدا نوبختی ۰۴ فروردین ۱۴۰۲، ۱۶:۱۰

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

مهرورز نیلوفری ۰۴ فروردین ۱۴۰۲، ۱۷:۳۵

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

مهرورز نیلوفری ۰۴ فروردین ۱۴۰۲، ۱۷:۴۲

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

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

خانم پرمیدا نوبختی ۰۴ فروردین ۱۴۰۲، ۱۹:۰۶

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


مهرورز نیلوفری ۰۴ فروردین ۱۴۰۲، ۱۹:۳۲

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

ahmadreza_fatemikia@

خانم پرمیدا نوبختی ۰۴ فروردین ۱۴۰۲، ۱۹:۳۸

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

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

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

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

75ad-image.png

پروشات ابریشمی ۰۵ فروردین ۱۴۰۲، ۲۲:۰۵

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

مهرورز نیلوفری ۰۵ فروردین ۱۴۰۲، ۲۲:۰۸

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

پروشات ابریشمی ۰۵ فروردین ۱۴۰۲، ۲۲:۲۸

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

مهرورز نیلوفری ۰۶ فروردین ۱۴۰۲، ۱۷:۰۱

سلام،

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

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

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

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

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

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

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

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

افشیده کهنمویی ۰۷ فروردین ۱۴۰۲، ۱۹:۱۱

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

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

مهرورز نیلوفری ۰۸ فروردین ۱۴۰۲، ۱۳:۳۷

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

مهرورز نیلوفری ۰۸ فروردین ۱۴۰۲، ۲۳:۲۵

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

شما که تا این مرحله آموزش رو رفتید جلو، دیباگ کردن نباید کار سختی باشه چون فقط کافیه آلرت یا 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

مهرورز نیلوفری ۰۹ فروردین ۱۴۰۲، ۱۵:۱۷

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

مهرورز نیلوفری ۰۹ فروردین ۱۴۰۲، ۱۵:۱۷

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

مهرورز نیلوفری ۰۹ فروردین ۱۴۰۲، ۱۵:۱۹

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

مهرورز نیلوفری ۰۹ فروردین ۱۴۰۲، ۱۸:۴۴

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

مهرورز نیلوفری ۰۹ فروردین ۱۴۰۲، ۱۸:۴۴

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

مهرورز نیلوفری ۰۹ فروردین ۱۴۰۲، ۱۹:۲۹

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

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

افشیده کهنمویی ۱۰ فروردین ۱۴۰۲، ۰۰:۲۹

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

مهرورز نیلوفری ۱۰ فروردین ۱۴۰۲، ۰۳:۵۰

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

مهرورز نیلوفری ۱۰ فروردین ۱۴۰۲، ۰۳:۵۰

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

مهرورز نیلوفری ۱۰ فروردین ۱۴۰۲، ۰۳:۵۲

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

مهرورز نیلوفری ۱۰ فروردین ۱۴۰۲، ۱۸:۱۵

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

مهرورز نیلوفری ۱۱ فروردین ۱۴۰۲، ۱۹:۵۷

خطا به این مورد مربوط نیست و علتش سمت سرور هست که 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 = '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 کنید و روی دیتابیس جدید تست بگیرید.

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