آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در چک کردن session (پروژه note بخش 2)

Morteza  8 سال پیش  8 سال پیش
+1 0

سلام دوستان
در فایل done.php (از این فایل جهت تغییر وضعیت یادداشت به انجام شده یا انجام نشده استفاده می شود) برای اینکه مطمئن بشم که کاربر هنوز توی سیستمه از شرط زیر استفاده کردم :

if (!isset($_GET['id']) && !isset($_SESSION['user_id'])) {
exit;
} else {
$noteId = $_GET['id'];
$userId = $_SESSION['user_id'];
}

توی این شرط اگر SESSION['user_id'] و GET['id'] وجود نداشته باشه از فایل خارج میشه ،ولی در هنگام اجرا خطا میده!
متن خطا :

Query: UPDATE x_note SET done = NOT done WHERE note_id = 4 AND user_id = failed due to You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

ولی وقتی کد بالا رو به صورت زیر تغییر میدم مشکل حل میشه و هیچ خطایی چاپ نمیشه :

if (isset($_GET['id']) && isset($_SESSION['user_id'])) {
$noteId = $_GET['id'];
$userId = $_SESSION['user_id'];
} else {
exit;
}

در اصل این 2 تا تکه کد از لحاظ منطق یکسان اند، ولی در کد اولی ابتدا نبودن چک میشود ولی در کد دوم اول بودن چک میشود.
ممنون میشم یکی از دوستان و اساتید راهنمایی کنند.

 برای این سوال 1 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
امین علیپور  8 سال پیش
+4 0

 پاسخ صحیح

تو کد اولی شما گفتین اگه id ست نشده بود و اگه user_id ست نشده بود بیاد exit کنه . در شرط هایی که از and یا && استفاده میشه اگه شرط اولی false (یعنی!isset($_GET['id']))بشه دیگه شرط بعدی رو چک نمیکنه و میره سراغ else و حالا شما تو else گفتین که مقدار noteId بشه id get  و مقدار userId  بشه مقدار user_id سشن . خب الان ما به اینجا میرسیم شاید کاربر مقدار get رو ست کرده بود ولی تو سایت لاگین نکرده بود و user_id تو سشن براش ست نشده بود پس شرط اول فالس میشه و میاد سراغ else مقدار noteId همونی که ست کرده بود هست ومقدار userId خالی میشه چون اصن کاربر لاگین نکرده و user_id سشن براش ست نشده پس مقدار خالی براش گذاشته میشه و ما خطای sql میبینیم

+2 0
ممنون از راهنمایی تون ،بنده توجه و دقت کافی به خرج ندادم ،در کد اول باید به جای and از or استفاده میشد. (8 سال پیش)
+2 0
بله درسته باید از or استفاده کنید (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .