رفتن به مطلب

اررور supplied for foreach()


پست های پیشنهاد شده

سلام 

این یه زمینه دلخواه هست که تو نوشته ها تعریف شده یه کنترل select هست که یه سری option ها داخلش ست میشه.

کد زیر برای نشون دادن این آبجکت هست:

<div class="row">
<div class='DropDownField'>
  <div class='searchform-param'>
    <label class='searchform-label'>رشته مورد نظر خود را انتخاب کنید:</label>
      <span class='searchform-input-wrapper'>
      <?php
      $field_key = "reshteye_tahsili";
      $field = get_field_object($field_key);

      if( $field )
      {
        echo '<select name="' . $field['key'] . '">';
          foreach( $field['choices'] as $k => $v )
          {
            echo '<option value="' . $k . '">' . $v . '</option>';
          }
        echo '</select>';
      }
      ?>
      </span>
  </div>
</div>
</div>

 

این کد رو زمانی که تو فایل single.php میزارم به راحتی آبجکت نشون داده میشه! 

ولی زمانیکه این کد رو تو یه فایل دیگه استفاده میکنم اررور میگیرم:

Warning:  Invalid argument supplied for foreach() 
و ادامه میگه که لاین ۵۳ مشکل داره.

لاین ۵۳ همین دستور فورایچم قرار داره

 

@naghmesara @Fenix.ir  ممنون میشم راهنمایی کنید...

لینک به ارسال

سلام و درود

 

شما توی فایل های دیگه معلوم نیست متای کدوم پست رو میخواید که براتون توی لیست نشون بده.

طبق اینجا پارامتر دوم تابع ای که برای دریافت فیلد ازش استفاده کردید post_id هست که اگر وارد نشده باشه برابر با آیدی پست جاری میشه که آیدی پست جاری فقط در حلقه ها و فایل single.php وجود داره. اگر قصد دارید خارج از حلقه ازش استفاده کنید باید آیدی پستی که قراره فیلدش رو براتون فراخوانی کنه رو به صورت دستی بهش بدید به شکل زیر:

<?php get_field_object($field_key, '123'); ?>

به جای 123 باید آیدی پست مربوطه را قرار دهید.

 

موفق باشید

لینک به ارسال
در 23 دقیقه قبل، naghmesara گفته است :

سلام و درود

 

شما توی فایل های دیگه معلوم نیست متای کدوم پست رو میخواید که براتون توی لیست نشون بده.

طبق اینجا پارامتر دوم تابع ای که برای دریافت فیلد ازش استفاده کردید post_id هست که اگر وارد نشده باشه برابر با آیدی پست جاری میشه که آیدی پست جاری فقط در حلقه ها و فایل single.php وجود داره. اگر قصد دارید خارج از حلقه ازش استفاده کنید باید آیدی پستی که قراره فیلدش رو براتون فراخوانی کنه رو به صورت دستی بهش بدید به شکل زیر:


<?php get_field_object($field_key, '123'); ?>

به جای 123 باید آیدی پست مربوطه را قرار دهید.

 

موفق باشید

ممنون دوست عزیز

فقط یه سوال:

من اون کد رو دارم تو صفحه نخستم قرار میدم تا این فیلد ها رو نشون بده برام. اینکاری که شما گفتید بعد مشکلاتی ایجاد نمیکنه؟ که کد post_id یک نوشته رو بهش بدم؟

نمیشه گفت که option های یه باکس select رو که در زمان ساخت زمینه دلخواه درست میکنیم رو مستقیم از خود افزونه بگیره و دیگه post_id نوشته رو براش ست نکنیم؟

لینک به ارسال

درود مجدد

 

مگه گزینه های این سلکت باکس برای هر پست متفاوت نیست؟

اگر گزینه ها ثابته که چرا دارید از زمینه های دلخواه استفاده می کنید؟

ویرایش شده توسط naghmesara
لینک به ارسال

***یه سوال دیگه نکته ریز و مهمه:

زمانی که مقادریر یک select option تگ رو بصورت دستی وارد میکنیم خب بعدش که بخوایم مقداری که ست و سابمیت شده رو بگیریم ساده اس و کافی مقداری که سابمیت شده که توسط هر متدی چه  $_POST و یا $_GET رو بگیریم و با یه حلقه سوئیچ میشه مقایسه کرد و خروجی رو نشون داد. ولی زمانیکه مثل کد الان که  option های تگ select از جایی دیگه ای فراخوانی میشن و تعدادشون متغییر هست باید چیکار کرد؟

یعنی فرض کنید یه فرمی هست که با متد $_GET داره مقدار این select option رو ارسال میکنه. چطوری مقداری که توسط $_GET ارسال شده رو بگیریم و echo کنیم که مثلا چی بوده؟

 

فرض کنید option که ست شده و ارسال شده این مقداری هست که تو عکس زیر مشخص شده:

597ce645abd0e_ScreenShot2017-07-30at00_15_43.png.0bd6ecaa3b5c6bd3d39776e1d09e3cc2.png

یا هر مقدار دیگه ای از این آپشن ها٬ حالا چطوری باید خیلی ساده چاپ کرد که چی بود؟

چون این مقادیر ثابت که نیستند ممکنه هر روز اضافه یا کم بشه.

 

ببخشید طولانی شد خواستم مطلب رو خوب برسونم که جای سوال و ابهامی نباشه!

:rolleyes:

 

لینک به ارسال
در 4 دقیقه قبل، naghmesara گفته است :

سلامی دوباره :)

مگه گزینه های این سلکت باکس برای هر پست متفاوت نیست؟

====> بله گزینه های این سلکت باکس برای هر پست متفاوت هست٬ ولی آپشن های تگ سلکت تو همه پست ها هستن و گزینه سلکت از تو اونها انتخاب میشه!

اگر گزینه ها ثابته که چرا دارید از زمینه هایش دلخواه استفاده می کنید؟

====> نه گزینه ها ثابت نیستن چون ممکنه هر روز یه option به تگ سلکت اضافه یا کم بشه

 

لینک به ارسال
در 22 دقیقه قبل، m4xs051 گفته است :

***یه سوال دیگه نکته ریز و مهمه:

زمانی که مقادریر یک select option تگ رو بصورت دستی وارد میکنیم خب بعدش که بخوایم مقداری که ست و سابمیت شده رو بگیریم ساده اس و کافی مقداری که سابمیت شده که توسط هر متدی چه  $_POST و یا $_GET رو بگیریم و با یه حلقه سوئیچ میشه مقایسه کرد و خروجی رو نشون داد. ولی زمانیکه مثل کد الان که  option های تگ select از جایی دیگه ای فراخوانی میشن و تعدادشون متغییر هست باید چیکار کرد؟

یعنی فرض کنید یه فرمی هست که با متد $_GET داره مقدار این select option رو ارسال میکنه. چطوری مقداری که توسط $_GET ارسال شده رو بگیریم و echo کنیم که مثلا چی بوده؟

 

فرض کنید option که ست شده و ارسال شده این مقداری هست که تو عکس زیر مشخص شده:

597ce645abd0e_ScreenShot2017-07-30at00_15_43.png.0bd6ecaa3b5c6bd3d39776e1d09e3cc2.png

یا هر مقدار دیگه ای از این آپشن ها٬ حالا چطوری باید خیلی ساده چاپ کرد که چی بود؟

چون این مقادیر ثابت که نیستند ممکنه هر روز اضافه یا کم بشه.

 

ببخشید طولانی شد خواستم مطلب رو خوب برسونم که جای سوال و ابهامی نباشه!

:rolleyes:

 

توجه کنید وقتی فرمی که توش این سلکت باکس هست دکمه subimt اش زده میشه اطلاعات فرم با متد انتخاب شده ارسال میشه به اکشن فرم حالا مثلا اینجا فرض کنید سلکت باکس شما توی یه فرم مثل فرم زیر هست:

<form method="post" action="process.php">
  <select name="field_596a1410cfcf1">
    <option value="رشته معارف اسلامی">رشته معارف اسلامی</option>
  </select>
  <input type="submit" value="Submit the form">
</form>

اینجا وقتی اون آپشن رو انتخاب میکنیم و دکمه سابمیت فرم رو میزنیم اطلاعات با متد post میرن به فایل proccess.php حالا اینجا فایل proccess.php رو داریم:

<?php
   $option = isset($_POST['field_596a1410cfcf1']) ? $_POST['field_596a1410cfcf1'] : false;
   if ($option) {
	  echo $option;
   } else {
     echo "گزینه ای را انتخاب کنید";
     exit;
   }

خوب تو فایل چون فرم با متد post ارسال کرده value آپشن رو ، پس با متغییر $_POST باید بگیریم مقدار ارسالی رو.

در توضیح فایل php باید بگم که اگر مقداری ارسال بشه به proccess.php اون مقدار در متغییر option قرار میگیره و اگر چیزی ارسال نشده باشه به این فایل مقدار false رو توی خودش جا میده. بعد توی شرط هم داریم که اگر مقداری ارسال شده بود خود مقدار رو چاپ کن اگر هم ارسال نشده بود پیام "گزینه ای را وارد کنید" را چاپ کن.

 

موفق باشید

لینک به ارسال

@naghmesara  ;)

 

یه سوال دیگه: :unsure:

چطور میشه مقدار یک option رو بعد از اینکه سابمیت میشه مجدد تو select box نشون داد؟

یعنی یه مقداری ست میشه بعد کاربر اون رو سابمیت میکنه و حالا که مثلا صفحه رفرش میشه اون مقداری که کاربر سامیت کرده رو نشون داد تو همون select box که کاربر بدونه چی رو ارسال کرده؟

 

سپاس...

لینک به ارسال
در 36 دقیقه قبل، m4xs051 گفته است :

دوستان هیچکی نیست این کمک کنه این تاپیک رو به نتیجه برسونیم؟

 echo '<select name="' . $field['key'] . '">';
          foreach( $field['choices'] as $k => $v )
          {
           $selected="";
     if($_POST['field_596a1410cfcf1']== $k){
   $selected="selected";
   }
            echo '<option  value="' . $k . '" '.$selected.'>' . $v . '</option>';
          }
        echo '</select>';

 

لینک به ارسال
در در 8/2/2017 at 12:14، Ebrahimzadeh گفته است :

 echo '<select name="' . $field['key'] . '">';
          foreach( $field['choices'] as $k => $v )
          {
           $selected="";
     if($_POST['field_596a1410cfcf1']== $k){
   $selected="selected";
   }
            echo '<option  value="' . $k . '" '.$selected.'>' . $v . '</option>';
          }
        echo '</select>';

 

ممنون دوست عزیز بابت راهنمایی ولی متاسفانه این کد جواب نمیده!

:(

لینک به ارسال
در 16 ساعت قبل، m4xs051 گفته است :

ممنون دوست عزیز بابت راهنمایی ولی متاسفانه این کد جواب نمیده!

:(

این کد درست البته من کامل ننوشتم منظورم این بود که باد مقدار که پست میشه رو با value

option هاتون چک کنید مثل کد زیر

<form method="post">
	<select name="hh">
                <option value="user" <?php if($_POST['hh']=='user') echo 'selected'; ?> >user</option>
                <option value="rol" <?php if($_POST['hh']=='rol') echo 'selected' ?> >rol</option>
                <option value="mail" <?php if($_POST['hh']=='mail') echo 'selected' ?>>mail</option>
            </select>
    <input type="submit" value="hhhhh">
</form>

 

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...