PDA

View Full Version : سوال: Notice: Undefined index: Error



10david
چهارشنبه 13 خرداد 1388, 20:44 عصر
سلام من یه فرم Login نوشته بودم که تا چند وقت پیش درست کار می کرد به دلایلی مجبور شدم ویندوزمو دوباره نصب کنم حالا که با همون کد ها صفحه رو باز میکنم این error رو میده
Notice: Undefined index: LogedIn in C:\phproot\Index.php on line 32
متغیر LogedIn یه flag از نوع session .اگه کد ها مشکل داره چرا قبلا این خطا نبود؟
من از نرم افزار usb web server استفاده میکنم.

امیـرحسین
چهارشنبه 13 خرداد 1388, 21:20 عصر
شما یک آرایه رو استفاده کردید که هنوز دارای مقدار نیست. مثلا یه چیزی شبیه این:

if( $_SESSION['something'] == "SomeThing" )
که ایندکس something برای SESSION تعیین نشده.
اینکه ارور رو قبلا نمیگرفتید بخاطر نوع دریافت errorهاست. ارور از نوع Notice مشکلی ایجاد نمی کنه ولی وجود داره. شما می تونید نحوه دریافت errorها رو تغییر بدید. اینها رو مطالعه کنید:

error_reporting (http://ir.php.net/manual/en/function.error-reporting.php)
Error Handling and Logging (http://ir.php.net/manual/en/book.errorfunc.php)

درضمن بعضی ارورهای Notice تو نسخه های مختلف متفاوت هستند. مثلا تو PHP5 اضافه شدند!

10david
چهارشنبه 13 خرداد 1388, 21:52 عصر
شما یک آرایه رو استفاده کردید که هنوز دارای مقدار نیست. مثلا یه چیزی شبیه این:

if( $_SESSION['something'] == "SomeThing" )
که ایندکس something برای SESSION تعیین نشده.
اینکه ارور رو قبلا نمیگرفتید بخاطر نوع دریافت errorهاست. ارور از نوع Notice مشکلی ایجاد نمی کنه ولی وجود داره. شما می تونید نحوه دریافت errorها رو تغییر بدید. اینها رو مطالعه کنید:

error_reporting (http://ir.php.net/manual/en/function.error-reporting.php)
Error Handling and Logging (http://ir.php.net/manual/en/book.errorfunc.php)

درضمن بعضی ارورهای Notice تو نسخه های مختلف متفاوت هستند. مثلا تو PHP5 اضافه شدند!
مرسی امیر حسین جان.دقیقا همین کارو کردم.چجوری میشه ایندکس رو برای Session تعیین کرد ؟ اینکه ما ارور رو نشون ندیم مثل این میمونه که بیماری رو با مسکن درمان کنیم.
یه مشکل دیگه هم هست وقتی از تابع isset() هم استفاده کردم عناصر فرم رو نمیشناسه.برنامه هم درست کار نمیکنه.بخدا اینجوری نبود چه غلطی کردم این ویندوز رو دست زدم آخه نرم افزار همون نرم افزاره ویندوز همین ویندوزه کد همون کده پس چه مرگشه راستی دو سه ماه پیش هم اینجوری شده بود یکم با کد هام قسمت session هاش وز رفتم درست شد ولی یادم نمیاد چیکار کردم.راستی این error_reporting تو هر صفحه باید نوشته شه؟نمیشه یه دفعه برای تمام صفحه ها ست اش کرد؟

امیـرحسین
چهارشنبه 13 خرداد 1388, 22:00 عصر
یا باید همه مقادیری که ممکنه در اسکریپت مقدار بگیرند رو اول اسکریپت مقدار بدیم مثلا خالی که این عملا برای SESSION کار نمی کنه. روش صحیحی اینه که قبل از استفاده از متغیرهای، وجود اونها رو چک کنیم. با توابعی مثل isset ، empty .
برای آرایه ها، array_key_exists هم میشه استفاده کرد.

if( !empty($_SESSION['something']) && $_SESSION['something'] == "SomeThing" )
if( isset($_SESSION['something']) && $_SESSION['something'] == "SomeThing" )
if( array_key_exists('something' , $_SESSION) && $_SESSION['something'] == "SomeThing" )
اینم بگم که isset با empty! تفاوت مهمی داره!

10david
چهارشنبه 13 خرداد 1388, 22:27 عصر
یا باید همه مقادیری که ممکنه در اسکریپت مقدار بگیرند رو اول اسکریپت مقدار بدیم مثلا خالی که این عملا برای SESSION کار نمی کنه. روش صحیحی اینه که قبل از استفاده از متغیرهای، وجود اونها رو چک کنیم. با توابعی مثل isset ، empty .
برای آرایه ها، array_key_exists هم میشه استفاده کرد.

if( !empty($_SESSION['something']) && $_SESSION['something'] == "SomeThing" )
if( isset($_SESSION['something']) && $_SESSION['something'] == "SomeThing" )
if( array_key_exists('something' , $_SESSION) && $_SESSION['something'] == "SomeThing" )
اینم بگم که isset با empty! تفاوت مهمی داره!

isset رو برای چک کردن کلید submit فرم بکار بردم ولی میگه اصلا همچین کلیدی وجود نداره.
میشه بگی Array_key_exists چیه؟بنظرت web server رو عوض کنم درست نمیشه؟
واسه کلید submit اینو میگه :
Notice: Use of undefined constant regedit - assumed 'regedit' in C:\phproot\tchr\statuesreg.php on line 3
regedit اسم کلید submit مه.

امیـرحسین
چهارشنبه 13 خرداد 1388, 22:45 عصر
array_key_exists (http://ir.php.net/manual/en/function.array-key-exists.php) چک میکنه که آیا فلان Key در آرایه موجوده یا نه....
دارید فرم ارسال می کنید؟ این رو اجرا کنید (مثلا از متد POST استفاده کردید):

echo "<pre>";
print_r($_POST);
die("</pre>");

10david
چهارشنبه 13 خرداد 1388, 23:03 عصر
array_key_exists (http://ir.php.net/manual/en/function.array-key-exists.php) چک میکنه که آیا فلان Key در آرایه موجوده یا نه....
دارید فرم ارسال می کنید؟ این رو اجرا کنید (مثلا از متد POST استفاده کردید):

echo "<pre>";
print_r($_POST);
die("</pre>");
این چی بود؟وقتی اجراش کردم هیچی از کدهام اجرا نشد فقط نوشت :
Array
(
)
آره بالای تگ های html کد php نوشتم گفتم اگه کلید submit زده شد این کارا رو بکن ولی میگه کلید submit کیلو چنده. مطمئنی ایراد از Apache یا web server نیست ؟

امیـرحسین
پنج شنبه 14 خرداد 1388, 13:35 عصر
اون کدها، اطلاعات آرایه POST_$ رو نمایش میده. شما باید بعد از اجرای صفحه اون رو وارد می کردید. این رو قرار بدید:

echo "<pre style='border:3px solid #999; margin:20px; padding:10px;'>";
print_r($_POST);
echo "</pre>";

rasoolgh1
پنج شنبه 14 خرداد 1388, 15:42 عصر
اگه مشکل دارین که error ها رو نشون نده میتونین @ پوشت دستوراتی که این طوری هست بزارین مثل این

@extract($_POSt);

10david
پنج شنبه 14 خرداد 1388, 19:27 عصر
اون کدها، اطلاعات آرایه POST_$ رو نمایش میده. شما باید بعد از اجرای صفحه اون رو وارد می کردید. این رو قرار بدید:

echo "<pre style='border:3px solid #999; margin:20px; padding:10px;'>";
print_r($_POST);
echo "</pre>";

مرسی امیر حسین جان مشکلم حل شد.

versaPHP
دوشنبه 16 مرداد 1391, 01:48 صبح
منم به این مشکل برخوردم ، برای اینکه بقیه به این مشکل برنخورند :
1- فایل php.ini رو بازکنید
2- خط ~516 مربوط به error_reporting رو برابر با یکی از مقادیر زیر قرار بدید که توصیه ی من اولیه :


E_ALL & ~E_NOTICE
E_ALL | E_STRICT
E_ALL & ~E_DEPRECATED

احتمالا کسایی که این مشکلو دارند مقدار رو روی دومی قرار دادند .

:چشمک: