آگهی
article

حلقه for، foreach و while در PHP

php-for-while-loop

تا این مرحله از آموزش های مقدماتی PHP تا حدود زیادی مسیرمان را به سمت یادگیری این زبان پرکاربرد برنامه نویسی وب هموار کرده ایم، پس از آشنایی با مبحث متغیرها، عملگرهای محاسبه، مقایسه و استدلال منطقی، کار با دستورات شرطی if و else و بررسی نحوه استفاده از switch و case در کدنویسی ها، این بار نوبت به آموزش کاربرد حلقه های for، foreach و while در PHP است، از آنجایی که حلقه ها در زبان های برنامه نویسی و به طور خاص در برنامه نویسی PHP کاربردهای فراوانی دارند یادگیری و درک این مبحث می تواند در روند پیشرفت آموزش ها بسیار کمک کننده باشد، در ادامه خواهیم گفت که چرا و چگونه باید از حلقه for، foreach و while در کدنویسی استفاده کنیم.

حلقه (Loop) چیست؟


در اکثر زبان های برنامه نویسی و از جمله PHP حلقه ها برای انجام فرآیندها و بلاکی از کد در دور تکرار کاربرد دارند، در هنگام کدنویسی موقعیت های زیادی پیش می آید که بخواهیم قسمتی از کد برنامه را با تکرار اجرا کنیم، در این مواقع ابزار برنامه نویس معمولا استفاده از حلقه (Loop) است، به طور مثال اگر در یک مسابقه 5 گروه شرکت کننده داشته باشیم و بخواهیم امتیاز کسب شده آنها را در جدول ترسیم کنیم، می توانیم این کار را با حلقه انجام دهیم:
<?php
echo '<table border="1">';
$group = array('A' => 120, 'B' => 125, 'C' => 83, 'D' => 154, 'E' => 123);
foreach($group as $key => $value) {
    echo '<th>' . $key . '</th>' . '<td>' . $value . '</td><tr></tr>';
}
echo '</table>';
?>
با اجرای نمونه کد بالا نتیجه در جدول نمایش داده خواهد شد، به فرض:
A    120
B    125
C    83
D    154
E    123
در این نمونه کد از آرایه و حلقه foreach استفاده شده که در ادامه بیشتر توضیح خواهیم داد.

انواع حلقه در PHP


مانند اغلب زبان های برنامه نویسی در PHP نیز چند نوع حلقه (Loop) وجود دارد که با به حساب آوردن همه آنها می توان تعداد حلقه در PHP را در چهار دسته خلاصه کرد:
حلقه for، حلقه foreach، حلقه while و حلقه do while.
حلقه for برای مواقعی کاربرد دارد که تعداد دور حلقه عدد مشخصی باشد، حلقه foreach برای کار با آرایه ها (کلید و مقدار) مناسب است، حلقه while برای مواقعی که دور حلقه صرفا مبتنی بر برقرار (true) یا عدم برقرار (false) بودن یک شرط است و تعداد دور حلقه از قبل مشخص نباشد کاربرد دارد، در نهایت شکل دیگری از حلقه while تحت عنوان do while وجود دارد که تنها تفاوت آن با while ساده اجرای اولین دور بدون در نظر گرفتن true یا false بودن شرط حلقه است، در ادامه به صورت موردی در خصوص هر کدام از حلقه ها و نحوه کاربرد آنها توضیح خواهیم داد.

حلقه for در PHP


اولین حلقه ای که می خواهیم بررسی کنیم for است، از حلقه for در PHP زمانی استفاده می کنیم که بخواهیم به تعداد مشخصی دور تکرار داشته باشیم، به عبارتی دور تکرار در حلقه for از قبل مشخص است و معمولا در هر دور فرآیندی صورت می گیرد که در نهایت شرط حلقه false شده و دور تکرار به اتمام برسد، مثال:
<?php
//حلقه for
for($i = 1; $i <= 3; $i++){
    echo "دور شماره $i <br>";
}
?>
مثال بالا خروجی زیر را تولید خواهد کرد.
دور شماره 1 
دور شماره 2
دور شماره 3
توضیح:
- شیوه نگارش (Syntax) حلقه for به این صورت است که ساختار اصلی سه عبارت (Expression) دارد، عبارت اول همان مقادیر پیش فرض برای متغیر (i = 1) است، عبارت دوم تعیین شرط برای زمان خاتمه حلقه است (i <= 3) و عبارت آخر تغییرات مقادیر متغیر در هر دور حلقه است (افزایش i به میزان یک واحد با عملگر ++).
- عبارت i در مثال بالا فرضی و انتخابی است، طبق رویه برنامه نویسان معمولا از کاراکتر i بدین منظور استفاده می کنند، در صورت نیاز می توان از هر عنوان مجاز دیگری استفاده کرد.
- دقت کنیم در برنامه نویسی حلقه هایی که می نویسیم باید در مرحله ای به پایان برسند، اگر بررسی شرط حلقه همیشه درست (true) باشد دور تکرار آن تا بی نهایت (Infinite Loop) ادامه می یابد و قاعدتا این حالت یک باگ و نقص بزرگ در برنامه است و نهایتا باعث از کار افتادن مرورگر کاربر یا Down شدن سرور خواهد شد.
در مثال زیر اشتباه کوچکی صورت گرفته و حلقه تا بی نهایت ادامه پیدا می کند، با کمی دقت متوجه ایراد کار خواهیم شد:
<?php
//حلقه for تکرار بينهايت
for($i = 0; $i >= 0; $i++){
    echo "دور شماره $i <br>";
}
?>
با دقت در ساختار حلقه مشخص است که شرط آن همواره true و برقرار است (مقدار i عددی مساوی 0 یا بزرگتر از آن خواهد بود).

حلقه foreach در PHP


نوع دیگری از حلقه در PHP تحت عنوان foreach برای کار با آرایه ها کاربرد دارد، آرایه در زبان های برنامه نویسی و از جمله برنامه نویسی وب کاربردهای زیادی دارد و به همین دلیل مفسر PHP برای کنترل و پردازش این نوع متغیرها ابزار حلقه foreach را در نظر گرفته است، به طور مثال وقتی در فرم HTML فیلد Select با قابلیت انتخاب چند value را به سرور ارسال می کنیم معمولا از طریق حلقه است که می توانیم به تمام مقادیر ارسال شده دسترسی داشته باشیم، در این حالت حلقه foreach در هر دور از ابتدا به انتها کلید و مقدار آرایه را پردازش کرده و تا زمانی که اطلاعات وجود دارد و شرط حلقه درست یا true باشد، دور تکرار ادامه پیدا می کند، مثال:
برای انتخاب چند مورد کليد Ctrl را نگهداريد.<br>
<form action="" method="post">
<label for="select">انتخاب یک یا چند مورد:</label>
<select name="select[]" id="select" multiple="multiple" size="4">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<br>
<input name="check" type="hidden" value="1">
<input type="submit" value="ارسال">
</form>

<?php
$select = @$_POST['select'];
//print_r($select);
$check = @$_POST['check'];

if($check == 1) {
    foreach($select as $key => $value) {
        echo 'مقدار دور شماره ' . $key . ': ' . $value . '<br>';
    }
}
?>
در صورت انتخاب مقدار دوم و چهارم از فیلد Select خروجی مثال بالا به صورت زیر خواهد بود:
مقدار دور شماره 0: 2
مقدار دور شماره 1: 4
توضیح:
- زمانی که بخواهیم با فیلد Select چند مقدار به صورت همزمان ارسال شوند باید قسمت name آن را با علامت [] در انتها درج کنیم این کاراکتر یک قرارداد است و به مرورگر می گوید که قصد ارسال مقادیر به صورت آرایه را داریم، همچنین پارامتر mutiple نیز برای تگ select باید تنظیم شده باشد.
- پس از انتخاب و ارسال اطلاعات فرم در سمت سرور مقادیر با متد POST دریافت و به متغیر select نسبت داده می شود، اگر قسمت print_r را اجرا کنیم نتیجه مشابه نمونه زیر در خروجی چاپ می شود:
Array ( [0] => 2 [1] => 4 )
این نتیجه همان آرایه و مقدار ارسال شده است.
- دقت کنیم شمارش در آرایه از 0 شروع می شود و اولین مقدار 1 نیست، در اینجا نیز فیلد اول با کلید 0 و مقدار 2 و فیلد چهارم با کلید 1 و مقدار 4 مشخص است.
- حلقه foreach از دو شیوه نگارش (Syntax) پشتیبانی می کند، هم به صورت:
$array as $value
و هم به صورت:
$array as $key => $value
همان طور که مشخص است در هر دو حالت قسمت مقدار وجود دارد.
- هر کلید و مقدار آرایه در هر دور حلقه به ترتیب به عنوان ورودی انتخاب و پس از اعمال پردازش تعیین شده نوبت به کلید و مقدار بعدی می رسد تا زمانی که پارامترهای آرایه به انتها برسند، در مثال بالا آرایه ما دارای دو مقدار است پس دور حلقه foreach برای هر کدام یک بار اجرا خواهد شد (for به معنی برای و each به معنی هر).
- درک صحیح نحوه عملکرد حلقه foreach نیازمند آشنایی کامل با مبحث آرایه ها در PHP است، لذا در اینجا به همین مقدار بسنده می کنیم.

حلقه while در PHP


ساختار حلقه while در PHP و اغلب زبان های برنامه نویسی به این صورت است که با بررسی شرط تا هر زمان که برقرار و درست (true) باشد کدهای داخل کاراکترهای {} اجرا می شود، برخلاف حلقه for که باید تعداد دور حلقه از قبل و درون ساختار حلقه مشخص باشد در حلقه while الزامی به مشخص بودن تعداد دور حلقه نیست و خاتمه حلقه مبتنی بر false شدن بررسی برقراری شرط آن است که عمدتا مبتنی بر متغیری بیرون از حلقه است، در مثال ساده زیر حلقه while را تا زمانی که تعداد کاربران (متغیر فرضی user) بیشتر از عدد 0 است ادامه داده و خروجی از آن گرفته ایم:
<?php
//مقادير پيش فرض براي متغير
$users = 5;
//حلقه while
while($users > 0){
    echo "کاربر شماره $users <br>";
    $users--;
}
?>
خروجی کد بالا به صورت زیر خواهد بود:
کاربر شماره 5 
کاربر شماره 4
کاربر شماره 3
کاربر شماره 2
کاربر شماره 1
توضیح:
- ابتدا برای متغیر فرضی users یک مقدار پیش فرض قرار می دهیم تا بعد در حلقه while برای آن شرط تعیین کنیم.
- سپس در قسمت مربوط به حلقه while بررسی می کنیم تا زمانی که مقادیر متغیر users بزرگتر از صفر باشد بلاک کد داخل کاراکترهای {} اجرا شود.
- درون حلقه یک دستور خروجی echo نوشته ایم که در هر دور مقادیر را چاپ می کند و در قسمت آخر در هر دور حلقه یک واحد از متغیر users کاسته می شود و این کار تا زمانی که مقادیر این متغیر بزرگتر از 0 است ادامه می یابد.
- دقت کنیم چون متغیر فرضی ما در این مثال به صورت عددی بود می توانیم بر روی آن اعمال ریاضی مثل جمع، تفریق و... را انجام دهیم، در برنامه نویسی سطح بالاتر موقعیت هایی پیش می آید که انواع متفاوتی از داده ها (String، Integer، Boolean، Array و...) را باید با توجه به نوع آنها بررسی کنیم.

مثال دیگری از کاربرد حلقه while در PHP


برای آشنایی بیشتر مثال دیگری از کاربرد حلقه while در برنامه نویسی PHP را با هم بررسی می کنیم:
<?php
//مقادیر پیش فرض برای متغیر
$users = 5;
$admin = 1;
//حلقه while
while($users > 0){
    //حلقه تو در تو
    while($admin > 0){
        echo "مدیر سایت، خوش آمدید<br />";
        $admin--;
    }    
    echo "کاربر شماره $users خوش آمدید<br />";
    $users--;
}
?>
خروجی کد بالا به صورت زیر خواهد بود.
مدیر سایت، خوش آمدید
کاربر شماره 5 خوش آمدید
کاربر شماره 4 خوش آمدید
کاربر شماره 3 خوش آمدید
کاربر شماره 2 خوش آمدید
کاربر شماره 1 خوش آمدید
توضیح:
- مثال بالا نحوه استفاده از حلقه while درون حلقه ای دیگر را به صورت تو در تو نشان می دهد.
- ساختار حلقه با کمی تامل قابل درک است، تنها چیزی که اینجا اضافه کرده ایم متغیر admin و حلقه مربوط به آن است که در درون حلقه اصلی اجرا می شود.
- استفاده از این شیوه یعنی حلقه های تو در تو در برنامه نویسی سطح پیشرفته تر PHP با توجه به نیاز برنامه ها کاربردهای خاص خودش را دارد.

حلقه while بدون شرط در PHP


گفتیم در حالت عادی حلقه while باید همراه با یک شرط استفاده شود اما این قابلیت در مفسر PHP وجود دارد که حلقه while را بدون در نظر گرفتن شرط و صرفا با درج عبارت true استفاده کنیم، مثال:
<?php
$i = true;
$loop = 1;

while(true) {
    if($i === false) {
        break;
    } else {
        echo 'Loop: ' . $loop . '<br>';
    }

    if($loop > 4) {
        $i = false;
    } else {
        $loop++;
    }
}
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
Loop: 1
Loop: 2
Loop: 3
Loop: 4
Loop: 5
همان طور که مشخص است در صورتی که متغیر فرضی loop به مقدار 5 برسد متغیر i به صورت false مقداردهی می شود و در نتیجه در دور بعدی بررسی شرط if اول مثبت شده و دستور break اجرا می شود، در ادامه خواهیم دید که با اجرای دستور break دور حلقه while به پایان می رسد.

حلقه do while در PHP


در برنامه نویسی وب با PHP گاهی مواقع پیش می آید که بخواهیم حلقه while را بدون بررسی شرط آن حداقل یک بار اجرا کنیم و در دورهای بعدی بررسی کنیم که آیا شرایط ادامه حلقه مهیا است یا خیر، مفسر PHP بدین منظور از ساختار do while که شبیه while عادی است بهره می گیرد، تنها تفاوت این است که در do while دور اول حلقه بدون هیچ پیش شرطی اجراء می شود اما دورهای بعد مثل این است که به روال عادی حلقه while بازگشت کنیم، مثال زیر روشن است:
<?php
//مقادیر پیش فرض برای متغیر
$i = 1;
do{
    echo "کاربر شماره $i خوش آمدید<br>";
    $i--;
}
//حلقه while
while ($i > 1);
?>
در مثال بالا با وجود اینکه در قسمت شرط while گفته ایم تا زمانی که متغیر i از 1 بزرگتر باشد و مقادیر این متغیر به صورت پیش فرض 1 است (شرط برقرار نیست)، اما خروجی زیر به مرورگر ارسال می شود:
کاربر شماره 1 خوش آمدید
این حالت به جهت خاصیت ذاتی حلقه do while است که دور اول حلقه بدون بررسی شرط آن اجرا می شود.

استفاده از break و continue در حلقه ها


در ساختار حلقه ها در صورت نیاز می توانیم از دو دستور کلیدی break و continue استفاده کنیم، اجرای دستور break باعث اتمام کلی حلقه شده و دستور continue باعث ایجاد حالت پرش به دور بعدی خواهد شد، مثال:
<?php
$num = 10;

while(true) {
    if($num == 4) {
        $num--;
        continue;
    } elseif($num == 1) {
        break;
    }

    if($num % 2 == 0) {
        echo "$num: Even - زوج<br>";
    } else {
        echo "$num: Odd - فرد<br>";
    }

    $num--;
}
?>
با اجرای نمونه کد بالا خروجی زیر در مرورگر چاپ می شود:
10: Even - زوج
9: Odd - فرد
8: Even - زوج
7: Odd - فرد
6: Even - زوج
5: Odd - فرد
3: Odd - فرد
2: Even - زوج
نکته مهم این نمونه ساختار کاهش یک واحدی متغیر فرضی num در قسمتی است که می خواهیم دستور continue را اجرا کنیم، اگر این کاهش اتفاق نیفتد حلقه در دور تکرار بینهایت گرفتار می شود چون مقدار num همواره 4 است و در دورهای بعدی پیوسته دستور شرطی if حلقه اجرا می شود!

شیوه نگارش (Syntax) جایگزین در حلقه ها


در انتهای این مبحث بد نیست اشاره ای به دیگر شیوه های نگارش (Syntax) حلقه ها در PHP داشته باشیم، مفسر PHP علاوه بر در نظر گرفتن شیوه دستوری متداول برای نوشتن حلقه ها شکل دیگری از نگارش را تحت عنوان "دو نقطه یا Colon Syntax" پشتیبانی می کند که البته خیلی متداول نیست اما جهت آشنایی بیشتر چند نمونه زیر را بررسی می کنیم:
<?php
for($i = 1; $i <= 10; $i++):
    echo $i;
endfor;
?>
خروجی:
12345678910

<?php
$i = 1;
while($i <= 10):
    echo $i;
    $i++;
endwhile;
?>
خروجی:
12345678910
در این شیوه به جای استفاده از کاراکترهای {} جهت تعیین محدوده بلاک حلقه، از کاراکتر : و عبارت endfor یا endwhile استفاده شده است، این سبک حلقه در نتیجه هیچ تفاوتی با شیوه متداول ندارد و صرفا شکل ظاهری آن متفاوت است.
sectionدسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
» توابع کار با آرایه در PHP - بخش سوم
» توابع کار با آرایه در PHP - بخش اول
» دستورات شرطی (Conditional Statements) در PHP
» توابع (Functions) در PHP
» آموزش برنامه نویسی وب با PHP
commentنظرات (۵۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: امین
زمان: ۱۴:۱۲:۲۲ - تاریخ: ۱۳۹۲/۰۳/۲۲
سلام و خسته نباشید
چطوری میشه از دیتابیس ایمیل ها رو اینجوری انتخاب کنه:
mysqli_query($conn, "SELECT email FROM mytable WHERE status='1'")
که تو دیتابیس ایمیل اونایی که status آنها برابر 1 است را انتخاب کند و همه را نشان دهد به این صورت:
email1@site.com, email2@site2.com ,...
پاسخ: 
سلام
بخش اصلی پرس و جو را نوشته اید، کافی است در حلقه while از تابع
mysqli_fetch_array
استفاده کنید که آموزش آن در بخش MySQL کامل توضیح داده شده است، مثال:
<?php
$query = mysqli_query($conn, "SELECT email FROM mytable WHERE status='1'")
or die(mysqli_error($conn));

$count = mysqli_num_rows($query);
$email = NULL;
$loop = 1;

while ($row = mysqli_fetch_array($query)){
$email .= $row['email'];

if($loop < $count){
$email .= ', ';
}

$loop++;
}

echo $email;
?>
نویسنده: ابوالفضل
زمان: ۱۶:۱۳:۳۷ - تاریخ: ۱۳۹۲/۰۴/۰۴
سلام با تشکر از سایت عالیتون
بنده نیاز به کدی که به امین در بخش نظرات همین صفحه داده بودید داشتم که واقعا ازتون سپاسگذارم
حالا یه سوال دارم اگر بخواهیم تعداد ایمیل ها را نمایش دهیم چه کاری باید انجام دهیم
من میخوام تعداد ایمیل های تکراری شمارش شود و خروجی بدهد تعداد ایمیل های تکراری 3 عدد می باشد!
ممنون میشم راهنمایی بفرمایید
پاسخ: 
نمونه کد زیر برای کاری که می خواهید انجام دهید کاربرد دارد:
<?php
$query = mysqli_query($conn, "SELECT email FROM mytable WHERE status='1'")
or die(mysqli_error($conn));

@$same_array = array();
$same_result = null;
$loop = 0;

while ($row = mysqli_fetch_array($query)){
$same_array[$loop] = $row['email'];
$loop++;
}

$same_count = 0;
$loop = 1;

$same_array = array_count_values($same_array);
foreach($same_array as $key => $value){
if($value > 1){
$same_result .= $key;
$same_count + $value;

if($loop < count($same_array)){
$same_result .= ', ';
}
}
$loop++;
}

echo 'ایمیل های تکراری: '.$same_result.'<br>';
echo 'تعداد: '.$same_count;
?>
نویسنده: ابوالفضل
زمان: ۱۶:۰۸:۰۹ - تاریخ: ۱۳۹۲/۰۴/۰۶
بینهایت ازتون سپاسگذارم...
نویسنده: yahya
زمان: ۱۲:۵۸:۴۹ - تاریخ: ۱۳۹۲/۰۵/۰۳
با سلام و تشکر از زحمات بی دریغ شما
من یک کد به صورت زیر دارم
for (....) {
...
...
for (...){
....
if (...){
(*****)
}
....
....
}
...
}
می خواهم اگر شرط برقرار باشد از حلقه دوم خارج شده و به ابتدای حلقه اول باز گردم. لطفا راهنمایی کنید.
پاسخ: 
به دو حالت زیر این کار ممکن است، نمونه کد:
<?php
for($i = 0; $i < 4; $i++){
for($r = 0; $r < 2; $r++){
if(1 == 1){
echo '1<br>';
break;
}
echo '2';
}
}
?>
در این حالت با true شدن شرط، حلقه دوم قطع و به ابتدای حلقه اول می رسیم (تا زمانی که چرخه حلقه اول ادامه دارد این روند تکرار می شود).
<?php
for($i = 0; $i < 4; $i++){
for($r = 0; $r < 2; $r++){
if(1 == 1){
echo '1<br>';
$i = 4;
break;
}
echo '2';
}
}
?>
به این صورت با یک بار true شدن شرط، حلقه اصلی را به پایان می بریم.
نویسنده: yahya
زمان: ۱۵:۱۹:۳۴ - تاریخ: ۱۳۹۲/۰۵/۰۴
با سلام مثل این که سوالم را صحیح مطرح نکرده ام.
من در این کد نیاز دارم که با برقرار شدن شرط از حلقه دوم خارج شوم به طوری که ادامه حلقه اول که بعد از حلقه دوم آمده اجرا نشود و به ابتدای حلقه اول بازگشته و حلقه اول ادامه یابد.
مثلا اگر حلقه اول در وضعیت i=2 باشد بعد از برقراری شرط در حلقه دوم، اولین خطی که اجرا شود حلقه اول با i=3 باشد.
پاسخ: 
برای این کار باید یک حالت وضعیتی فرضی تعریف کنید و دستورات ادامه حلقه اصلی را با شرط برقرار بودن وضعیت حلقه دوم اجرا یا نادیده بگیرید، مثال:
<?php
$status = true;
for($i = 0; $i < 4; $i++){
for($r = 0; $r < 2; $r++){
if($i == $r){
echo '1';
$status = false;
break;
}
else{
$status = true;
}
echo '2';
}
if($status == true){
echo '3';
}
echo '<br>';
}
?>
تفسیر این کد ممکن است در نگاه اول دشوار باشد، اما با نگاه به خروجی:
1
21
223
223
مشخص است که در اولین دور i=0 است، در اولین دور حلقه دوم r=0 است، لذا i == r برقرار است، عدد 1 چاپ می شود، حلقه دوم break شده و نوبت به چاپ عدد 2 نمی رسد، چون status برابر false است، لذا عدد 3 نیز چاپ نمی شود، در دور دوم حلقه اصلی، i=1 است، در دور اول حلقه دوم، r=0 است، لذا i==r برقرار نیست، عدد 2 چاپ می شود، حلقه دوم به ابتدای خود برگشته و r=1 می شود، لذا i==r برقرار است، عدد 1 چاپ شده و چون status برابر false می شود، مانند اولین دور حلقه اصلی، عدد 2 و 3 چاپ نمی شوند و این چرخه تا زمانی که دور حلقه اصلی دوام دارد، به همین منوال ادامه پیدا می کند.
نویسنده: yaser
زمان: ۱۹:۵۴:۲۴ - تاریخ: ۱۳۹۲/۰۵/۰۹
سلام. من با php و mysql می خوام 5 تا مطلب از یک موضوع را با شماره نشون بدم مثل کد زیر:
1-متن 1
2-متن 2
پاسخ: 
سوالتان کامل نیست، لطفا به آموزش های بخش SELECT در MySQL مراجعه نمائید.
نویسنده: sahar
زمان: ۰۰:۰۹:۲۲ - تاریخ: ۱۳۹۲/۰۶/۰۹
سلام و خسته نباشید
توی دیتابیس جدولی دارم که یکسری کد رو که کاملا یکتا هستند و نمیتونن تکراری باشن رو نگهداری میکنه حالا میخوام از توی این جدول با یک حلقه تک تک این کدها رو فقط یک بار انتخاب کنم تا یکسری پردازش و کارهایی روش انجام بدم و باید روی همه این کدها این پردازش ها انجام بشه حالا حلقه ای که نوشتم هر کد رو چند بار انتخاب می کنه چکار کنم فقط یکبار هر کد انتخاب بشه؟
پاسخ: 
هر ستون باید یک شماره id اختصاصی داشته باشد و در حلقه یک متغیر قرار دهید که در هر دور یک مقدار افزایش یابد، این متغیر را در پرس و جوی خود در قسمت WHERE به عنوان شماره آی دی استفاده کنید.
راه حل بهتر این است که یک بار کل نتایج را استخراج کرده و در حلقه while به صورت تک تک بر روی آنها پردازش ها را انجام دهید.
نویسنده: sahar
زمان: ۰۰:۳۱:۳۱ - تاریخ: ۱۳۹۲/۰۶/۱۱
واقعا ممنون از کمکتون ایشالله خدا همیشه هواتون رو داشته باشه همونجوری که شما تا جایی که می تونید دست بقیه رو می گیرید.
اون راهنمایی رو انجام دادم اما فرقی نکرد. من یه مشکل دیگه هم دارم اونم اینه که توی این حلقه یه حلقه دیگه هم دارم که هر وقت به جواب رسید باید از این حلقه داخلی خارج بشه من این کار رو با break انجام دادم اما نتیجه نگرفتم. راستش هر کاری رو این کدها انجام میدم نتیجه اش حتی یه تغییر کوچیک هم نمیکنه!!!حتی واسه امتحان حلقه اصلی رو برداشتم اما بازم همون جوابی رو گرفتم که هر بار می گیرم!!
این موضوع پروژمه که باید همین چهارشنبه تحویل بدم اما درست اجرا نمیده...
ببخشید خیلی حرف زدم
پاسخ: 
خواهش می کنیم، ببینید شما از کدهایی حرف می زنید که ما هیچ تصور روشنی از آنها نداریم!، در صورت تمایل می توانید فایل هایتان را با ذکر جزئیات دقیق مشکل از طریق ایمیل (در بخش تماس با ما موجود است) ارسال کنید تا بررسی شوند.
نویسنده: sahar
زمان: ۱۸:۵۱:۳۱ - تاریخ: ۱۳۹۲/۰۶/۱۱
واقعا ممنون. همین الان براتون با توضیحات کامل میفرستم.
سایتتون محشره. اصلا یه دونست
نویسنده: امیرحسین
زمان: ۲۲:۰۸:۱۱ - تاریخ: ۱۳۹۲/۰۶/۱۵
سلام استاد مهربان خسته نباشید
یه سوال خیلی کوچیک داشتم
<?php
$user = fopen('user.html', 'a');
foreach($_POST as $name => $value){
fwrite($user, $name);
fwrite($user, ': ');
fwrite($user, $value);
fwrite($user, '<br />');
}
fwrite($user, '<hr />');
fclose($user);
echo '<span id=\'sent\'>پیغام شما با موفقیت ارسال گردید</span>';
exit;
}
?>
من از این کد استفاده میکنم هیچ مشکلی نداره فقط در این قسمت
$user = fopen('user.html', 'a');
درون پرانتز fopen
'a' اینجا حتما باید a نوشته بشه اگر چیز دیگه ای مثلا s یا هرچیزی بنویسیم کد به درستی کار نمیکنه چرا میشه یکم توضیح بدید ممنون میشم
پاسخ: 
fopen تابع درونی PHP برای فراخوانی یک فایل است که رفتار آن با تنظیم پارامترهایی به عنوان آرگیومنت تعریف می شود، این پارامترها به صورت استاندارد و از پیش تعریف شده هستند لذا نمی توانید هر مقدار دلخواه را تنظیم کنید، به فرض a به معنی فراخوانی فایل صرفا برای نوشتن، قرار دادن نشانه گر در انتهای فایل و اگر فایل وجود نداشت، آن را ایجاد کردن است، اطلاعات بیشتر:
http://php.net/manual/en/function.fopen.php
نویسنده: میثم
زمان: ۱۵:۱۹:۰۸ - تاریخ: ۱۳۹۲/۰۶/۲۶
سلام.
از شما به خاطر ارائه این آموزش تشکر می کنم.
یه سوال داشتم.
چطور میشه توی حلقه while کدی نوشت که Loop ها با فاصله زمانی اجرا بشن. به عبارت دیگه یه دور اجرا بشه و بعد از مثلا 10 ثانیه دور بعدی اجرا بشه و .... تا اینکه شرط حلقه while به پایان برسه؟
پاسخ: 
انجام این کار با PHP توصیه نمی شود، PHP زبان سمت سرور است و معمولا باید بلافاصله پس از اجرای کدها خروجی را به مرورگر ارسال کند، روش توصیه شده استفاده از جاوا اسکریپت و ای جکس (Ajax) برای موارد اینچنین است، با این حال می توانید از تابع sleep در PHP استفاده کنید (در این صورت نیاز است که output_buffering را خاموش کنید)، مثال:
<?php 
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('max_execution_time',1200);

header( 'Content-type: text/html; charset=utf-8' );

echo "Testing time out in seconds\n";
for($i = 0; $i < 1150; $i++){
echo $i." -- ";
if(sleep(1)!=0){
echo "sleep failed script terminating";
break;
}
flush();
ob_flush();
}
?>
نویسنده: میثم
زمان: ۲۰:۰۶:۱۶ - تاریخ: ۱۳۹۲/۰۶/۲۶
ممنون. دستتون درد نکنه. کارم راه افتاد.
نویسنده: میثم
زمان: ۲۰:۲۴:۴۸ - تاریخ: ۱۳۹۲/۰۶/۲۶
از آموزشتون ممنونم. هاست من اجازه استفاده از تابع sleep رو نمی ده.
ببخشید می دونم که وقت شما رو هم می گیرم امکانش هست بفرمایید که چطور میتونم با جاوا یا آژاکس به هدفم برسم؟
پاسخ: 
استفاده از جاوا اسکریپت و ای جکس نیازمند آشنایی قبلی است، به طور خلاصه می توانید از توابعی مانند setTimeout استفاده و با وقفه هایی درخواست های ای جکس را به سرور ارسال کنید، به جهت مفصل بودن مبحث، باید به آموزش های مربوطه مراجعه نمائید.
نویسنده: میثم
زمان: ۲۱:۳۴:۳۳ - تاریخ: ۱۳۹۲/۰۶/۲۷
از راهنمایی شما ممنونم.
نویسنده: علی
زمان: ۲۱:۳۹:۴۹ - تاریخ: ۱۳۹۲/۰۸/۲۲
با سلام
ببخشید من یک حلقه while تعریف کردم که هر زمان آن شرط برقرار شد حلقه for داخل حلقه while به پایان برسد حال سوال من این است که چگونه شمارنده در این حلقه تعریف کنم تا به من بگوید پس از برقراری شرط while حلقه چند بار تکرار شده تا به جواب رسیده است
ممنون
پاسخ: 
از حلقه هایی صحبت کرده اید که هیچ تصور روشنی از آنها نداریم!، لطفا به همراه سوال یک نمونه کد نیز قرار دهید، به نظر می توانید یک متغیر با نام فرضی loop و مقدار پیش فرض 0 در بیرون حلقه تعریف و درون حلقه با ++ مقدار آن را در هر دور افزایش دهید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




7 × 6
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form نادی
در:
سلام من دارم تو ری اکت از تگ p استفاده میکنم باید چیکار کنم که نقطه رو نچسبونه به اول خط!؟
۱۰:۵۹:۵۴ ۱۳۹۹/۰۱/۱۱

form amir
در:
سلام و ارادت سال نو مبارک ... من یه صفحه دارم که شامل یه سری پست هست و میخوام امکان لایک مطالب پست...
۱۳:۲۲:۲۱ ۱۳۹۹/۰۱/۱۰

form hadis
در:
سلام من تازه کارم میخاستم بدون اون قسمت درباره وبلاگ تعداد سطرها رو بیشتر و هم طرف راست و هم طرف چپ باشه میشه...
۰۴:۵۲:۱۸ ۱۳۹۹/۰۱/۱۰

form نیلوفر
در:
سلام من منوی سایتم فونتش بهم ریخته من هیچ دستکاری نکردم سایت وردپرسی هستش لطفا اگر اطلاعاتی دارین به من بدید ممنونم
۱۸:۵۹:۵۲ ۱۳۹۹/۰۱/۰۵

form محمود
در:
سلام. ممنون از راهنمایتان و متشکرم. دوباره مزاحم می شوم.
۱۰:۵۹:۴۷ ۱۳۹۹/۰۱/۰۵

form mahdi
در:
سلام استاد عزیز ، عذر میخوام من سوال زیاد میپرسم ، میخواستم بدونم چه توی css و چه javascript ما ie8 رو در نظر بگیریم...
۱۲:۱۳:۲۸ ۱۳۹۹/۰۱/۰۴

form محمود
در:
سلام و عرض ادب. وقتی روی فایل pdf روی سایتم کلیک می شود ،PDF در همان تب باز می شود ولی من می خام...
۱۱:۵۵:۱۸ ۱۳۹۹/۰۱/۰۴

form mahdi
در:
سلام استاد عزیز ، Bubble یا حباب دقیقا یعنی چی ؟ یعنی گسترده شدن رویداد یک عنصر تا عنصر فرزندش؟
۱۰:۴۱:۵۴ ۱۳۹۹/۰۱/۰۴

form D.A.Y.A.N.A
در:
سلام یه سوال داشتم وقتی که میخوام وب رو تو موتورهای جست و جو قرار بدیم اون که کد به ما...
۱۴:۵۳:۲۶ ۱۳۹۹/۰۱/۰۳

form محمود
در:
سلام و احترام. خیلی عالی بود، بسیار متشکر هستم، تمام.
۱۲:۵۴:۲۳ ۱۳۹۹/۰۱/۰۳

form mimi
در:
سلام. روی میهن بلاگ وبلاگ دارم و قالبش رو خودم تهیه کردم. چند ماهه که قالب وبلاگ همینه. رفرنس کدهای css در یک سایت...
۱۰:۰۲:۱۳ ۱۳۹۹/۰۱/۰۳

form محمود
در:
سلام استاد گرامی قبلن از اینکه سایت بسیار پر بار ، عالی و بدرد بخور دارید به شما تبریک می گویم. من می...
۱۳:۰۸:۲۰ ۱۳۹۹/۰۱/۰۲

form mahdi
در:
سلام استاد ، یه سوالی داشتم ، من باید دونه دونه ایونت ها رو یاد بگیرم ؟ چون خیلیاشون رو دیدم که اصلا الکی هستن...
۲۰:۲۸:۱۴ ۱۳۹۹/۰۱/۰۱

form mahdi
در:
سلام استاد عزیز و گرامی و با معرفت ، سال نو رو تبریک میگم بهت امیدوارم خودت و خانوادت سالم و سلامت و همدل و...
۱۹:۴۶:۴۰ ۱۳۹۸/۱۲/۲۹

form Meysam
در:
با سلام میخواستم وقتی پست وبلاگ باز میشه بجای post130 بیاد عنوان پست تو لینک قرار بگیره یجوری میخوام باشه که وقتی پست تو...
۱۱:۴۲:۴۴ ۱۳۹۸/۱۲/۲۸
آگهی