/
  • خواندن متغیر های داخل یک فانکشن

  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی خواندن متغیر های داخل یک فانکشن
    نویسنده پیام
    cyletech غایب
    علیرضا اسکندرپور شوفری
    *****

    ارسال‌ها: 2,197
    تاریخ عضویت: ۱۳۸۸ فروردين ۸
    اعتبار: 42
    تشکرها : 1258
    ( 2240 تشکر در 1089 ارسال )
    ارسال: #1
    خواندن متغیر های داخل یک فانکشن
    سلام،

    من دو سوال زیر رو دارم.

    1. من سه انتخاب و با نام های gender1 تا gender3 دارم و در روبروی هر یک از آنها یک فیلد با نام first_field تا third_field دارم. در انتخاب ها دو مقدار وجود داره. یکی boy و دیگری girl . میخوام چک کنم که اگر برای فیلد مثلا اولی گزینه فرضاً girl انتخاب شد مقداری که در فیلد اولی قرار داده رو در متغیر $firl_names وارد کنه و به همین ترتیب. پس در نهایت متغیر $boy_names یک آرایه میشه با سه مقدار!
    من برای اینکار اومدم از switch استفاده کردم و کدی مثل زیر نوشتم:
    کد PHP:
    swtich$_POST['gender1'] ){
    case 
    'boy':
    $boy_names = array( => "$first_field);
    break;

    case 
    'girl':
    $girl_names = array( => "$first_field);
    break;

    default:
    break;

    مشکلی من هنوز با طرز نوشتن این کد مشکلی پیدا نکردم چون قبل اون، فانکشن ShowResult حتی اگر از global برای دو متغیر boy_names و girl_names استفاده کنم باز خطا میده که این دو متغیر شناخته شده نیست. پس اینجا سوال من این است که چطور میتونم متغیر های داخل یک function یا حتی خارج اون اما درون یک if یا ... رو فراخوانی کنم در یکجای دیگر؟

    2. نحوه صحیح وارد مقدار بصورت آرایه به یک متغیر چگونه است؟ آیا نیاز هست که اول بیاییم متغیر رو با آرایه با مقدار خالی تعریف کنیم؟ یعنی چیزی مثل زیر:
    کد PHP:
    $boy_names = array();
    $girl_names = array(); 

    3. حتماً مشکل اصلی من رو متوجه شدید. مثلا من آگاهی از فلان چیز ندارم درست مثل طرز خواندن کد های php که در تاپیکی عرض کردم.

    ممنونم
    ۱۳۸۹ خرداد ۹ ۰۹:۵۰ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    oia آفلاین
    محمد ثانی
    *****

    ارسال‌ها: 2,014
    تاریخ عضویت: ۱۳۸۷ آذر ۲۶
    اعتبار: 66
    تشکرها : 2330
    ( 2091 تشکر در 1290 ارسال )
    ارسال: #2
    RE: خواندن متغیر های داخل یک فانکشن
    اینجا که من زیاد نفهمیدم برنامت چی کار می کنه!
    ---------
    متغییر های تو فانکشن که با فانکشن شروع می شن و با فانکشن تموم مگه اینکه تابع اون مقدار هارو برگردونه غیر این که بی معنی که اصلا به متغییر های توی تابع دسترسی داشته باشیم!!!
    ----

    برای آراییه هم چون در طول برنامه بهش مقدار می دی ظاهرا بهتره به این صورت عمل کنی!
    کد PHP:
    $ary = array();

    //---
    $ary[1] = 'value 01';

    //--
    $ary[2] = 'value 02';

    //--
    //... 

    نقل قول: پس در نهایت متغیر $boy_names یک آرایه میشه با سه مقدار!
    یعنی هرسه گزینه رو باید مثه هم وارد کنه که boy می شه سه تا!!!

    ----
    ShowResult چه تابعیه؟!

    ----
    مثلا این چطوره؟!
    کد PHP:
    $boy = array();
    $girl = array();

    //---
    if($post['g1'] == 'boy')
        
    $boy[1] = 'v1';
    elseif(
    $post['g1'] == 'girl')
        
    $girl[1] = 'v1';

    //---
    if($post['g2'] == 'boy')
        
    $boy[2] = 'v2';
    elseif(
    $post['g2'] == 'girl')
        
    $girl[2] = 'v2';

    //---
    if($post['g3'] == 'boy')
        
    $boy[3] = 'v3';
    elseif(
    $post['g3'] == 'girl')
        
    $girl[3] = 'v3';


    //---
    echo print_r($boy1).'<HR>'.print_r($gril1); 
    (آخرین ویرایش در این ارسال: ۱۳۸۹ خرداد ۱۰ ۰۸:۴۳ عصر، توسط oia.)
    ۱۳۸۹ خرداد ۱۰ ۰۸:۰۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    cyletech غایب
    علیرضا اسکندرپور شوفری
    *****

    ارسال‌ها: 2,197
    تاریخ عضویت: ۱۳۸۸ فروردين ۸
    اعتبار: 42
    تشکرها : 1258
    ( 2240 تشکر در 1089 ارسال )
    ارسال: #3
    RE: خواندن متغیر های داخل یک فانکشن
    من طور دیگه این راهی که تو میگی رو رفتم اما جواب نداد اما باز اینم امتحان کردم و خروجیش Array() بود! این کل کد منه.
    کد PHP:
    <?php

    echo<<<html
    <html>
    <head>
    <title>صفحه تمرین علیرضا - دسته بندی نام ها</title>
    <link rel="stylesheet" href="style.css" title="css for all contents" media="all" />
    </head>
    <body>
    html;

    //Variables
    $first_field $_POST['first_field'];
    $second_field $_POST['second_field'];
    $third_field $_POST['third_field'];

        
    //Check if there is an error show it
    function CheckError(){
        global 
    $first_field$second_field$third_field;
        
        if( isset( 
    $_POST['finished'] ) ){
            
            if( empty( 
    $first_field ) || empty( $second_field ) || empty( $third_field ) ){
                 echo( 
    "<p><strong>خطا:</strong> پر کردن فیلد های ستاره دار الزامی است</p><p><input type=\"submit\" value=\"بازگشت\" class=\"submit\" onclick=\"history.go(-1)\" /></p>" );
            }
            
            elseif( 
    is_numeric($first_field) || is_numeric($second_field) || is_numeric($third_field) ){
                 echo( 
    "<p><strong>خطا:</strong> مقادیر فیلد ها نمی تواند عدد باشد</p><p><input type=\"submit\" value=\"بازگشت\" class=\"submit\" onclick=\"history.go(-1)\" /></p>" );
            }
            
            else{
                
    ShowResult();
            }
        }
    }

    CheckError();
        

    //If there are no errors show result
    function ShowResult(){
        global 
    $first_field$second_field$third_field;
            
    $boy_names = array();
    $girl_names = array();

    //---
    if($_POST['gender1'] == 'boy')
        
    $boy_names[1] = "$first_field";
    elseif(
    $_POST['gender1'] == 'girl')
        
    $girl_names[1] = "$first_field";

    //---
    if($_POST['gender2'] == 'boy')
        
    $boy_names[2] = "$second_field";
    elseif(
    $_POST['gender2'] == 'girl')
        
    $girl_names[2] = "$second_field";

    //---
    if($_POST['gender3'] == 'boy')
        
    $boy_names[3] = "$third_field";
    elseif(
    $_POST['gender3'] == 'girl')
        
    $girl_names[3] = "$third_field";


    //---
    echo print_r($boy_names1).'<HR>'.print_r($girl_names1); 
        
        
    $n_names = array( 'نام های پسر' => $boy_names'نام های دختر' => $girl_names );
        
        
        foreach( 
    $n_names as $titles => $names ){
            echo( 
    "<h2>{$titles}</h2>" );
            
            echo( 
    "<ul>" );
            foreach( 
    $names as $numbers => $list ){
                echo( 
    "<li>{$list}</li>" );
            }
            echo( 
    "</ul>" );
        }
        
    }

    function 
    GetSex(){
        


        
        
    /*$boy_names = array();
        $girl_names = array();
        
        switch( $_POST['gender1'] ){
            case 'boy':
            $boy_names = "$first_field";
            break;
            
            case 'girl':
            $girl_names = "$first_field";
            break;
            
            default:
            break;
        }
        
        switch( $_POST['gender2'] ){
            case 'boy':
            $boy_names = "$second_field";
            break;
            
            case 'girl':
            $girl_names = "$second_field";
            break;
            
            default:
            break;
        }
        
        switch( $_POST['gender3'] ){
            case 'boy':
            $boy_names = "$third_field";
            break;
            
            case 'girl':
            $girl_names = "$third_field";
            break;
            
            default:
            break;
        }*/
    }

    ?>
    ۱۳۸۹ خرداد ۱۱ ۱۰:۰۷ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    oia آفلاین
    محمد ثانی
    *****

    ارسال‌ها: 2,014
    تاریخ عضویت: ۱۳۸۷ آذر ۲۶
    اعتبار: 66
    تشکرها : 2330
    ( 2091 تشکر در 1290 ارسال )
    ارسال: #4
    RE: خواندن متغیر های داخل یک فانکشن
    به نظرم که باید برنامه این شکلی باشه:
    یه فرم که سه تا فیلد داره برای اینکه اسم ( نام کوچک یا یه چیزی تو این مایه ها ) وارد به شه و برای هر فیلد هم با رادیو باتن مشخص به شه که این اسم پسره یا دختر!!! Blush
    حالا تو می خوای که توی یک آرایه این اسامی رو طبق جنسیت تو دوتا آرایه قرار بدی...
    ---

    این کدیه که من نوشتم
    کد PHP:
    <?PHP

    if(noError()){
        
    $names getNames();
        
        
    // list of boy names
        
    $html '<h2>'.'نام های پسر'.'</h2>'
            
    .'<ul>';
        foreach(
    $names['boyNames'] as $name){
            
    $html .= '<li>'.$name.'</li>';
        }
        
    $html .= '</ul>';

        
    // list of girl names
        
    $html .= '<h2>'.'نام های دختر'.'</h2>'
            
    .'<ul>';
        foreach(
    $names['girlNames'] as $name){
            
    $html .= '<li>'.$name.'</li>';
        }
        
    $html .= '</ul>';
        
        echo 
    $html;    
    }

    // functions

    // check form error
    function noError()
    {
        if(isset(
    $_POST['finished'])){
            if(empty(
    $_POST['first_field']) ||
                empty(
    $_POST['second_field']) ||
                empty(
    $_POST['third_field'])){
                echo 
    'Error! empty Fields!';
                return 
    false;
            }
            if(
    is_numberic($_POST['first_field']) ||
                
    is_numberic($_POST['second_field']) ||
                
    is_numberic($_POST['third_field'])){
                echo 
    'Error! numberic value isnt valid!';
                return 
    false;
            }
        }
        else{
            echo 
    'Error! resend Form';
            return 
    false;
        }
        return 
    true;
    }

    // list of names
    function getName()
    {
        
    $names = array();
        
    $names['boyNames'] = array();
        
    $names['girlNames'] = array();

        if(
    $_POST['gender1'] == 'boy')
            
    $names['boyNames'][] = $_POST['first_field'];
        else(
    $_POST['gender1'] == 'girl')
            
    $names['girlNames'][] = $_POST['first_field'];

        if(
    $_POST['gender2'] == 'boy')
            
    $names['boyNames'][] = $_POST['second_field'];
        else(
    $_POST['gender2'] == 'girl')
            
    $names['girlNames'][] = $_POST['second_field'];

        if(
    $_POST['gender3'] == 'boy')
            
    $names['boyNames'][] = $_POST['third_field'];
        else(
    $_POST['gender3'] == 'girl')
            
    $names['girlNames'][] = $_POST['third_field'];
        
        return 
    $names;
    }
    ?>

    تابع checkError تو تغییر پیدا کرده به تابع noError
    noError با برگردونن true یا false اجازه نمی ده که درصورت خطلا داشتن اطلاعات برنامه ادامه پیدا کنه

    تابع showResult هم عوض شده به getName
    getName یک آرایه دوبعدی بر می گردونه که یک بعدش مربوط می شه به boyNames و بعد دیگه girlNames که هرکدون از اینها هم ارایه ایی هستند از اسم ها

    ----
    نقل قول: باز اینم امتحان کردم و خروجیش Array() بود!
    علتش اینه که تو یه آرایه رو echo کردی حالتی شبیه به این
    کد PHP:
    $a = array();
    echo 
    $a
    این جور مواقع همیشه خروجی فقط یک Array هست

    یه چیزه دیگه هم که هست اونم global
    $_POST خودش سراسری و global هست دیگه لازم نیست که تویه متغیر دیگه گذاشته بشن و دوباره global بشن
    اگه از همین $_POST استفاده کنی بهتره! اینطور نیست؟Cool
    (آخرین ویرایش در این ارسال: ۱۳۸۹ خرداد ۱۱ ۱۲:۱۱ عصر، توسط oia.)
    ۱۳۸۹ خرداد ۱۱ ۱۲:۰۰ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : cyletech
    cyletech غایب
    علیرضا اسکندرپور شوفری
    *****

    ارسال‌ها: 2,197
    تاریخ عضویت: ۱۳۸۸ فروردين ۸
    اعتبار: 42
    تشکرها : 1258
    ( 2240 تشکر در 1089 ارسال )
    ارسال: #5
    RE: خواندن متغیر های داخل یک فانکشن
    عذر میخوام، من تازه امروز فرصت کردم به این تاپیک خودم برسم. من کدت رو چک کردم و یکسری ایرادات جزئی داشت که مطمئنم میدونستی اما فراموش کردی در اون لحظه برای همین من اونا رو لیست کردم برات و در آخر نتیجه رو میگم:
    1. esle مانند if و elseif هیچ مقداری نمیگیره تا بررسی کنه!
    2. تابعی بنام is_numberic نداریم به احتمال زیاد منظورت is_numeric هست
    3. شما یک تابع نوشتی به نام getName اما در جای دیگه اشتباه نوشتی getNames که باعث بروز خطا می شه
    4. اگر بخوایم از شرط های طولانی یا زیاد استفاده کنیم برای امنیت و بهینه بودن بیشتر از switch استفاده می کنیم

    در نهایت هم محمد امین جان، خروجی کد شما درست مثل خروجی کد من است. یعنی تنها عناوین رو به نمایش میگذاره و از قرار دادن زیرمجموعه ها که اسامی باشند صرف نظر می کنه. ببینید من کمی در مورد کاری که میخوام انجام بدم برات توضیح میدم ببین متوجه منظورم میشی. من دو متغیر با چند تا مقدار برای هر کدوم دارم و یک متغیر دیگری دارم که اون دو متغیر اولی رو در بر داره و من میخوام با دو foreach که اولی مربوط میشه به نمایش عناوین که مقادیر متغیر سوم هست و دومی هم مربوط میشه به شکافتن متغیر سوم که مقادیر اصلیش همان متغیر های اول و دوم هستند...
    ۱۳۸۹ خرداد ۱۳ ۰۲:۰۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    oia آفلاین
    محمد ثانی
    *****

    ارسال‌ها: 2,014
    تاریخ عضویت: ۱۳۸۷ آذر ۲۶
    اعتبار: 66
    تشکرها : 2330
    ( 2091 تشکر در 1290 ارسال )
    ارسال: #6
    RE: خواندن متغیر های داخل یک فانکشن
    در مورد اون چارتا مورد حق با توه

    اما در مورد خروجیش فک کنم درست عمل کردم دیگه
    دوتا ارایه اسم هستن که حداقل 0 و حداکثر 3 تا اسم دارم. یه ارایه مربوطه به پسرها و یه ارایه هم مربوطه به دختر ها
    که تو دوتا لیست جدا نمایش داده می شن!!!

    نقل قول: یعنی تنها عناوین رو به نمایش میگذاره و از قرار دادن زیرمجموعه ها که اسامی باشند صرف نظر می کنه
    به احتمال زیاد کده مربوط به formت مشکل داره
    یه بازنگری اونجا بکن! یا بزار اینجا تا بازنگری بکنیم!Wink
    ۱۳۸۹ خرداد ۱۳ ۰۷:۱۳ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    cyletech غایب
    علیرضا اسکندرپور شوفری
    *****

    ارسال‌ها: 2,197
    تاریخ عضویت: ۱۳۸۸ فروردين ۸
    اعتبار: 42
    تشکرها : 1258
    ( 2240 تشکر در 1089 ارسال )
    ارسال: #7
    RE: خواندن متغیر های داخل یک فانکشن
    برادر من، اگر کد نوشته شده html مشکلی داشت که در صورت وارد نکردن اطلاعات یا عدد بودن مقدار وارد شده در فیلد ها خطا نمی داد! مگر در html چیزی جز gender1 تا gender3 و first_field تا third_field دارین؟ نه عزیرم من دوباره چک کردم. میدم دست خودت بررسی کن.
    کد:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>صفحه تمرین علیرضا - معرفی و دسته بندی نام ها</title>
    <link rel="stylesheet" href="style.css" title="css for all contents" media="all" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <form action="functions.php" method="post">
    <fieldset>
    <legend>معرفی نام ها</legend>
    <p><span class="important">*</span>&nbsp;<strong>نام نخست:</strong>&nbsp;&nbsp;<select name="gender1"><option name="boy">پسر</option><option name="girl">دختر</option></select>&nbsp;-&nbsp;<input type="text" size="15px" maxlength="32" name="first_field" /></p>
    <p><span class="important">*</span>&nbsp;<strong>نام دوم:</strong>&nbsp;&nbsp;<select name="gender2"><option name="boy">پسر</option><option name="girl">دختر</option></select>&nbsp;-&nbsp;<input type="text" size="15px" maxlength="32" name="second_field" /></p>
    <p><span class="important">*</span>&nbsp;<strong>نام سوم:</strong>&nbsp;&nbsp;<select name="gender3"><option name="boy">پسر</option><option name="girl">دختر</option></select>&nbsp;-&nbsp;<input type="text" size="15px" maxlength="32" name="third_field" /></p>
    <p><i><span style="color: #900; font-weight: bold;">*</span>پر کردن فیلد های ستاره دار الزامی است</i></p>
    <p><input class="submit" type="submit" name="finished" value="دسته بندی نام ها" /></p>
    </fieldset>
    </form>
    </body>
    </html>
    ۱۳۸۹ خرداد ۱۳ ۰۸:۲۱ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS