دستورات شرطی (Conditional Statements) در PHP

دستورات شرطی (Conditional Statments) یکی از پرکاربردترین مفاهیم در دنیای زبان های برنامه نویسی و از جمله در برنامه نویسی وب و PHP به شمار می روند، در یک تعریف ساده با این دستورات برقرار یا برقرار نبودن شرطی را در یک مقایسه بررسی می کنیم و بر اساس مثبت (true) یا منفی (false) بودن پاسخ، مطابق با خواست و نیازمان در دو راهی های برنامه ها تصمیم گرفته و فرآیندی را انجام می دهیم، به طور مثال در دنیای واقعی می گوییم اگر تمرین کافی داشته باشیم موفق می شویم و در غیر اینصورت شکست خواهیم خورد یا اگر هوا کاملا صاف و آفتابی باشد به کوهنوردی می رویم در غیر اینصورت اگر هوا بارانی نبود به جنگل خواهیم رفت و در غیر اینصورت در خانه خواهیم ماند!، البته تطبیق دقیق دستورات برنامه نویسی با رویدادهای دنیای واقعی خالی از اشکال نیست اما برای شروع بد نیست بدانیم که مشابه این نوع ارزیابی ها در برنامه نویسی وب و به طور خاص در PHP با دستورات شرطی شامل if، else و elseif صورت می گیرد.
دستور شرطی if در PHP
نخستین عبارت کلیدی که در دستورات شرطی استفاده می شود "اگر" است که در برنامه نویسی به صورت "if" به کار می رود، با دستور if درستی یا نادرستی پاسخ ارزیابی شرطی را در مقایسه بررسی می کنیم، به طور مثال اگر متغیری با نام status برای تعیین وضعیت ثبت نام کاربران داشته باشیم و بخواهیم بررسی کنیم که آیا متغیر status برابر 1 است یا خیر، به صورت ساده می نویسیم: اگر (if) متغیر status برابر با 1 باشد (رابطه true باشد) دستورات بین {} را اجرا کن:
<?php
$status = 1;
if($status == 1) {
echo "کاربر گرامی شما در سایت ثبت نام کرده اید!";
}
?>
بر اساس مثال بالا مقدار پیش فرض متغیر status برابر 1 تعریف شده و بررسی رابطه if درست (true) خواهد بود در نتیجه دستورات بین علامت های {} اجرا خواهند شد، اما در مثال زیر بررسی رابطه if مقادیر نادرست (false) خواهد داشت، چرا که وضعیت ثبت نام کاربر 1 است اما در ارزیابی گفته ایم که اگر وضعیت او 1 نبود دستورات را انجام بدهد.<?php
$status = 1;
if($status != 1) {
echo "کاربر گرامی شما هنوز در سایت ثبت نام نکرده اید!";
}
?>
همانطور که در بحث عملگرها (Operators) در PHP گفتیم، عملگر == یعنی دو طرف رابطه برابر باشند و عملگر =! یعنی دو طرف رابطه برابر نباشند، در نمونه کد بالا دستورات بین علامت های {} اجرا نخواهند شد چرا که شرط آن برقرار نیست (متغیر status برابر 1 است و مقایسه نابرابر بودن آن false خواهد بود).دستور شرطی else در PHP
شاید از خود بپرسیم اگر شرط if درست (true) نشد آنوقت تکلیف چیست؟! برنامه نویس خوب باید حساب همه چیز را کرده باشد و این چیزی است که شکل پیشرفته آن را هوش مصنوعی می نامند، پس باید شرایط بعد از برقرار نبودن رابطه if را هم تعریف کنیم، برای این کار از دستور شرطی else به معنی "در غیر اینصورت" استفاده می کنیم.
else در واقع جایگزینی برای if است یعنی اگر رابطه if درست نباشد (false باشد)، آنگاه مقادیر بین علامت های {} در else اجرا می شود، مثال زیر گویا است.
<?php
$status = 1;
if($status == 0) {
echo "کاربر گرامی شما هنوز در سایت ثبت نام نکرده اید!";
} else{
echo "کاربر گرامی شما در سایت ثبت نام کرده اید!";
}
?>
نمونه کد بالا به صورت ساده اینطور تفسیر می شود:متغیر status در خط اول برابر 1 تعریف شده است، آنگاه در دستور if برابر بودن status با 0 بررسی می شود، اگر رابطه درست باشد (یعنی کاربر هنوز در سایت ثبت نام نکرده باشد)، مقادیر بین {} در بررسی if اجرا می شود و نوبت به else نمی رسد، اما اگر کاربر قبلا در سایت ثبت نام کرده باشد، ارزیابی رابطه if اول صحیح نیست (چون رابطه می گوید اگر status برابر 0 باشد در حالی که مقدار پیش فرض status را برابر 1 تنظیم کرده ایم) در نتیجه نوبت اجرای دستور else است که پیام "کاربر گرامی شما در سایت ثبت نام کرده اید!" را نمایش می دهد.
مثالی دیگر:
<?php
$country = "ایران";
$state = "شمال";
if($country != '' && $state != ''){
echo "کاربر گرامی شما از کشور $country و منطقه $state هستید.";
} else{
echo "کاربر گرامی لطفا نام کشور و منطقه را انتخاب نمائید!";
}
?>
نتیجه اجرای نمونه کد بالا به شکل زیر خواهد بود:کاربر گرامی شما از کشور ایران و منطقه شمال هستید.
برای بررسی بیشتر کافی است کد بالا را در لوکال هاست یا سرور در یک فایل PHP درج کرده و در مرورگر فراخوانی و اجرا کنیم تا نتیجه کار را ببینیم.دستور شرطی elseif در PHP
دستور elseif به معنی "در غیر اینصورت اگر" مرحله ای مابین دستور if و else است، به فرض اگر بخواهیم قبل از خاتمه دادن به شرط if با دستور else، چند ارزیابی دیگر را نیز انجام دهیم از elseif استفاده می کنیم، هر شرط elseif با نادرست شدن ارزیابی شرط if (یا elseif) قبل از خود بررسی می شود، اگر نتیجه بررسی شرط elseif نادرست و false شود قاعدتا مفسر PHP از آن عبور کرده و ادامه کدها پردازش می شوند، به طور مثال:
<?php
$num = 1000;
$max = 2000;
if($num > $max) {
echo "متغیر num از max بزرگتر است!";
} elseif($num == $max) {
echo "متغیر num با max برابر است!";
} else{
echo "متغیر num از max کوچکتر است!";
}
?>
خروجی:متغیر num از max کوچکتر است!
در نمونه کد بالا بر اساس متغیرهای تعریف شده نتیجه ارزیابی دستورات if و elseif نادرست خواهد بود و در نتیجه بخش سوم یعنی else اجرا می شود، در مثال زیر کد را به نحوی تغییر داده ایم تا قسمت دوم یعنی elseif اجرا شود:<?php
$num = 2000;
$max = 2000;
if($num > $max) {
echo "متغیر num از max بزرگتر است!";
} elseif($num == $max) {
echo "متغیر num با max برابر است!";
} else{
echo "متغیر num از max کوچکتر است!";
}
?>
خروجی:متغیر num با max برابر است!
نکته مهم اینکه از دستور elseif می توانیم به هر تعداد که بخواهیم مابین if و else استفاده کنیم، مفسر PHP به ترتیب از بالا به پائین مورد به مورد برقرار بودن رابطه آنها را بررسی کرده و اگر یکی از ارزیابی ها درست (true) باشد مقادیر داخل علامت های {} اجرا شده و سلسله دستورات شرطی در همان نقطه خاتمه پیدا می کند.<?php
$a = true;
$b = false;
$c = null;
if($a == false) {
echo '$a == false';
} elseif($b == true){
echo '$b == true';
} elseif($c != null){
echo '$c != null';
} elseif($a == false || $b == false){
echo '$a == false || $b == false';
} else{
echo 'else{}';
}
?>
قاعدتا با توضیحات ارائه شده حدس نتیجه اجرای این کد چندان سخت نیست و آخرین elseif اجرا خواهد شد چرا که متغییر b برابر false مقداردهی شده است (در غیر اینصورت اگر متغیر a برابر با true یا متغیر b برابر با false باشد).مختصرنویسی با عملگرهای سه گانه (Ternary Operators) در PHP
در برنامه نویسی پروژه های کاربردی به دلایل مختلف ممکن است نیاز به مختصرنویسی دستورات شرطی elseif ،if و else باشد که در پاسخ به این نیاز در اغلب زبان ها این هدف با عملگرهای سه گانه یا Ternary Operators تحقق می یابد، منظور از عملگرهای سه گانه ترکیب مقایسه با کاراکترهای ? و : است، در شیوه مختصرنویسی علامت ? جایگزین if و علامت : جایگزین else می شود، به طور مثال اگر دستور شرطی در حالت عادی به شکل زیر باشد:
<?php
$point = 14;
$num = 12;
if($point < $num) {
echo 'if';
} else{
echo 'else';
}
?>
شیوه مختصرنویسی آن به صورت زیر خواهد بود:<?php
$point = 14;
$num = 12;
echo ($point < $num) ? 'if' : 'else';
?>
با ترکیب و توسعه این روش حتی می توانیم دستور شرطی else if را نیز به صورت مختصرنویسی بنویسیم، به طور مثال:<?php
$point = 14;
$num = 14;
echo ($point < $num) ? 'if' : ($point <= $num) ? 'elseif' : 'else';
?>
استفاده از شیوه مختصر نویسی در برنامه نویسی دلخواه است و معمولا برای نوشتن شرط های ساده از آن استفاده می کنیم.نکته: مختصر نویسی در زبان جاوا اسکریپت با برنامه نویسی PHP از لحاظ Syntax اندکی متفاوت است.
در جاوا اسکریپت:
(point < num) ? alert('if') : (point <= num) ? alert('else if') : alert('else');
در PHP:echo ($point < $num) ? 'if' : ($point <= $num) ? 'elseif' : 'else';

توابع کار با آرایه در PHP - بخش اول
حلقه for، foreach و while در PHP
تعریف و استفاده از متغیر (Variable) در PHP
دستور switch و case در PHP
آموزش برنامه نویسی وب با PHP


ولی یه سوال دارم . من دارم رو برنامه ای کار میکنم که امنیتش خیلی باید بالا باشه و با این روش درسته کد تصادفی رو به صفحه دیگه میفرسته ولی همون کد بالای صفحه تو نوار جستجو دیده میشه .
من میخوام همون کد رو بدون دیده شدن تو نوار جستجو بفرستم . ایا امکانش هست؟
من میخوام یک عدد تصادفی ایجاد کنم و اون رو به یک فایل php دیگر بفرستم و همون عدد تصادفی رو تو صفحه دوم نشون بدم .
میشه کد هاشو برام بفرستید؟
$chars = "abcdefghijkmnopqrstuvwxyz0123456789";
$chars = "0123456789";
من میخواستم با استفاده از دستور if یه کدی رو بنویسم ولی هرکاری کردم نشد.
کد انتقال دادن به صفحه دیگر اینه :
<?php
header("Location: http://google.com");
?>
خوب من الان میخوام از یک فایل php به یک فایل php دیگه منتقل بشم و میخوام یک دستور را اگر از فایل php اول به فایل دوم منتقل شده باشد انجام دهد . و در صورتی که مستقیم فایل php دوم باز شود هیچ عملی انجام نشود .امیدوارم منظورم و فهمیده باشید
میشه راهنمایی کنید ؟
<?php
function createRandomCode($length = 10) {
$chars = "abcdefghijkmnopqrstuvwxyz0123456789";
srand((double)microtime() * 1000000);
$i = 0;
$code = null;
while ($i <= $length) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$code = $code . $tmp;
$i++;
}
return $code;
}
$code = createRandomCode(20);
header("Location: http://example.com/?code=" . $code);
?>
در نهایت در فایل دوم با متد GET کد را دریافت کرده و با دیتابیس تطبیق می دهیم، به طور مثال:<?php
$code = @$_GET['code'];
if($code == $db_code){
//کد معتبر است
} else{
//کد معتبر نیست
}
?>
این صرفا یک الگو جهت راهنمایی بیشتر بود، قاعدتا باید کدهای مربوط به دیتابیس را خودتان بنویسید.من یک دستور شرطی نوشتم اما کار نمیکنه اگه ممکنه کمکم کنید.
https://gist.github.com/anonymous/d6eb225579acc620edb0e07670ce7ec3
در این دستور url من متغیر هست و من نمیدونم چه طور باید قبل از دستور شرطی تعریفش کنمdo_shortcode(\'[wpwebgrabber
decode="default"]\');
مثل همیشه عالی....
بله این کد رو در همین اینپاد نوشتم و فراموش کردم == بذارم و برای رسوندن صورت سوالم نوشتم...
ممنون
ببخشید یه سوال داشتم
$int1 = 3;
echo ($int1 == 1) ? "Ah" : ($int1 == 2) ? "Gk" : ($int1 == 3) ? "On" : ($int1 == 4) ? "Xe" : "No";
این مدل شرط نوشتن مشکل داره؟ حتما باید شرط های بعدی توی پرانتز باشن مثل نمونه زیر؟$int1 = 3;
echo ($int1 == 1) ? "Ah" : (($int1 == 2) ? "Gk" : (($int1 == 3) ? "On" : (($int1 == 4) ? "Xe" : "No")));
و نام این مدل شرط نوشتن با علامت سوال و دو نقطه چیه؟متشکرم
نکته: برای مقایسه برابری دو طرف از علامت == استفاده کنید، در کدها از علامت = استفاده شده که به معنی مقداردهی به متغیر است (کد اصلاح شد!).
yoursite.com/index.php?w=1&n=2
در سمت سرور با کدهای PHP می توانیم موارد ارسالی را بررسی کنیم، به فرض:<?php
$w = @$_GET['w'];
$n = @$_GET['n'];
if(!isset($w) || empty($w)){
echo 'W Error!';
}
if(!isset($n) || empty($n)){
echo 'N Error!';
}
?>
میخواستم بدونم چجوری میشه محتویات یک textarea رو به فایل پی اچ پی ارسال کنم و برسیش کنه که اگر در محتویاتش بطور مثال نوشته ای با مضمون خاصی بود حذف یا تغییر بده به متن دلخواه تا اینجاش سادس اما لازمه که مضمونهای متعددی رو همزمان برسی کنه اگر نبود که هیچ ولی اگر بود تغییرات رو اعمال کنه و اینکه بطور مثال اگر کدی با پسوند جاوا اسکریپت داخلش بود کلا کد رو پاک کنه تا تگ پایانیش و دیگه مجبور نباشم کل محتوای کد رو بهش بدم یعنی شرط بزارم که اگه کد جاوا اسکریپت داخلش بود و این کد داخلش فلان کلمه بود کلا کد رو تا بسته شدن تگ جاوا پاک و یا با کلمه خاصی جایگزینش کنه و بعد برسی و انجام کار محتویات نهایی رو بهم ارسال کنه داخل textarea
ممنون میشم اگه وقتش رو دارید یک کد مشابه برام بگذارید چون من بیشتر عملی میفهمم تا تئوری اگر هم وقتش رو ندارید ممنون میشم لاقل منبعی بدرد بخور بهم بدید مرسی و وقتتون بخیر
<?php
$array = array('بد', 'کلمه');
$string = "جمله حاوی کلمه مد نظر شما";
function containsBadWord($str, $array) {
//trim & replace multiple white spaces
$str = trim($str);
$str = preg_replace('/\s+/', ' ', $str);
$word_list = explode(" ", $str);
foreach($word_list as $word) {
if(in_array($word, $array)) {
return true;
}
}
return false;
}
if(!containsBadWord($string, $array)) {
echo 0;
} else {
echo 1;
}
?>
$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);
من یک کد دارم که بخش خطاش برای دستور شرطش هست. به اینصورت که بنده فایل اکسل که اطلاعات موجودی محصول من هست و میخوام به روز رسانی بشه رو بارگذاری میکنم و برای متغیر counts که موجودی هست شرطی گذاشتم که اگر مساوی 0 بود بگه که موجود نیست و اگه نه بگه موجود است. ولی همه رو میزنه موجو نیست (false):
حذف شد
http://php.net/manual/en/function.fgetcsv.php
if($text == 'text1')
$text_reply = 'text2';
ولی نمیشه تمام کلمات فارسی رو نوشت مثلا میخوام کسی نوشت خوبی جواب بده مرسی حالا چه باشه تو خوبی چه شما خوبی چه خیلی خوبینمیخوام دونه دونه این کلمات رو بنویسم میخوام جوری if ساخته بشه که مثلا مینویسم خوبی جوابش هست مرسی هر سوالی طرف بپرسه که توش کلمه ی خوبی باشه این جواب رو بده نه اینکه کاملا متنش شبیهش باشه
<?php
$string = 'این یک تستی است!';
$array = array(
0 => '/تست/u',
1 => '/متن/u',
);
for($i = 0; $i < count($array); $i++){
if(preg_match($array[$i], $string)){
echo $array[$i] . ' => ' . 1;
}
else{
echo $array[$i] . ' => ' . 0;
}
echo '<br>';
}
?>
این قسمت که این کد رو تعریف کرده یه فایل php هست شما لطف کنید بفرمایید که برای متغیر
{$post['profilefield']}{$post['warninglevel']}
چطور چنین شرطی بنویسم و کلاس زیر رو بهش اختصاص بدم.class="postbit_field"
اجازه بدید مطلب رو باز تر کنم.تو mybb یه جایی هست که اخطار های کاربر رو بهش نشون میده و تیبل مذکور دقیقا مکان همان اخطارها رو به کاربر نشون میده.
با کلاس تعریف شده تو css بهش فهموندیم که به این جدول خصوصیت های دور خط با کمی سایه و وسط چین بودن رو بده.
حالا هر کاربر اخطارهای مربوط به خودش رو میتونه ببینه اما برای بقیه کاربرا اخطار مربوط به کاربر دیگه ای رو نشون نمیده و در واقع فقط یه جدول با دور خط و خصوصیات خالی رو به کاربری که اخطار مال خودش نیست نشون میده .
حالا قصد داریم این جدول خالی که فقط خصوصیات داره رو از دید کاربری که اخطار مال خودش نیست رو برداریم.
لطفا کمکم کنید ظاهر سایت خراب شده!
بزرگوار برای کد زیر چطور میشه یه شرط بنویسم طوری که اگر جدول مورد نظر اطلاعاتی نداشت نمایش داده نشود.
<table>
<tr>
<td class="postbit_field", style="width:402px;display:table !important;">{$post['profilefield']}{$post['warninglevel']}</td>
</table>
این کد مربوط میشه به قسمتی از اسکریپت mybbممنون از این آموزش خوبتون
من یه مشکلی دارم در قسمت مقایسه تاریخ ها با هم
دو روش پیدا کردم هر دوتاش هم بدون مشکل کار می کنه
فقط می خواستم ببینم کدوم روش رو پیشنهاد می کنید؟
اصلا روش دیگری باید باشه؟
بررسی کنید:
<?php
/*
one IF
*/
$date = '2019-1-25';
if(date('Y-m-d') < $date){
echo '1';
}
/*
two IF
*/
$date = '2019-1-25';
if(date('Y-m-d') < date($date)){
echo '1';
}
?>
موفق باشید.$today = date("Y-m-d");
$expire = date("2019-1-25")
$today_time = strtotime($today);
$expire_time = strtotime($expire);
if ($expire_time < $today_time) { /* do Something */ }
می خواستم ببینم چرا else دومی رو قبول نمی کنه؟؟
a=(input('salary='))
if(a<999999):
print('not tax')
else:
if(a>100000)&(a<1799999):
print(a*0.95
else:
if(a>180000)&(a<2499999)
print(a*0.92)
else:
if(a<2500000):
print(a*0.90)
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.