آیا این کشف یک ایراد در طراحی الگوی کنترل منطق شرطی در php است؟!!!!

hamidfayazi

New Member
سلام به همگی دوستان متخصص

لطفا به این مورد دقت فرمایید

من در حال طراحی یک سبد خرید ساده با دیتابیس بودم
مشاهده کردم که بعد از تعریف سشن کوکی در بدنه شرط اول، بدنه Else نیر در هر حال اجرا میشود
یعنی وجود کوکی را دوباره چک میکند
این نشان میدهد که در هنگام خواندن else شرط دوباره چک میشود که این درست نیست.
در برنامه های دیگر مانند سی شارپ شرط فقط یکبار در هر اجرا چک میشود
به کد زیر دقت کنید
منتظر نظرات هستم

[PHPS]

$params=(count($_POST))?$_POST:$_GET;

if (! empty ($params['buy'])){


$buy=($params['buy']);
buying($buy);
}

function buying($buy){
echo $_COOKIE["TestCookie"];
if(! isset($_COOKIE["TestCookie"]) && empty($_COOKIE["TestCookie"])){

session_start();
$bCustomerId=(strtotime(date('Y-m-d H:i:s'))*strtotime(date('Y-m-d H:i:s')))/strtotime(date('Y-m-d H:i:s')).session_id();
$codeM=$bCustomerId;
setcookie("TestCookie", $bCustomerId);
$bCustomerId=$bCustomerId;
$bPCode=$buy;

$connect=new DataLayer();
$connect->Connect();
$link=$connect->link_con;

$query="insert into db (bCustomerId,bPCode,bQuantity) values ('$bCustomerId','$bPCode',1)";
mysql_query($query,$link)or die ("Couldnt add data to basket table".mysql_error());
mysql_close($link);

}
else
{
$bCustomerId=$_COOKIE["TestCookie"];
$bPCode=$buy;

$connect=new DataLayer();
$connect->Connect();
$link2=$connect->link_con;

$query2="insert into db (bCustomerId,bPCode,bQuantity) values ('$bCustomerId','$bPCode','2')";
mysql_query($query2,$link2)or die ("Couldnt add data to basket table".mysql_error());
mysql_close($link2);



}





[/PHPS]
 

Y.P.Y

Well-Known Member
فکر نمی کنم.
چون این قالب کد شما به هزاراش شکل نوشته شده و باگ های احتمالیش هم در اومده
ولی باز هم باید کل کد بررسی بشه.
می تونی در آخر هر شرط/براکت یه return بزاری تا بطور صریح از تابع خارج بشه - شاید درست شد
 

hamidfayazi

New Member
بله. با قطعه کد زیر بصورت امتحانی میشه فهمید که این ظریه درست نیست
چون با اینکه متغیر شرط تغییر میکنه ولی همواره بلوک اول اجرا میشه

[PHPS]


$a="hamid";
if ($a=="hamid")
{
print "11111<br>";
print $a;
$a="ali";
}
else
{
print "22222<br>";
print $a;
}


[/PHPS]

ممنون
 

Y.P.Y

Well-Known Member
اون کوئری داخل شرط دوم رو اینطوری بنویسید بهتر و خواناتره:
[PHPS]$query="insert into `db` (`bCustomerId`, `bPCode`, `bQuantity`) values ('{$bCustomerId}', '{$bPCode}', 1);";[/PHPS]
 

جدیدترین ارسال ها

بالا