فرم در PHP

فرم در PHP
اداره کردن فرم در PHP:
در PHP متغیرهای سراسری GET_$ و POST_$ برای جمع آوری داده های فرم استفاده میشوند. مثال زیر یک فرم HTML ساده با دو فیلد ورودی و دکمه ارسال را نمایش میدهد: ( در مثالها به جای() از علامتهای <> استفاده کنید)
(html)
(body)
(form action="welcome.php" method="post")
Name: (input type="text" name="name")(br)
E-mail: (input type="text" name="email")(br)
(input type="submit")
(/form)
(/body)
(/html)
هنگامی که کاربر فرم بالا را پر می کند و روی دکمه ارسال کلیک میکند، داده های فرم برای پردازش به یک فایل PHP به نام "welcome.php" با روش HTTP POST ارسال می شوند.
برای نمایش داده های ارسال شده به سادگی میتوانید تمام متغیرها را چاپ کنید. برای این منظور فایل "welcome.php" باید بدین صورت باشد:
(html)
(body)
Welcome (?php echo $_POST["name"]; ?)(br)
Your email address is: (?php echo $_POST["email"]; ?)
(/body)
(/html)
خروجی میتواند چنین باشد :
Welcome John
Your email address is john.doe@example.com
با استفاده از متد ارسال GET نیز میتوان همین نتایج را به دست آورد فقط کافیست در دو نمونه کد بالا به جای کلمه POST از GET استفاده کرد. ولی باید توجه داشته باشید که با استفاده از متد ارسال داده GET اطلاعات و داده های فرم در URL نشان داده خواهند شد و این قضیه امنیت را کم میکند. شما نیاز به معتبر ساختن داده های فرمتان دارید تا از اسکریپت خود در برابر کدهای مخرب محافظت کنید.
هر دو متد GET و POST، آرایه ای ایجاد میکنند که این آرایه شامل جفت "کلید/ مقدار" میباشد که در آن "کلید" نام کنترل فرم و "مقدار" داده های ورودی فرم از طریق کاربر میباشند. این دو متغیرهای superGlobal هستند که به این معنی است که این دو متغیر همیشه قابل دسترس هستند (بدون در نظر گرفتن دامنه).
GET_$ آرایه ای از متغیرهاست که از طریق پارامترهای URL به اسکریپت فعلی منتقل میشوند. اطلاعات فرستاده شده از یک فرم با استفاده از روش GET برای همه مشهود است. متد GET همچنین دارای محدودیت در مقدار اطلاعات برای ارسال است. محدودیت حدود 2000 کاراکتر میباشد. این متد ممکن است برای ارسال اطلاعات غیر حساس استفاده شود و توجه داشته باشید که هرگز نباید برای ارسال کلمه عبور یا سایر اطلاعات حساس استفاده گردد!
POST_$ آرایه ای از متغیرهاست که از طریق متد HTTP POST به اسکریپت فعلی منتقل میگردد. اطلاعات فرستاده شده از یک فرم با متد POST برای دیگران نامرئی است و هیچ محدودیتی در مقدار اطلاعات ارسالی ندارد.
اعتبارسنجی فرم در PHP
معتبرسازی مناسب داده های فرم برای محافظت فرم و اطلاعات شما در برابر هکرها و اسپمرها مهم است. یکی از راههای اعتبارسنجی فرم استفاده از متغیر سراسری [" SERVER["PHP_SELF_$ است. این متغیر نام فایل از اسکریپت فعلی در حال اجرا را بر می گرداند. پس [" SERVER["PHP_SELF_$ داده های فرم ارسال شده را به صفحه خود میفرستد. به این ترتیب کاربر پیامهای خطا را در همان صفحه بعنوان فرم دریافت میکند. اما باید به این نکته توجه داشته باشید که متغیر [" SERVER["PHP_SELF_$ میتواند توسط هکرها استفاده شود. اگر PHP_SELF در صفحه شما استفاده شود کاربر میتواند یک علامت اسلش (/) را وارد کند و سپس برخی از دستورات (Cross Site Scripting (XSS را اجرا کند. XSS نوعی از آسیب پذیری امنیتی کامپیوتر است که به طور معمول در برنامه های کاربردی وب یافت می شود. XSS با تزریق اسکریپت های سمت سرویس گیرنده به صفحات وب بازدید شده توسط کاربران دیگر، حمله هکرها را قادر می سازد.
جهت جلوگیری از سوء استفاده از [" SERVER["PHP_SELF_$ میتوان از تابع () htmlspecialchars استفاده کرد. کد فرم میتواند به این صورت باشد:
تابع htmlspecialchars کاراکترهای خاص را به نهادهای HTML تبدیل می کند. حال اگر کاربر سعی کند از متغیر PHP_SELF سوء استفاده کند، خروجی زیر نتیجه میشود:
به این ترتیب تلاش برای استفاده اشتباه از این متغیر شکست میخورد و هیچ آسیبی به اطلاعات شما وارد نخواهد شد.
تایید اعتبار داده های فرم با PHP
اولین چیزی که ما انجام خواهیم داد، این است که تمام متغیرها را از طریق تابع htmlspecialchars مربوط به PHP ارسال کنیم. در این صورت اگر یک کاربر برای ارسال موارد زیر در یک فیلد متن تلاش کند:
این دستور اجرا نخواهد شد، چرا که بصورت کد HTML فرار ذخیره خواهد شد. در حال حاضر، این کد برای نمایش در یک صفحه یا داخل یک ایمیل، امن است.
ما همچنین میتوانیم هنگامیکه کاربر فرم را ارسال میکند، دو کار دیگر نیز انجام دهیم:
1- کاراکترهای strip غیر ضروری (فضای اضافی، تب، خط جدید) از داده های ورودی کاربر (با استفاده از تابع پی اچ پی trim).
2- حذف backslashes () از داده های ورودی کاربر با استفاده از تابع stripslashes.
mamnon
سلام اگه بخوام یه input داشته باشم از نوع تکست که چیزی که کاربر مینویسه زیرش نمایش داده بشه .و بعد دوباره تو همون input چیزدیگری نوشت نمایش تکست قبلی پاک نشه و زیر هم نشون داده بشه چیکار کنم؟