تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ علیرضا ابراهیمی
هشدار Undefined index زمان استفاده از مقادیر صفت name
محسن موحد حل شده توسط محسن موحد

سلام و عرض ادب خدمت استاد صالحی عزیز... خدمتتون عرض کنم زمانی که از طریق 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>

 

سلام.

علت این خطا واسه اینه که ایندکس‌های 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'] ."سال است.";
}

 

بهترین پاسخ
محسن موحد ۱۵ فروردین ۱۳۹۹، ۰۸:۱۸