هشدار Undefined index زمان استفاده از مقادیر صفت name

پرسیده شده
فعالیت 1485 روز پیش
دیده شده 1390 بار
0

سلام و عرض ادب خدمت استاد صالحی عزیز... خدمتتون عرض کنم زمانی که از طریق if و در آرایه پیش فرض GET_$ اندیس های اونو که همون مقادیر صفت name درون تگ input و فرم مربوطه تعیین کردم ، قرار می دهم چه زمانی که با اپراتور && و چه زمانی که با اپراتور || اونها رو در شرط مربوطه میارم، دچار Notice های Undefined index میشم. البته زمانی که فرم ارسال میشه اطلاعات هم کاملا درست برمی گرده با متد GET... و حتی پس از ارسال فرم اون Notice ها هم میره از صفحه... اما قبل از اینکه فرم پر بشه و ارسال بشه این Notice ها وجود داره... من عکس صفحه و سورس کدهام رو میفرستم بررسی بفرمایید مشکل کجاست... ممنون از شما بزرگوار

 

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>GET method</title>
    <link rel="stylesheet" href="style.css"/>
</head>
<body>
    
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
        <label for="">نام 
            <input type="text" name="Name">
        </label>
        <label for="">سن 
            <input type="text" name="age">
        </label>
        <input type="submit" value="ارسال">
    </form>
    <?php
    if($_GET["Name"] || $_GET["age"]){
        echo "خوش آمدید" . $_GET["Name"] .'<br>';
        echo "سن شما". $_GET['age'] ."سال است.";
    }
    ?>
</body>
</html>

 

فایل پیوست

علیرضا ابراهیمی
علیرضا ابراهیمی

15 فروردین 99

4
حذف شده

سلام.

علت این خطا واسه اینه که ایندکس های Name و age داخل $_GET اصلا تعریف نشدن(وقتی صفحه باز میشه این دو ایندکس مقدار دهی نشدن).

برای چک کردن وجود داشتن یک متغیر میتونید از تابع isset استفاده کنید.

کد درست به شکل زیر هست:

if(isset($_GET["Name"], $_GET["age"])){
    echo "خوش آمدید" . $_GET["Name"] .'<br>';
    echo "سن شما". $_GET['age'] ."سال است.";
}

جفتشون اگر وجود داشت، شرط اجرا میشه. اگر از || بخواید استفاده کنید، طبیعتا باید از دوتا isset مجزا استفاده کنید.

البته توو این نوع شرط ها(با توجه به مثال شما که نام و سن باید نمایش داده بشه) جدای ازینکه باید متغیر تعریف شده باشه، باید چک کنید که متغیر ها دارای رشته ی خالی نباشند.

مثال زیرو اگر ببینید متوجه میشید که تابع isset رشته ی خالی رو هم جزو وجود داشتن متغیر محسوب میکنه:

$_GET["Name"] = '';
$_GET["age"] = '';
if(isset($_GET["Name"], $_GET["age"])){
    echo "خوش آمدید" . $_GET["Name"] .'<br>';
    echo "سن شما". $_GET['age'] ."سال است.";
}

 

بنابراین کنارش از تابع empty هم استفاده میشه:

if(isset($_GET["Name"], $_GET["age"]) && !empty($_GET['Name']) && !empty($_GET['age'])) {
    echo "خوش آمدید" . $_GET["Name"] .'<br>';
    echo "سن شما". $_GET['age'] ."سال است.";
}

 

یه نکته ی دیگه هم بگمو تمام:

بجای اینکه هم از isset استفاده کنید هم از empty میتونید فقط از empty استفاده کنید، چون تابع empty قبلش چک میکنه متغیر وجود داره یا نه. یعنی empty شرط زیرو چک میکنه:

!isset($var) || $var == false

با توجه به $var == false بنابراین اگر مقادیر ارسالی شما ۰ یا false نیست(چون شاید بعضی جاها مقدار صفر یا false داخل متغیر میریزید و چک میکنید) در بقیه ی موارد میتونید از تابع empty بتنهایی استفاده کنید.

 

کد نهایی:

if(!empty($_GET['Name']) && !empty($_GET['age'])) {
    echo "خوش آمدید" . $_GET["Name"] .'<br>';
    echo "سن شما". $_GET['age'] ."سال است.";
}

 

فایل پیوست

محسن موحد

توسط

محسن موحد

15 فروردین 99

حذف شده
ممنون از شما جناب موحد... در واقع تا این فصل که پیش رفتم isset ، empty و... تدریس نشده و استاد هم دقیقا همین کد رو بدون notice اجرا کردن... من حرف شما رو قبول دارم که در این شرط باید از isset ، empty و... استفاده کنیم، اما سورس کدهای بنده کاملا براساس تدریس این جلسه آموزشی هست که استاد ارائه دادند...
علیرضا ابراهیمی

15 فروردین 99

حذف شده
مخلصم. آخر جلسه توابع isset و empty گفته میشه. اما علتی که داخل ویدیو خطا نمیده اینه که، استاد url خالی رو روی Adress Bar اینتر نمیکنن یا رفرش میکنن(آدرسی که کوئری استرینگ ها قبلا ست شدن) و یا روی دکمه ی سابمیت کلیک میکنن. با اینکار اگر name و age هم خالی باشن، باز هم این دو ایندکس ارسال میشن و با یک رشته خالی مقدار دهی میشن. انتهای ویدیو رو ببینید، خطای undefined نمایش داده میشه.
محسن موحد

15 فروردین 99

حذف شده
بسیار عالی ممنونم جناب موحد... ادامه ویدئو را می بینم حتما... از پاسخ دهی سریع شما سپاسگزارم...
علیرضا ابراهیمی

15 فروردین 99

حذف شده
سلام. بله در آخر ویدیو کامل توضیح داده شد و استاد یک مورد دیگه رو هم فرمودن $_GET['age'] != "" که گفتن برای تمیزی کد از همون !empty استفاده بشه
Mohsen Ghorbani

12 شهریور 00