PDA

View Full Version : بررسی همزمان چند شرط



saeidkhphp
شنبه 15 آذر 1393, 15:31 عصر
سلام دوستان ، ببخشید باز در نوشتن یه کد دچار مشکل شدم که تو کتابایی که داشتم نبود و مجبور شدم بپرسم ، کد زیر رو بررسی کنید میخام بدونم چجوری میتونم اگه همزمان دو تا ورودی رو موجودیتشون رو بررسی کردیم با isset حالا بعدش بتونیم باهاشون کار کنیم . ممنونم ازتون


<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>formv</title>
</head>
<form action="" method="post">
<input type="text" name="num1" />
<input type="submit" value="Vared konid Number 1" />
</form>

<form action="" method="post">
<input type="text" name="num2" />
<input type="submit" value="Vared konid Number 2" />
</form>

<?php
if(isset($_POST['num1']) && isset($_POST['num2']))
{
$number1=$_POST['num1'];
$number2=$_POST['num2'];
echo $number1;
echo "<br>";
echo $number1;
}
else
{
echo "hanuz hichi vared nashode";
}
?>
<body>
</body>
</html>



البته یه بار هم همین برنامه رو قسمت html ش رو جدا نوشتم و این شکلیش کردم باز جواب نداد ، اگه ممکنه بگین کلن لینک کردن اکشن فرم به صفحه پی اچ پی بهتره یا نه اگه تو یه صفحه باشه ممنون ازتون :)

کد نوع جدا با html کجاش مشکل داره که کار برنامه مثه حالت قبل جواب نمیده :(


<form action="new1" method="post">
<input type="text" name="num1" />
<input type="submit" value="Vared konid Number 1" />
</form>

<form action="new1" method="post">
<input type="text" name="num2" />
<input type="submit" value="Vared konid Number 2" />
</form>


کد php این حالت دوم هم مثه همون نوشتم و باز جواب نداد :(

hsgpro
شنبه 15 آذر 1393, 15:58 عصر
سلام
فرقی نداره که اکشن فرم خود فایل باشه یا فایل جدید در هر دو صورت بررسی ها و شرط ها یکسان هست فقط اگه اکشن فرم خود صفحه باشه ساده تره.
برای اینکه بررسی کنید که فرم ارسال شده یا نه هم حتماً نیاز نیست که موجود بودن متغیر ها رو با isset بررسی کنید می تونید فقط بررسی کنید که متد درخواست (REQUEST_METHOD) به صورت POST هست یا نه مثل زیر:



<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
// فرم ارسال شده
}
else
{
// فرم هنوز ارسال نشده
}
?>


بعد کد شما از لحاظ امنیتی ضعیفه شما باید مقدار های که post میشن رو حتماً حتماً بررسی کنید چون همین فرم ساده اگه مقدار هاش بهینه نشن ممکنه باعث حمله های تزریق کد بشه و مثلاً کسی به جای مقداری که باید بنویسه کد جاوا اسکریپت بنویسه و در صفحه جدید که شما مقدار ها رو echo کردید کد جاوا اسکریپت اجرا بشه.

برای اینکه ورودی های فرم رو امن کنید هم می تونید با تابع زیر این کار رو انجام بدید اینطوری دیگه کسی نمی تونه کد جاوا اسکریپت یا هر چیز دیگه ای رو به صفحه شما تزریق کنه:



<?php
function test_input($text){
return trim(stripslashes(htmlspecialchars($text)));
}
$number1=test_input($_POST['num1']);
$number2=test_input($_POST['num2']);
?>


اگر اطلاعات فرم رو در دیتابیس هم ذخیره میکنید حتماً باید پس از ایجاد کانکشن به دیتابیس با تابع mysqli_real_escape_string مقدار ها رو برای ذخیره در دیتابیس هم امن کنید تا اگه کسی Query دیتابیسی نوشته بوده در دیتابیس شما اجرا نشه.

saeidkhphp
شنبه 15 آذر 1393, 16:24 عصر
ممنون از جوابت hsgpro جان ، در مورد اون تابع امنیتی هم واقعن ممنون ، من اخه رشتم مکانیکه و چون فقط واقعن به کد نویسی اونم بیشتر تحت وب علاقه دارم تازه شروع به خوندنش کردم ، فقط میشه یه توضیح کوچولو در مورد خود isset و اینکه چجوری واقعن بشه همزمان چندتا شرط رو بررسی کرد ؟ یعنی این علامتی که خوندم && چجوری ت و if بذاریم ، بازم ممنون بابت اون متد request اونو هم حتمن تست میکنم

بعد تو متد Request که با post مقایسه شده این با اون پستی که توی کد html اول صفحه هست مرتبطه دیگه؟؟ یعنی اگه اون Get میبود اینم get میشد؟
بعد اینکه من 2 تا مغیر از کاربر محترم :) میگیرم تو کد html ، آیا تو این if ($_SERVER['REQUEST_METHOD'] === 'POST')

هر 2 تاش بررسی میشه ؟ چون 2 تا فرم داریم در واقع که میخاهیم همزمان اگه مقدار داشتن بقیه شرط اجرا بشه
ببخشید سوالام زیاد شد :)

hsgpro
شنبه 15 آذر 1393, 16:35 عصر
علامت && در شرط ها یعنی و (and) که چند شرط رو با همدیگه اجرا میکنه و اگه هر دو تا درست بود اجازه اجرای باقی کد رو میده.
علامت || هم در شرط ها یعنی یا (or) که چند شرط رو اجرا میکنه اما اگه فقط یکیش هم درست بود اجازه اجرای باقی کد رو میده.

استفاده اش هم که همینطوری که بالا گذاشتید یعنی بین دو تا شرط قرار میگیره حالا می تونه پرانتز های باز و بسته باشن یا نباشن پرانتز ها در شرط ها چیز واجبی نیستن می تونن نباشن بیشتر برای زیبا کردن کد و خوانایی بیشتر پرانتز ها رو تو شرط ها میذارن.البته در شرط های ریاضی پرانتز ها باعث ایجاد اولویت محاسبه میشه همانطور که در معادلات ریاضی پرانتز ها اول محاسبه میشن.

isset هم یه تابع است که بررسی میکنه چیزی وجود داره یا نه مثل اسمش که is set هست تابع های شبیه isset هم هستند مثل empty که بررسی میکنه که مقدار خالی است یا نه.

متد Request هم می تونه POST یا GET باشه به صورت پیش فرض همه صفحات اجرا شده در php دارای متد GET هستند متد POST وقتی ایجاد میشه که فرم (Form) در HTML ارسال شود.

با شرط این if ($_SERVER['REQUEST_METHOD'] === 'POST') فقط بررسی میشه که آیا فرم ارسال شده یا نه متغیر ها رو باید جدا بررسی و فراخوانی کنید.می تونید پس از اجرای تابع test_input که در بالا گذاشتم برای هر مقدار با تابع empty ببینید خالی هست یا نه.با گذاشتن علامت تعجب ! در شرط ها می تونید اونا رو برعکس کنید یعنی empty! بررسی میکنه که پر باشه نه خالی.

مثل نمونه زیر:



<?php
function test_input($text){
return trim(stripslashes(htmlspecialchars($text)));
}
$number1=test_input($_POST['num1']);
$number2=test_input($_POST['num2']);
if (!empty($number1) && !empty($number2)) {
// متغیر ها خالی نیستن
} else {
// متغیر ها خالی هستن
}
?>