آموزش PHP - فرم ها در PHP

زبان PHP به پويايي و تعامل با كاربر شهره است و اين كار را مي تواند به بهترين نحو انجام دهد . اگر بخواهيم با كاربر تعاملي داشته باشيم يعني ورودي از كاربر بگيريم يا چيزي شبيه اين بايد حتما ياد بگيريم كه چگونه با فرم ها كار كنيم . براي طراحي فرم ها از يكسري كنترل هاي برنامه نويسي استفاده مي كنيم . اكثر اين كنترل ها با تگ input زبان HTML قابل ايجاد هستند . منتها بايد بدانيم كه تا وقتي اين كنترل ها را در يك فرم قرار ندهيم به هنگام ارسال صفحه به سرور ، اطلاعاتي كه كاربر در اين كنترل ها وارد كرده به سمت سرور ارسال نخواهد شد . براي ايجاد يك فرم بايد از تگ فرم در HTML استفاده كرد . به شكل زير :
همانطور كه مي بينيد تگ فرم دو خصيصه مهم دارد . يكي خصيصه method و ديگري خصيصه action .
خصيصه method مشخص مي كند اطلاعات داخل فرم به چه شكلي سمت سرور ارسال شوند . اين خصيصه دو مقدار مي گيرد . اگر مقدار اين خصيصه get باشد اطلاعات داخل url قرار گرفته و سمت سرور ارسال مي شوند . اگر مقدار اين خصيصه post باشد اطلاعات داخل بسته هاي http قرار گرفته و به سرور ارسال مي شوند .
خصيصه action مشخص مي كند اطلاعات اين فرم براي پردازش به چه فايلي بايد ارسال شوند و به هنگام دريافت اطلاعات اين فرم توسط سرور كدام فايل سرور بايد اجرا شود . در حقيقت خصيصه method هم مشخص مي كند اطلاعات به چه شكلي بايد به دست اين فايل برسند و اين فايل به چه صورت به اطلاعات ارسالي از سمت client دسترسي پيدا كند .
براي درك بهتر اين مطلب مثالي را با هم مرور مي كنيم . منتها قبل از مطالعه و بررسي مثال اگر با تگ input در html آشنايي نداريد مطلبي با همين عنوان را در بخش آموزش HTML از همين سايت مطالعه كنيد .
حال فرض كنيد يك صفحه وب داريم كه داراي دو كنترل از نوع input و يك كنترل از نوع submit است . مي خواهيم در اين دو كنترل از نوع input عددي وارد كرده و با كليك بر روي دكمه submit وارد صفحه جديدي شده و حاصل جمع دو عدد وارد شده را به همراه پيغام مناسبي ببينيم . براي اين كار يك فايل ايجاد مي كنيم بنام data.php . يادتان باشد چون اين فايل حاوي كدهاي PHP نيست حتي مي تواند با پسوند html ذخيره گردد :
</font></span></div><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif"> </font></span><div style="text-align: justify; direction: ltr;"><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif"><span style="white-space: pre;"> </span>Data Page</font></span></div><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif"> </font></span><div style="text-align: justify; direction: ltr;"><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif">
First Number :

Second Number :

هنگامي كه بر روي دكمه Add كليك شود ، چون كنترلي از جنس submit است اطلاعات آن به صورت خودكار به سرور ارسال مي شود . اگر يكي از input هاي فوق بيرون تگ form باشد اطلاعات مربوط به آن input به سمت سرور فرستاده نمي شود . هنگام ارسال به سمت سرور و به محض كليك بر روي دكمه Add (با فرض اينكه عدد اول 3 و عدد دوم 4 باشد) چون خصيصه action اين فرم با مقدار result.php مقدار دهي شده و خصيصه method آن نيز با get تنظيم شده است آدرسي كه در نوار آدرس مرورگر مشاهده خواهد شد عبارت خواهد بود از :
result.php?txtFirstNumber=3&txtSecondNumber=4
همانطور كه قبلا گفته شد، هنگامي كه از متد get استفاده شود اطلاعات فرم از طريق url ارسال خواهند شد . روال اين كار بدين شكل است كه كنترل ها بر اساس خصيصه name (و نه id) خود و سپس با يك علامت = و بعد مقداري كه در كنترل وارد شده در url ظاهر مي شوند .براي جدا كردن نام كنترل ها از نام صفحه از علامت سئوال ? استفاده مي شود و پس از علامت سئوال بلافاصله نام اولين كنترل و مقدار آن قرار مي گيرد .و بعد براي مرز بندي بين مقدار يك كنترل و نام كنترل بعدي براي كنترل هاي دوم به بعد قبل از نام آنها يك علامت & قرار مي گيرد .
واضح است كه متد get براي ارسال اطلاعاتي كه عامل امنيت براي آنها اهميت دارند استفاده نمي شود . مثلا اگر قرار باشد فرمي نام كاربري و كلمه عبور كاربران را دريافت كند آن فرم نبايد با استفاده از متد get سمت سرور ارسال شود .
حال در فايل result.php چه كاري بايد انجام دهيم ؟ اين فايل مي تواند مخلوطي از كدهاي PHP براي پردازش اطلاعات ارسالي از كلاينت و كد هاي HTML براي قالب بندي صفحه و نمايش اطلاعات باشد . بهتر است كه حتي اگر براي قالب بندي و نمايش اطلاعات از كد HTML استفاده نمي كنيد از تگ هاي HTML ، Head و body براي استاندارد سازي صفحات استفاده كنيد . نمونه اي از پياده سازي فايل result.php را با هم در زير مي بينيم :
</font></span></div><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif"> </font></span><div style="text-align: justify; direction: ltr;"><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif">Result Page</font></span></div><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif"> </font></span><div style="text-align: justify; direction: ltr;"><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif">
$sum = $_GET['txtFirstNumber'] + $_GET['txtSecondNumber'];
echo "The Sumation of ".$_GET['txtFirstNumber']." and ".$_GET['txtSecondNumber']." is ".$sum;
?>
براي دريافت اطلاعات از فرمي كه توسط متد get ارسال شده بايد از آرايه انجمني $_GET استفاده كرد . توجه داشته باشيد كه به هنگام نوشتن تگ فرم عبارت get را به هر نحو (از نظر بزرگي و كوچكي حروف) كه دوست داشته باشيد مي توانيد بنويسيد زيرا تگ فرم به زبان HTML نوشته مي شود و اين زبان Case Sensitive نيست . اما در PHP نام اين آرايه حتما بايد به همين شكل (يعني با حروف بزرگ) نوشته شود . ضمن اينكه اين آرايه ، يك آرايه انجمني است  يعني به عناصر آرايه بايد با يك كليد دسترسي پيدا كرد . حال اين كليد چيست ؟ مقدار خصوصيت name كه در تگ input در فرم HTML به كار رفته است .
اگر همين مثال را بخواهيم با متد post انجام دهيم كافيست در فرم HTML در قسمت method به جاي get ‌بنويسيم post . و در فايل result.php نيز به جاي آرايه $_GET از آرايه $_POST كه آن نيز انجمني است استفاده شود . توجه داشته باشيد كه در بسياري جاها از اين دو آرايه با نام تابع ياد شده است كه اشتباه است . در PHP تابع $_GET يا تابع $_POST نداريم . هنگامي كه اين مثال را با متد post بازنويسي كنيد مي بينيد كه به هنگام كليك بر روي دكمه Add آدرس نهايي result.php خواهد بود و هيچ گونه پارامتري در url ارسال نخواهد شد .
حال كه با اين دو متد ارسال صفحات وب يعني متد get و متد post آشنا شديد ببينيم اين دقيقا چه تفاوتهايي با هم دارند :
تفاوت متد get و متد post :
از آنجايي كه متد get تمامي كنترل ها و مقادير آنها را از طريق url به سمت سرور ارسال مي كند واضح است كه اولين تفاوت get و post اينست كه از طريق متد get تنها مي توان اطلاعات متني را ارسال كرد و اطلاعاتي از قبيل فايل ، عكس و ... را تنها مي توان با متد post ارسال نمود .
دومين تفاوت متد ارسال get و متد ارسال post اينست كه متد get نا امن است . چرا كه همانطور كه گفتيم اطلاعات ارسالي را به صورت clear text يعني متن صريح نشان مي دهد . بنابراين براي گرفتن كلمه عبور كاربر حتي اگر از كنترل input از نوع password استفاده كنيم كه هنگام گرفتن كلمه عبور آنرا نشان نمي دهد ، به هنگام ارسال اين كلمه عبور در url نشان داده خواهد شد .
تفاوت سوم اينست كه بالاخره ميزان اطلاعات ارسالي توسط متد get محدود است و معمول نيست كه طول url بيش از 2000 كاراكتر باشد . چرا كه مرورگري مانند IE تنها 2048 كاراكتر اول آدرس را در نظر مي گيرد . (در تئوري متد get چنين محدوديتي وجود ندارد و اين محدوديت فقط در عمل و به خاطر رفتار مرورگر IE است) . ولي هنگام استفاده از متد post مي توانيد به طور پيش فرض حداكثر تا 8Mbyte اطلاعات سمت سرور ارسال كنيد كه البته اين مقدار قابل تغيير است . براي تغيير اين مقدار بايد در فايل php.ini كه فايل پيكربندي PHP است مقدار متغير محيطي post_max_size را بر حسب مگابايت تغيير دهيد (اين متغير به طور پيش فرض برابر است با 8Mbyte).
همانطور كه ديديم براي ارسال يك فرم دو متد بيشتر وجود ندارد . get و post . اگر فرم با متد get ارسال شده باشد در PHP از آرايه $_GET و اگر فرم با متد post ارسال شده باشد در PHP از  آرايه $_POST استفاده مي شود و آرايه $_GET براي فرمي كه با متد post ارسال شده قابل استفاده نيست (و برعكس). اما صرفنظر از متد ارسال فرم در PHP مي توان از آرايه ديگري نيز استفاده كرد و آن آرايه $_REQUEST است. اين آرايه تمام كنترل هايي كه با استفاده از هر دو متد، ارسال شده باشند را دريافت مي كند .اين متد معمولا براي نوشتن وب سرويس هايي كه قرار است سرويسي به برنامه هاي نوشته شده توسط ساير برنامه نويسان دهد استفاده مي شود چرا كه يك برنامه نويس ممكن است از متد post استفاده كند و ديگري از متد get ولي شما كه نويسنده وب سرويس هستيد بايد پارامترهاي ارسالي هر دو را دريافت كنيد .
نکته مهم دیگری که در کار با فرم ها حائز اهمیت است اینست که کنترل کنید کاربر چگونه به صفحه ای مانند result.php وارد شده است ؟ آیا واقعا قبلا در صفحه کلاینت شما بوده و فرم را پر کرده و دکمه submit را زده که وارد این صفحه شده یا مستقیما آدرس این صفحه را در بخش نوار آدرس وارد کرده است ؟ اگر حالت دوم باشد آرایه های GET و POST هر دو خالی هستند و برنامه شما با مشکل مواجه می شود . برای فهمیدن این موضوع می توانید  از تابع isset استفاده کنید . این تابع بررسی می کند یک دکمه ، چک باکس و یا دکمه رادیویی و امثال اینها کلیک یا انتخاب شده است یا خیر . بنابراین کد به شکل زیر تغییر می یابد :
</font></span></div> <div style="text-align: justify; direction: ltr;"><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif">Result Page</font></span></div> <div style="text-align: justify; direction: ltr;"><span style="color: rgb(51, 0, 204);"><font size="3" face="arial,helvetica,sans-serif">
if(isset($_POST['btnSend']))
{
$sum = $_GET['txtFirstNumber'] + $_GET['txtSecondNumber'];
echo "The Sumation of ".$_GET['txtFirstNumber']." and ".$_GET['txtSecondNumber']." is ".$sum;
}
else
{
echo "You must fill empty elements in the form";
}
?>ادامه مطالب

ادامه نوشته

آموزش PHP - متغیر ها در PHP

متغیرها ، فضایی از حافظه هستند که برای ذخیره سازی اطلاعاتی که یک برنامه در حین اجرا نیاز دارد استفاده می شوند . به این خاطر نام متغیر را بر روی آنها گذاشته اند که این قابلیت را دارند که مقدار آنها تغییر کند . این متغیر ها با یک نام منحصر به فرد مشخص می شوند . این نام برای ارجاع به آنها و یا بازخوانی مقادیر ذخیره شده در آنها استفاده می شود اگر متغیری نام نداشته باشد فقط یک فضای بیخود اشغال کرده است بدون آنکه بتوان از آن استفاده ای کرد . دقیقا مانند اینکه فردی نام و آدرسی نداشته باشد .آیا می توان این فرد را خطاب قرار داد ؟
در php متغیر ها با آوردن یک علامت $ قبل از نام آنها شناسایی می شوند به عبارت دیگر اگر هنگامی که با متغیری کار دارید پیش از آوردن نامش علامت $ نیاورید مرتکب یک خطای دستوری شده اید . البته php مانند زبانهای دیگر نیست که قبل از استفاده از متغیر لازم باشد آن متغیر را اعلان (declare) کرد . در php هرگاه که به متغیری نیاز داشتید کافیست نام آنرا بیاورید حتی اگر برای بار اول بخواهید از آن استفاده کنید . این کار سادگی هایی را برای برنامه نویسان فراهم آورده است ولی در عین حال یک مشکل بزرگ هم ایجاد کرده است و آن اینکه اگر برنامه نویس نام متغیری را اشتباه بنویسد هیچ خطایی از جانب کامپایلر دریافت نمی کند چرا که کامپایلر فکر می کند برنامه نویس قصد داشته یک متغیر جدید بکار ببرد. پس هنگام کار با متغیر ها دقت کافی داشته باشید . برای همین است که php را یک زبان Loosely Typed (در مقابل Strongly Typed) می دانند . با این حال بهتر است چیزی شبیه به اعلان در برنامه داشته باشید و آن مقدار دهی به متغیر ها در اول برنامه است . مانند زیر :
$variable = value;
شایان ذکر است که در انتهای تمام خطوط غیر شرطی php باید یک علامت سمی کالن (;) بگذارید . در غیر این صورت با خطای دستوری مواجه می شوید .
حال سئوال اینجاست : php که اعلان ندارد میزان حافظه و نوع حافظه ای که باید در اختیار متغیر ها قرار دهد را از کجا تشخیص می دهد ؟ جواب : php بسته به مقداری که در متغیر قرار می گیرد نوع متغیر و میزان حافظه را تعیین می کند یعنی در زمان اجرا . به عبارت دیگر ممکن است متغیری اکنون از نوع عدد صحیح باشد و در خط بعدی از جنس رشته ! پس خود php این تبدیل نوع را انجام می دهد .

در php متغیر به محض استفاده به صورت خودکار تعریف می شود.

قوانین نام گذاری متغیر ها
یکسری قوانین برای نام گذاری متغیرها وجود دارد که عبارتند از :
1- نام متغیر می تواند از حروف الفبای انگلیسی بزرگ و کوچک ، عدد و علامت (_) یا همان underline یا underscore تشکیل شود .
2- نام متغیر نمی تواند با عدد شروع شود .
3- قبل از نام متغیر باید حتما علامت $ بیاید .
4- نام متغیر نمی تواند شامل کاراکتر space باشد .
با توجه به بند 4 از قوانین فوق برای نام گذاری متغیرهایی که از بیش از یک کلمه دارند می توانید یکی از دو ره زیر را برگزینید :
الف - جداسازی کلمات از هم با علامت underline
ب- استفاده از استاندارد Camel Case : این استاندارد می گوید کلمه اول تماما با حروف کوچک نوشته می شود و از کلمات بعدی فقط حرف اول هر کلمه با حرف بزرگ نوشته می شود .گفتنی است این استاندارد در بین تمام برنامه نویسان دنیا رایج بوده و با رعایت این استاندارد تمام برنامه نویسان می توانند کد شما را به راحتی متوجه شوند .
برخی نمونه های نام متغیر ها را در زیر می بینید :
نام متغیر توضیحات
$my var نادرست - به خاطر استفاده از space
$my_var درست
$2my_var نادرست - شروع نام با عدد
$myVar


ادامه مطالب
درست - استاندارد camelCase
ادامه نوشته

فرق متد post با get

درhtml می توان با استفاده از فرم ها برای کاربر صفحه ای را ایجاد کردتا بتواند یک سری از اطلاعات را در یک صفحه وارد کند .

برای ایجاد کردن فرم در html از تگ های </form><form> استفاده می شود. که عناصر موجود در فرم بین این تگ ها قرار می گیرند.

در تگ فرم از ویژگی ها ی action و method استفاده می شود.

ویژگی action  :

ویژگی action صفحه ای را که بعد از پر کردن اطلاعات می خواهیم به آن فرستاده شود را مشخص می کند.

یعنی زمانی که کاربر اطلاعات مورد نظر را کامل کرد و دکمه ی ارسال را انتخاب کرد ،صفحه ای که در مقابل action نوشته شده است برای پردازش کردن اطلاعات باز شود.در واقع این فرم ها باید برای یک برنامه ی پردازشگر ، که معمولا به یکی از زبان های  تحت سرور هستند(php ,asp.net) فرستاده شوند.پس در مقابل این ویژگی آدرس صفحه ی پردازشگری که قرار است فرم به آنجا فرستاده شود می آید.

ویژگی method:

این ویژگی مشخص می کند که به چه روشی اطلاعات برای صفحه ای که در مقابل ویژگی action مشخص کردیم فرستاده شود. که شامل مقادیر get و post می باشد.

Get: اگر از این مقدار در مقابل ویژگی method استفاده شود، اطلاعاتی که کاربر در صفحه پر کرده است از طریق نوار آدرس انتقال می یابد.

Post: اگر از این مقدار در مقابل ویژگی method استفاده شود، برای ارسال کردن اطلاعات از نوار آدرس استفاده نمی شود وامنیت بالاتری نسبت به زمانی که از get استفاده می کنیم خواهد داشت.

 

تفاوت های بین فرستادن اطلاعات با استفاده از get و استفاده از post  در زیر آمده است:

اگر ازمتدget استفاده شود این متد برای فرستادن اطلاعات از url (نوار آدرس صفحه) استفاده می کند، در نتیجه امکان نمایش فیلد هایی که اطلاعات آنها مهم می باشد در  در نوار آدرس وجود دارد ،یعنی اطلاعات وارد شده در فرم پس از یک علامت سؤال و  بعد از آدرس صفحه ای که در مقابل ویژگی action وجود دارد، قرار می گیرند و ارسال می شوند.

واطلاعاتی که در این روش ارسال می شوند محدود می باشد.اما سرعت این روش از روش post بیشتر می باشد.

اگر ازمتد  post استفاده شود، این متد اطلاعات را به صورت مخفی از طریق,http request ها انجام می دهد، و امنیت آن از روش get بیشتر بوده و محدودیتی در حجم اطلاعاتی که فرستاده می شود وجود ندارد. 

 یک فرم می تواند ویژگی های زیر را بپذیرد:

Name

ازاین ویژگی زمانی استفاده می شود که بخواهیم فرم مورد نظر نام مشخصی داشته باشد.نام فرم مورد نظر در مقابل ویژگی name آورده می شود.

"نام فرم مورد نظر"Name=

Target

از این ویژگی زمانی استفاده می شود که بخواهیم مشخص کنیم صفحه ی پردازش مورد نظر به چه صورتی باز شود ، به صورت پیش فرض داخل همان صفحه ای که در آن قرار داریم باز می شود اما میتوان با مقداری که به ویژگی target می دهیم مشخص کنیم که صفحه ی پردازش  در یک صفحه جدید باز شود.

Target=”blank”

فرق متد post با get

همه تقریبا با این دو متد اشنا هستند این دومتد برای ارسال فرم ها به کار می رود .
اما فرق این دو تا متد شاید برای بعضی ها سوال باشه .

اولین فرق این دو متد در امنیت اطلاعات ارسالی می باشد .

متد get اطلاعات ارسالی رو به ادرس لینک اضافه می کند و در واقع از طریق لینک اطلاعات را ارسال می کند و با این روش ارسال میشه اطلاعات ارسالی رو به راحتی هر کسی در ادرس بار مشاهد کنه ویا خودش اطلاعات ارسالی رو از طریق ادرس بار تغییر بده شاید به نظر بیاد که این روش ارسال پس چه فایده ای داره . یه مثال میزنم : تا حالا تو سایت های که یه لینک مخصوص به شما میدن که در واقع لینک معرفی شماست که هر کسی که از طریق این لینک وارد سایت بشه یا در سایت عضو بشه زیر مجموعه شما حساب میشه این سایت ها در واقع در سمت سرور اطلاعات ارسالی توسط متد get یا همون اطلاعات اضافی در ادرس بار که بهد از ادرس صفحه قرار دارد را چک می کنند و به این طریق متوجه می شوند که این فرد از طریق شما به سایت معرفی شده .

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

دومین فرق این دو متد در مقدار اطلاعات ارسالیست .
متد get به دلیل روش ارسال اطلاعات دارای ئمحدوویت در ارسال اطلاعات می باشد . حداکثر مقدار اطلااتی که توسط متد get می تون ارسال کرد 100 کارکتر می باشد.
اما این محدودیت در ارسال توسط متد post وجود ندارد و در واقع هیچ محدودیتی برای ارسال توسط متد post وجود ندارد .\

کتاب الکترونیکی مرجع کامل آموزش PHP – محمد بشیری

کتاب الکترونیکی زیر که توسط آقای محمد بشیری گردآوری شده است کتابی سودمند برای آموزش PHP می باشد که جهت استفاده علاقمندان آماده دانلود می باشد.

عنوان کتاب: مرجع کامل آموزش PHP

نویسنده: محمد بشیری

زبان کتاب:  پارسی

فرمت کتاب:  PDF

تعداد صفحات: ۱۸۵

حجم فایل : ۱.۴ مگابایت

دانلود کتاب