شما هم ساعت ها و ساعت ها برای حل خطای Undefined index وقت گذاشته اید ؟

Undefined-index

قبل از هر چیز باید در مورد علت ایجاد این مشکل بیشتر بدانیم . ابتدا باید کامل درک کنید که این یک ‘Error’ یا خطا نیست که باعث ایجاد مشکل گردد و فقط یک ‘Notice’ یا همان اطلاعیه است . یک اطلاعیه تا زمانی که بحرانی نباشد می توان نادیده گرفت ولی خطاها باید رفع گردند . زمانی که یک اطلاعیه در مرورگر نمایش داده می شود بقیه خروجی کدها نیز نمایش داده می شود و مانند خطاها مانع اجرای بقیه کدها نمی گردد .

اکنون بیایید به موضوع خودمان بپردازیم ، زمانی که یک ‘Undefined index’ نمایش داده می شود بهترین کار این است که مشکل را برطرف کنید تا اینکه نادیده بگیرید .

.

چه طور مشکل را برطرف کنیم ؟

پاسخ فقط یک کلام است isset !

تابع isset در PHP تعیین میکند کدام متغیر ست شده و کدام (NULL) یا خالی است. خروجی این تابع یک مقدار Boolean است که در زمانی که متغیر ست شده باشد مقدار true یا صحیح و اگر متغیر تعریف نشده باشد مقدار false یا ناصحیح بر میگرداند .

برای کسب اطلاعات بیشتر در مورد تابع isset می توانید از خودآموز PHP استفاده نمائید .

مثال :

اجازه بدید یک مثال بزنیم .

کد HTML زیر مربوط است به فرم نظرات یک وبلاگ.

<form name="myform" id="myform" method="post" action="add_comment.php">
    <h2>Please leave a comment:</h2>
    <input type="text" id="username" name="username" value="Enter Username" /><br />
    <input type="text" id="email" name="email" value="Enter Email" /><br />
    <textarea id="comment" name="comment">Enter Comment</textarea><br />
    <br /><br />
    <input type="checkbox" id="notify_box" name="notify_box" value="Y">
    Notify me when a new post is published. <br />
    <br />
    <input type="submit" value="Post Comment">
</form>

این جا یک فایل ‘add_comment.php’ داریم که اطلاعات ارسالی از فرم نظرات را میگیرد

<?php
    $uName  = $_POST['username'];
    $eMail  = $_POST['email'];
    $comment= $_POST['comment'];
    $notify = $_POST['notify_box'];
    // send the data to the database
?>

آنچه اتفاق می افتد این است که در زمانی که تیک چک باکس زده شود کد به خوبی کار می کند . اما زمانی که چک نخورده باشد ، من یک هشدار دریافت میکنم.

Warning: Undefined index

بنابراین برای حل این مشکل بیایید از تابع جادویی استفاده کنیم . اکنون کد اینطور ظاهر میگردد .

<?php
    $notify = "";
    $uName  = $_POST['username'];
    $eMail  = $_POST['email'];
    $comment= $_POST['comment'];
    if(isset($_POST['notify_box'])){ $notify = $_POST['notify_box']; }
    // send the data to the database
?>

اکنون چه اتفاقی می افتد ؟ ، من تیک چک باکس را می زنم بنابراین متغیر چک باکس توسط شرایطی ست میگردد . و اگر شرایط true باشد مقدار چک باکس ارسال می گردد و اگر چک باکس تیک نخورده باشد متغیر ارسال نمی گردد .

اگر از آرایه $_POST و یا $_SESSION استفاده میکنید نیز این خطا توسط همین تابع قابل حل است .

اما در بعضی موارد خطاهای بدون ضرر می توانند نادیده گرفته شوند

به عنوان مثال ، من یک صفحه دارم که در سه حالت زیر قابل دسترسی است

www.someexample.com/comments.php

www.someexample.come/comments.php?action=add

www.someexample.com/comments.php?action=delete

تمام این آدرس ها به یک صفحه می روند اما هر دفعه وظیفه متفاوتی دارند .

بنابراین زمانی که من سعی میکنم یه صفحه از طریق آدرس URL اول دسترسی داشته باشم تا زمانی که پارامتر ‘action’ ست نشده باشد یک ‘Undefined index’ به من می دهد .

ما می توانیم این مشکل را نیز از طریق تابع isset حل نمائیم. اما در این مورد ما می توانید این خطا را نادیده گرفته و مخفی نیز نمائیم

error_reporting(E_ALL ^ E_NOTICE);

شما همچنین می توانید گزارش خطا را توسط فایل php.ini یا .htaccess خاموش کنید ، اما اگر در مرحله تست یک کد هستید این یک کار عاقلانه نیست .

این یک چاره ساده دیگر برای حل مشکلات عمومی در PHP می باشد . امیدوارم که مفید باشد.



اشتراک در شبکه هاي اجتماعي :

مطالب مرتبط با اين نوشته Related to this post