• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

آموزش پي اچ پي (فرم ها) – قسمت نهم

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
كار كردن با فرم ها
خوب در اين قسمت ميخواهيم ببينيم چجوري با استفاده از فرمها اطلاعات رو بين صفحات ارسال كنيم.
خوب يه مثال ساده ولي پركاربرد :
PHP:
#this page name is a.php
<form action="b.php" method="get">
<input type="text" name="user">
<input type="submit" name="btn">
</form>
قصد داريم اطلاعات يك تكست باكس رو كه در اين صفحه قرار داره توسط صفحه دوم به اسم b.php بخونيم پس اسم اين صفحه رو كه هيچ كد پي اچ پي توش استفاده نكرديم ميزاريم a.php و ذخيره ميكنيم.
حالا ميرسيم به صفحه دوم اين كد رو تو صفحه دوم قرار بديد .
<?php
print "$user"
?>
خيلي ساده و به اين صورت اطلاعات رو ميگيريم يوزر اسم تكست باكسي هست كه تو فرم اول قرار داشت.
بقيه كد ها هم اچ تي ام هست و نيازي به توضيح نيست فقط در مورد get بگم كه اين دستور متغيير ها رو موقع ارسال تو ادرس نشون داده ميشه و شايد بعضي جاها زياد راه مطمئني نباشه ولي اگه بجاي اين عبارت از post استفاده كنيم ديگه در ادرس نشون داده نميشه .
تركيب كردن پي اچ پي با اچ تي ام ال :

به اين كد نگاه كنيد :
PHP:
<form action="<?php print $PHP_SELF?>" method="POST">

name: <input type="text" name="user">

</form>

وقتي اين فرم رو اجرا كنيم فرم همواره خودشو صدا ميزنه چون ما از عبارت $PHP_SELF استفاده كرده ايم توجه كنيد كه ما هيچ دكمه اي رو صفحه قرار نداديم و در بيشتر مرورگرها با زدن كليد اينتر ميتونيم فرم رو اجرا كنيم .
البته در كد بالا هيچ اطلاعاتي رو بيرون نميده ولي در كد زير ميخواهيم يه بازي ساده بنويسيم تا بيشتر متوجه بشيم :
PHP:
<?php
$num_guess=42;
$msg=" ";
if (! Isset($guess))
{
$msg="welcome To This Little Game";
}
elseif ($guess>$num_guess)
{
$msg="number $guess is  Big! Try Smaller number.";
}
elseif($guess<$num_$guess)
{
$msg="Number $guess is Small ! Try Big Number";
}
else // vagti mosavi bashe
{
$msg="Well Done You Win";
}
?>
توضيحات : با دستور ! كه اشنا هستيد همون دستور نقض ، اما دستور isset اين دستور چك ميكنه ببينه اصلا اطلاعاتي وارد شده يا نه ما در خط اول چك ميكنيم ببينم (اگه نه اطلاعاتي وارد شده) انگاه پيغام خوش آمد گويي رو پخش كن اين كد موقعي ميتونه اتفاق بيفته كه برا اولين بار صفحه رو باز كرده يا هيچ اطلاعاتي وارد نكرده .
حالا ميرسيم به قسمت اچ تي ام ال اين كد رو زير كد بالايي قرار بديد
PHP:
<h1>
<?php print $msg ?>
</h1> 
<form action="<?php print $PHP_SELF?>" method="POST">
Guess Number : <input type="text" name="guess">
</form>
خوب اين كد نيز اطلاعات رو از كاربر ميگيره و صفحه رو دوباره اجرا ميكنه و پيغام مناسب رو پخش ميكنه .
ميخوايم با يه دستور جديد و كاربردي اشنا بشيم فرض كنيم بعد از اينكه كاربر در بازي بالا برنده شد ميخواهيم او را به يه صفحه جديد بفرستيم يعني ريدايركت كنيم ميتونيم از دستور زير استفاده كنيم اين دستور رو بجاي پيغامي بزاريد كه وقتي كاربر برنده ميشه انتخاب ميشه يعني بعد از else قرار بديد :
PHP:
header("Location: page.html");
exit;
با دستور exit هم از داخل اين كد بيرون ميايم و به صفحه بعد منتقل ميشيم .
نوبتي هم باشه نوبت كار با فايل هاست :
PHP:
<form enctype="multipart/form-data" action="<?print $PHP_SELF?>" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="51200">
<input type="file" name="fupload"><br>
<input type="submit" value="upload!">
</form>
خوب ما با استفاده از دستور enctype="multipart/form-data" درواقع ميايم همون فايل ديالوگ رو باز ميكنيم
در قسمت بعد ما يك متغيير مخفي ايجاد ميكنيم و سايز فايل رو تعيين ميكنيم و توش قرار ميديم كه در اينجا 51200 انتخاب كرديم
حالا با دو خط بعد يه تكست باكس و يه دكمه ميزاريم . ما اينجا به كاربر اجازه ميديم تا 50 كيلوبايت فايل اپلود كنه .
البته كد بالا جنبه نمايش داشت و عملا كاربرد زيادي نداره قبل از اينكه نمونه قابل اجرا رو امتحان كنيم بزاريد ليستي از متغيير هاي فايل اپلود رو براتون بگم
مثال توضيح نام متغيير
/tmp/php3d3ef مسير فايل اپلود شده $fupload
Test.gif اسم فايل اپلود شده $fuploadname
51200 حجم بر حسب بايت $fuploadsize
Image/gif نوع فايل اپلودي $fupload type
حالا مثال ، در اين مثال ما اطلاعات فايل اپلئدي رو نمايش ميديم
PHP:
1: <html>
2: <head>
3: <title>Listing 9.15 A file upload script</title>
4: </head>
5: <?php
6: $file_dir = "/home/mehdi/htdocs/uploads";
7: $file_url ="http:// www.safary.com/mehdi/uploads";
8: if ( isset( $fupload ) )
9: {
10: print "path: $fupload<br>\n";
11: print "name: $fupload_name<br>\n";
12: print "size: $fupload_size bytes<br>\n";
13: print "type: $fupload_type<p>\n\n";
14: if ( $fupload_type == "image/gif" )
15: {
16: copy ( $fupload, "$file_dir/$fupload_name") or die ("Couldn't copy");
17:
18: print "<img src=\"$file_url/$fupload_name\"><p>\n\n";
19: }
20: }
21: ?>
22: <body>
23: <form enctype="multipart/form-data" action="<?php print $PHP_SELF?>"
method="POST">
24: <input type="hidden" name="MAX_FILE_SIZE" value="51200">
25: <input type="file" name="fupload"><br>
x<input type="submit" value="Send file!">
27: </form>
28: </body>
29: </html>
فكر نميكنم نيازي به توضيح باشه بجز اين خط ( $fupload, "$file_dir/$fupload_name") copy اين دستور فايل مورد نظر رو روي سرور كپي ميكنه و اگه اشكالي پيش اومد عبارت Couldn't copy رو چاپ ميكنه در اينجا ما پس از اينكه از كاربر فايل رو درخواست كرديم اطلاعات مربوط به اون فايل رو نمايش ميديم كه ما در اينجا فرض كرديم كه كاربر يك عكس را اپلود كرده است .
--------

مهدی صفری
 

بری باحاله

کاربر تازه وارد
تاریخ عضویت
19 جولای 2003
نوشته‌ها
41
لایک‌ها
0
سلام باز هم ممنونم. مطالب خیلی ردیف بود... منطقا باید کار کنه ولی نمی دونم چرا اصلا شرط isset($fupload) برآورده نمیشه... ما که داریم فرم رو به خود فايل ريفر میدیم درسته؟ خوب باید قاعدتا اين شی رو بشناسه مگه نه؟ ولی نمیشناسه و حلقه اصلا ران نمیشه... اشکال از منه؟ یا باید fupload رو اسم چیز دیگه بذاریم مثلا یه متغیر hidden توی فرم ها؟ عمو کمک:( :( :( :(
 

iransbs

کاربر تازه وارد
تاریخ عضویت
3 می 2005
نوشته‌ها
471
لایک‌ها
0
محل سکونت
ایران، مازندارن، ساری
فقط می گم دستت درد نکنه
عالی بود
حالا ببین عزیز بجایی اینکه ما از
PHP:
$_post[id]
از
PHP:
$post->id
استفاده کنیم باید چی کار کنیم ؟
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
به نقل از iransbs :
فقط می گم دستت درد نکنه

PHP:
$post->id
استفاده کنیم باید چی کار کنیم ؟

مگه نميتوني استفاده كني؟
من راحت كار كرد برام
اين علامت برا خوندن و ست كردن يك مقدار هست
 

بری باحاله

کاربر تازه وارد
تاریخ عضویت
19 جولای 2003
نوشته‌ها
41
لایک‌ها
0
عمو حمید! چیزی نمیگی؟ من چیکار کنم؟ یعنی میشه تقصیر سرور من باشه؟
ولی ربطی نداره داره؟ ببین عمو! اصلا شرطش برآورده نمیشه منظورم شرط isset($fupload) هستش. ببین من چک کردم. مشکل از دستور نیست
. دستور کپی کار میکنه. مثلا من تونستم یه فایل رو از روی وب کپی کنم توی یه فولدر توی وب. باز هم مشکلم همون شرطه هستش... متوجه هستی که چی میگم؟ اصلا اینگار که نه اينگار این فرمه داره چیزی بر میگردونه. چیکار کنم؟

تو رو خدا کمک:wacko: :wacko: :wacko:
 

بری باحاله

کاربر تازه وارد
تاریخ عضویت
19 جولای 2003
نوشته‌ها
41
لایک‌ها
0
به نقل از mehdvirus :
مگه نميتوني استفاده كني؟
من راحت كار كرد برام
اين علامت برا خوندن و ست كردن يك مقدار هست

عمو یه چیزی... اگه برا تو کار کرده میشه یه خروجی بذاری کم ببینم؟ یه else هم برای شرطه بذار و مثلا بنویس "nashod" ... اخه من نمیدونم چرا اصلا وارد حلقه نمیشه... مطمئنم یه مشکلی هست...:baaasmile
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
به نقل از بری باحاله :
عمو یه چیزی... اگه برا تو کار کرده میشه یه خروجی بذاری کم ببینم؟ یه else هم برای شرطه بذار و مثلا بنویس "nashod" ... اخه من نمیدونم چرا اصلا وارد حلقه نمیشه... مطمئنم یه مشکلی هست...:baaasmile

ولي مشكل شما
راستش من يه مشكلي دارم نتونستم اينارو تست كنم

ولي اين بايد كار كنه:f34r:
واستا
الان تست ميكنم
 

بری باحاله

کاربر تازه وارد
تاریخ عضویت
19 جولای 2003
نوشته‌ها
41
لایک‌ها
0
به نقل از mehdvirus :
ولي مشكل شما
راستش من يه مشكلي دارم نتونستم اينارو تست كنم

ولي اين بايد كار كنه:f34r:
واستا
الان تست ميكنم

عمو حمید! تستش کن دیگه ... :( تست کن دیگه یاللا یاللا تست کن دیگه :( من همینجا واستادم تا تست کنی بعد بگو چی شده ... این چراغ سبزه من روشنه میبینی -------------------------------------------------------------->
 

بری باحاله

کاربر تازه وارد
تاریخ عضویت
19 جولای 2003
نوشته‌ها
41
لایک‌ها
0
به نقل از mehdvirus :
ولي مشكل شما
راستش من يه مشكلي دارم نتونستم اينارو تست كنم

ولي اين بايد كار كنه:f34r:
واستا
الان تست ميكنم

ببینم عمو مهدی ويروس! تو اسمت حميد نيست؟ اگه هست چرا اسمتو گذاشتی مهدی! اگه نيست من چرا هي می گم بهت عمو حميد ... خيلی سخته اين مسايل توی زندگی مثل همون که شرط isset($fupload) برآورده نميشه نه؟؟؟؟ آره من که فک ميکنم اينجوريه عمو حميد مهدی ... :wacko: :wacko: :wacko: :wacko: :wacko: :wacko:
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
برا من كار كرد
path: /tmp/php0XidvX
name: my.JPG
size: 3600 bytes
type: image/pjpeg
 

بری باحاله

کاربر تازه وارد
تاریخ عضویت
19 جولای 2003
نوشته‌ها
41
لایک‌ها
0
به نقل از mehdvirus :
برا من كار كرد
path: /tmp/php0XidvX
name: my.JPG
size: 3600 bytes
type: image/pjpeg

من فک کنم این سرور شریف پی اچ پی ش مال عهد بوغه (شایدم جدیدتره مال بوقه!!!) در هر حال باید روی یه هاست دیگه امتحان کنم... ممنونم که وقت گذاشتی... خوش باشی عمو... حال کردم با مرامت...:rolleyes: :rolleyes: :rolleyes: :cool: :) :happy: :( :eek: :eek: :blush: :hmm: چه خوشگلن اینا ;) :lol: :eek: :blink: این دیگه خیلی باحاله نیگاش :blink: :blink: ... یا حق :wacko: :wacko: :wacko:
 

taleghani

Registered User
تاریخ عضویت
8 ژانویه 2006
نوشته‌ها
37
لایک‌ها
0
من یه برنامه تاریخ شمسی سمت سرور می خوام چه بصورت php چه بصورت asp .برنامه ای که cgi را پشتیبانی کنه و درضمن بگی که این برنامه را چه جوری توی صفحه home page صدا کنم.
میشه یه کم سریعتر جواب بدی. ممنون
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
خوب شما اول اين لينك رو ببين
http://farsiprojects.com/projects/JDF
هر جا هم خواستي استفاده كني اول صفحه مينويسي
include("jalali.php");
حالا هرجا خوساتي استفاده كني مينويسي
echo jdate("Y/m/d");
 

elite-kill3r

کاربر تازه وارد
تاریخ عضویت
19 آگوست 2006
نوشته‌ها
74
لایک‌ها
0
آقا MEHDVIRUS من می خوام یک قسمت MEMBER LOGIN برای سایتم بسازم باید از همین روش این کار رو انجام بدم؟
منتظر پاسخت هستم مرسی
 

elite-kill3r

کاربر تازه وارد
تاریخ عضویت
19 آگوست 2006
نوشته‌ها
74
لایک‌ها
0
آهای ملت جواب بدین ضروریه!!! فقط یه کلمه بگین بله یا نه؟
دستتون درد نکنه :)
 

mtakami

کاربر تازه وارد
تاریخ عضویت
14 می 2006
نوشته‌ها
16
لایک‌ها
0
سلام !
1- پست اول شما رو تمرين كردم ولي هيچ اتفاقي نيفتاد !
برنامه رو تو زند نوشتم و توي اكسپلورر با لوكال هاست تست كردم .
موقع نوشتن تو زند رنگ PHP_SELF قهوه اي بود يعني اينكه يه متغير معمولي !
و موقعي كه توي لوكال هاست اجرا مي كنم هيچ اتفاقي نمي افته ! و هر عددي كه بهش بدي همون Welcome to this Little Game ! رو مي نويسه !
2- سوال دوم من اينه كه چرا وقتي متغيرها رو از يه فايل ( از توي فرم ) به فايل ديگه پست مي كنم تو فايل دوميه به صورت اسم متغير قابل استفاده نيستن و حتما بايد از فانكشن post_ استفاده كنم ! مثلا اگه اسم متغيري كه تو اينپوت مي گيرم user باشه
print "$user" كار نمي كنه و بجاش بايد از ['print $_POST['Userاستفاده كنم
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
1- نمیدونم چرا کار نمیکنه من همه اینا رو تست کردم گزاشتم
2- یادم نمیاد کسی گفته باشه اینا متغییر هستن ... اینا مقادیری هستن که درون متغییر $_POST قرار میگیره !!!
به همین دلیل هست که مجبوری اینجوری استفاده کنی
 

noorsoft

کاربر تازه وارد
تاریخ عضویت
17 آپریل 2007
نوشته‌ها
4
لایک‌ها
0
با سلام من چند مشکل تو پی اچ پی دارم
1- اگه بخوام مسیر یک فایل که از یک را بفهمیم باید چکار کنم
2- بعضی از صفحات پی اچ پی من session_start() را قبول نمی کنند در واقع هیچ یک از session ها را نمی تواند بخواند


با تشکر
 

noorsoft

کاربر تازه وارد
تاریخ عضویت
17 آپریل 2007
نوشته‌ها
4
لایک‌ها
0
کسی ایجا نیست جواب آدم را بده
:(
 
بالا