PDA

View Full Version : یه سوال ساده درباره نشناختن متغیرها



H_T_O_A
پنج شنبه 24 فروردین 1391, 00:19 صبح
سلام دوستان عزیز. حقیقتش برای جواب این سوال سرچ کردم چیزی گیرم نیومد. اگر سوال تکراریه یا اینکه مربوط به اینجا نیست مدیران محترم لطف کنند این پست رو جا به جا کنن یا لینک معرفی کنند که من به جوابم برسم.
من تازه شروع کردم به یادگیری PHP. طبق آموزش کتاب آموزشی برای نوشتن یک محاسبه گر ساده چهار دستوره یک فرم در صفحه ی HTML طراحی کردم و با اسکریپ های محاسباتیشو در یک فایل PHP نوشتم ولی وقتی که اجزا میکنم برنامه رو متغیر هایی که در فایل HTML نوشتم رو درفایل php نمیشناسه و این پیام رو میده:
Use of undefined constant val1...
کدهاشم اینه
فایل HTML:


<form action="Calc.php" method="post">
Value 1 : <input type="text" name="val1" size="12"/><br>
Value 2 : <input name="val2" type="text" size="12" /><br><br>
<input name="calc" type="radio" value="add" />Add<br>
<input name="calc" type="radio" value="sub" />Sub<br>
<input name="calc" type="radio" value="mul" />Mul<br>
<input name="calc" type="radio" value="div" />Div<br><br>
<input name="submit" type="submit" value="محاسبه" /> <br>
</form>

و کد فایل PHP:


<?php
if (($_POST[val1] == "") || ($_POST[val2] == "") || ($_POST[calc] == ""))
{
header("Loction: Calc.html");
echo"فیلد ها باید پر شود.";
exit;
}
if ($_POST[calc] == "add")
{
$result = $_POST[val1] + $_POST[val2];
}else if ($_POST[calc] == "sub")
{
$result = $_POST[val1] - $_POST[val2];
}else if ($_POST[calc] == "mul")
{
$result = $_POST[val1] * $_POST[val2];
}else if ($_POST[calc] == "div")
{
$result = $_POST[val1] / $_POST[val2];
}
?>

منتظر نظر لطفتون هستم

MMSHFE
پنج شنبه 24 فروردین 1391, 08:34 صبح
کد PHP رو اینطوری اصلاح کنید:


<?php
if(!isset($_POST['val1'], $_POST['val2'], $_POST['calc'])) {
header('Location: Calc.html');
exit();
}
$calc = $_POST['calc'];
$val1 = is_numeric($_POST['val1']) ? (float) $_POST['val1'] : 0;
$val2 = is_numeric($_POST['val2']) ? (float) $_POST['val2'] : 0;
switch($calc) {
case 'add':
echo ($val1 + $val2);
break;
case 'sub':
echo ($val1 - $val2);
break;
case 'mul':
echo ($val1 * $val2);
break;
case 'div':
echo $val2 != 0 ? ($val1 / $val2) : 'Error';
break;
default:
echo 'Invalid operator';
break;
}
?>

البته با همون if...elseif...else هم میشد ولی برای سادگی بیشتر من با switch نوشتم. ضمناً به روش چک کردن صحت مقادیر و... هم که توی کد گذاشتم دقت کنید. بعلاوه همونطور که میبینید اندیسهای آرایه POST_$ توی کوتیشن قرار گرفتن چون از نوع رشته ای هستند. موفق باشید.

H_T_O_A
پنج شنبه 24 فروردین 1391, 13:01 عصر
خیلی ممنون آقا. لطف کردید. ضمن اینکه به خاطر اون تاپیک آموزش PHP تون هم باید ازتون تشکر کنم. فقط چند تا سوال دیگه در این مورد
1 - یعنی باید همیشه متغیرهای HTML رو دوباره توی فایل PHP تعریف کرد؟؟؟
2 - isset! و is_numeric و float چه نقشی ایفا میکنند در این کد؟
3 - به نظر شما که به این زبون مسلط هستید نرم افزار برای طراحی یه سایت به زبون PHP چیه؟ من فعلا با دیریم ویور تمرین می‌کنم.
4 - و اینکه در مجموع شما استفاده از xampp رو پیشنهاد می‌کنید یا Wamp؟؟؟ ویندوزم هم سون 64 بیتی است.
خیلی ممنون دوست خوبم

MMSHFE
پنج شنبه 24 فروردین 1391, 16:35 عصر
1- همیشه نه، برای اطمینان از صحت اطلاعات من دوباره اطلاعات رو سمت سرور چک کردم تا احیاناً اطلاعات غیر عددی نوشته نشده باشه.
2- isset چک میکنه ببینه یک متغیر تعریف/ارسال شده یا نه. is_numeric چک میکنه ببینه مقدار داخل متغیر از نوع عددی هست یا نه و float هم که توی پرانتز نوشتم، مقدار داخل متغیر رو تبدیل به عدد اعشاری میکنه و داده های غیرعددی اون مثل حروف و... رو حذف میکنه.
3- راستشو بخواین من خودم از Rapid PHP و اخیراً بیشتر از ++Notepad استفاده میکنم ولی در پروژه های بزرگ به سراغ Zend Studio و Aptana Studio میرم.
4- من شخصاً با Wamp راحتتر هستم. بخصوص که اگه Valid IP داشته باشین، میتونید با Onlineکردن سرور، کامپیوتر خودتون رو به یک هاستینگ تبدیل کنید و نیازی به خرید هاست نداشته باشین. امکانات اشکال زدایی اون هم مثل XDebug و... خیلی خوبه. دردسرش هم کمتره. میتونید نسخه 64بیتی آخرین ورژنش یعنی 2.2d رو از سایتم که لینکش توی امضام هست دانلود کنید (بخش دریافت فایل - شاخه نرم افزار)
موفق باشید.

H_T_O_A
پنج شنبه 24 فروردین 1391, 17:24 عصر
ممنون از سعه‌ی صدر و پاسخ‌های صبورانتون.

حقیقتش من هم از wamp استفاده می‌کردم. امروز xampp رو نصب کردم و برنامه‌ام درست کار کرد. همون کدها بدون اینکه تغییرشون بدم. به این نتیجه رسیدم که ومپ نصب شدم ناقص بوده گویا. فایلی رو هم که شما گفتید حتما دانلود می‌کنم.

یعنی به نظر شما واقعا Zend Studio و Aptana Studio از Dreamweaver قوی‌تر و بهتر هستند؟ کجا میشه این نرم افزار ها رو با هم مقایسه کرد؟ اگه بخوام یه محیط خوب برای نوشتن کدهای HTML, PHP, Java Script, Ajax, CSS و... (در مجموع محیطی که بشه باهاش یه سایت کامل طراحی و کدنویسی کرد) انتخاب کنم از کجا باید اطلاعات کسب کنم؟؟؟

ان شاء‌الله که خیلی زحمتتون ندم
منتظرم

MMSHFE
جمعه 25 فروردین 1391, 12:20 عصر
دوست عزیز، WAMP شما درست نصب شده بوده. منتها WAMP بطور پیشفرض سختگیرتر از XAMPP هست و خطاهای جزئی مثل استفاده از متغیرهای تعریف نشده و... رو با هشدار بهتون اطلاع میده ولی XAMPP با تنظیمات پیشفرضش اینطوری نیست و فقط خطاهای جدی توی کار رو نشون میده (مثل جا انداختن ; انتهای دستور که باعث عدم اجرای درست اون دستور و دستور بعدیش میشه). پیشنهاد میکنم از همون WAMP استفاده کنید.
ضمناً باید دقت کنید که DW یک محیط همه منظوره هست ولی Zend Studio و Aptana Studio در اصل مخصوص PHP طراحی شدن. البته Aptana هم کمی همه منظوره هست ولی Zend بطور تخصصی برای PHP ساخته شده و میدونید که Zend شرکت رسمی پشتیبانی PHP هست. البته برای کدنویسی با سایر زبانهایی که گفتین هم امکانات خیلی خوبی داره اما چون یکم تنظیم کردنش مشکله، اکثراً به سراغ Aptana میرن.
موفق باشید.

H_T_O_A
جمعه 25 فروردین 1391, 12:40 عصر
ممنون آقای مدیر بخش عزیز. موفق باشید