ارسال و پردازش پارامترهای درخواست HTTP با استفاده از PHP. رسیدگی به درخواست ها با PHP رسیدگی به درخواست های http با php
(توزیع دنور) و نحوه نوشتن برنامه های ساده PHP را یاد گرفته اید، وقت آن رسیده است که یاد بگیرید چگونه مرورگر (کلاینت) می تواند درخواست هایی را به سرور ارسال کند و پاسخ های مناسب را دریافت کند. با استفاده از مثال ایجاد یک فرم ساده HTML، اصول اولیه چنین تعاملی را مطالعه خواهیم کرد.
اگر در دایرکتوری های دنور به خوبی آشنا هستید، می توانید هر فایل PHP را در دایرکتوری مناسب خود ایجاد کنید و مستقیماً به نوشتن کد ادامه دهید. برای کسانی که هنوز به توانایی های خود اطمینان ندارند، به شما توصیه می کنم کارهای زیر را انجام دهید: در یک دیسک مجازی با Denver (معمولاً Z است) در پوشه اصلی، یک پوشه درس ایجاد کنید. بعد، در این پوشه، یک پوشه دیگر ایجاد کنید - www. مال توست پوشه کارپروژه، که از نوار آدرس مرورگر در دسترس خواهد بود. Denver را ریبوت کنید تا هاست ایجاد شده در سیستم ثبت شود. در نهایت در پوشه www یک فایل index.php ایجاد کنید. این فایل اصلی با کد شما خواهد بود.
همانطور که می بینید، این نشانه گذاری معمولی HTML است، اما ما نام فایل را index.php گذاشتیم، به این معنی که اکنون می توانیم هر دستورالعمل PHP را در سند وارد کنیم.
اگر اکنون از http://lessons/ در مرورگر بازدید کنید، نتیجه زیر را مشاهده خواهید کرد:
فیلدها را پر کنید (به عنوان مثال: نام - Vasya، سال تولد - 1990) و روی دکمه "ارسال" کلیک کنید. چی میبینی؟ و هیچی! باز هم همان فرم، فقط خالی. با این حال، برای ناراحت شدن عجله نکنید - به نوار آدرس مرورگر نگاهی بیندازید. تغییر کرده است و اکنون چیزی شبیه به این است:
Http://lessons/index.php?user_name=Vasya&user_year=1990&submit_form=submit
و این بدان معنی است که سرور هنوز اطلاعات شما را دریافت کرده است!
حالا بیایید بفهمیم
روش GET
اول، به هر حال فرم HTML چیست؟ این رابطی است که به شما امکان می دهد هر داده ای را از مرورگر مشتری به سرور ارسال کنید. به ویژگی های فرم خود نگاهی بیندازید:
روش POST
روش پستاطلاعات را از طریق هدرهای HTTP منتقل می کند. اطلاعات همانطور که در مورد روش توضیح داده شده است کدگذاری می شود گرفتن، و در هدر قرار می گیرد QUERY_STRING.
- روش POST هیچ محدودیتی در اندازه داده هایی که باید ارسال شوند ندارد.
- از روش POST می توان برای ارسال ASCII و همچنین داده های باینری استفاده کرد.
- داده های ارسال شده با روش POST از طریق هدر HTTP می گذرد، بنابراین امنیت به پروتکل HTTP بستگی دارد. با استفاده از Secure HTTP، می توانید از امنیت اطلاعات خود اطمینان حاصل کنید.
- PHP آرایه انجمنی $_POST را برای دسترسی به تمام اطلاعات ارسال شده با استفاده از روش POST فراهم می کند.
مثال زیر را با قرار دادن امتحان کنید منبعبه اسکریپت test.php.
if($_POST["name"] || $_POST["سن"]) ( if (preg_match("[^A-Za-z"-]",$_POST["name"])) ( مرگ (" نام و نام نامعتبر باید آلفا باشد"؛ ) echo "خوش آمدید ". $_POST["name"]؛ echo "شما ". $_POST["سن"] هستید. "سال"؛ exit(); )
متغیر $_REQUEST
متغیر PHP $_REQUESTحاوی مطالبی مانند $_GET, $_POST، و $_COOKIE. در مورد متغیر بحث خواهیم کرد $_COOKIEوقتی در مورد کوکی ها صحبت می کنیم
متغیر $_REQUEST PHP را می توان برای به دست آوردن نتیجه از داده های فرم ارسال شده با استفاده از روش های GET و POST استفاده کرد.
برای روش POST
محتوای فرم به همان روشی که برای متد GET کدگذاری می شود (به بالا مراجعه کنید)، اما به جای افزودن یک رشته به URL، محتوای درخواست به عنوان یک بلوک داده به عنوان بخشی از عملیات POST ارسال می شود. اگر مشخصه ACTION وجود داشته باشد، مقدار URL موجود در آنجا تعیین می کند که این بلوک داده به کجا ارسال شود. این روش همانطور که قبلا ذکر شد برای انتقال بلوک های داده بزرگ توصیه می شود.
اطلاعات وارد شده توسط کاربر و ارسال به سرور با استفاده از روش POST به عنوان ورودی استاندارد به برنامه مشخص شده در ویژگی action یا در صورت حذف این ویژگی به اسکریپت فعلی ارائه می شود. طول فایل آپلود شده در متغیر محیطی CONTENT_LENGTH و نوع داده در متغیر CONTENT_TYPE ارسال می شود.
شما فقط می توانید داده ها را با استفاده از روش POST با استفاده از یک فرم HTML ارسال کنید، زیرا داده ها در بدنه درخواست ارسال می شوند، و نه در هدر، مانند GET. بر این اساس، تنها با تغییر مقدار وارد شده در فرم، می توانید مقدار پارامترها را تغییر دهید. هنگام استفاده از POST، کاربر داده های ارسال شده به سرور را نمی بیند.
مزیت اصلی درخواست های POST امنیت و عملکرد بیشتر آنها در مقایسه با درخواست های GET است. بنابراین، روش POST بیشتر برای انتقال استفاده می شود اطلاعات مهمو همچنین اطلاعات با حجم زیاد. با این حال، نباید به طور کامل به امنیت این مکانیسم اعتماد کنید، زیرا داده های درخواست POST نیز می توانند جعلی شوند، به عنوان مثال، با ایجاد یک فایل html بر روی دستگاه خود و پر کردن آن با داده های لازم. همچنین، همه مشتریان نمی توانند از روش POST استفاده کنند، که موارد استفاده آن را محدود می کند.
هنگام ارسال داده ها به سرور با هر روشی، نه تنها داده های وارد شده توسط کاربر، بلکه تعدادی متغیر به نام متغیرهای محیطی که مشتری، تاریخچه، مسیرهای فایل و غیره را مشخص می کند، منتقل می شود. در اینجا برخی از متغیرهای محیطی آورده شده است:
- REMOTE_ADDR - آدرس IP میزبان (رایانه) ارسال کننده درخواست؛
- REMOTE_HOST - نام میزبانی که درخواست از آن ارسال شده است.
- HTTP_REFERER - آدرس صفحه ای که به اسکریپت فعلی اشاره دارد.
- REQUEST_METHOD - روشی که هنگام ارسال درخواست استفاده شد.
- QUERY_STRING - اطلاعاتی که در URL بعد از علامت سوال یافت می شود.
- SCRIPT_NAME - مسیر مجازی به برنامه ای که باید اجرا شود.
- HTTP_USER_AGENT - اطلاعات مربوط به مرورگری که مشتری از آن استفاده می کند
تا اینجا فقط اشاره کردیم که درخواست های مشتری با استفاده از سرور روی سرور پردازش می شوند برنامه ویژه. در واقع می توانیم این برنامه را خودمان بنویسیم از جمله در PHP و هر کاری که بخواهیم با داده های دریافتی انجام می دهد. برای نوشتن این برنامه باید با برخی از قوانین و ابزارهای ارائه شده برای این منظور توسط PHP آشنا شوید.
در یک اسکریپت PHP، راه های مختلفی برای دسترسی به داده های ارسال شده توسط یک کلاینت از طریق HTTP وجود دارد. قبل از PHP 4.1.0، دسترسی به چنین دادههایی با نام متغیرهای ارسال شده انجام میشد (به یاد بیاورید که دادهها به شکل جفتهای "نام متغیر، نماد "="، مقدار متغیر ارسال میشوند). بنابراین، اگر، برای مثال، first_name=Nina پاس داده شود، متغیر $first_name با مقدار Nina در داخل اسکریپت ظاهر میشود. اگر لازم بود تشخیص داده شود که داده ها با چه روشی منتقل شده اند، از آرایه های انجمنی $HTTP_POST_VARS و $HTTP_GET_VARS استفاده می شود که کلیدهای آنها نام متغیرهای منتقل شده بود و مقادیر مقادیر اینها بود. متغیرها به ترتیب بنابراین، اگر جفت first_name=Nina با روش GET ارسال شود، آنگاه $HTTP_GET_VARS["first_name"]="Nina".
استفاده از نام متغیرهای ارسال شده به طور مستقیم در برنامه ناامن است. بنابراین، با شروع PHP 4.1.0، تصمیم گرفته شد از یک آرایه خاص - $_REQUEST - برای دسترسی به متغیرهای ارسال شده از طریق درخواست های HTTP استفاده شود. این آرایه حاوی داده هایی است که با روش های POST و GET و همچنین از طریق کوکی های HTTP منتقل می شوند. این یک آرایه انجمنی فوق جهانی است، یعنی. مقادیر آن را می توان در هر نقطه از برنامه با استفاده از نام متغیر مربوطه (عنصر فرم) به عنوان یک کلید به دست آورد.
مثال 4.2.فرض کنید فرمی برای ثبت نام شرکت کنندگان در یک مدرسه برنامه نویسی مکاتبه ای ایجاد کردیم، مانند مثال بالا. سپس در فایل 1.php که این فرم را پردازش می کند، می توانید موارد زیر را بنویسید:
";$str .="شما انتخاب کرده اید که دوره را در ".$_REQUEST["kurs"];echo $str;?> مطالعه کنید
سپس اگر نام "واسیا" را در فرم، نام خانوادگی "پتروف" را وارد کرده و از بین تمام دوره ها، دوره PHP را انتخاب کنیم، پیام زیر را در صفحه مرورگر دریافت خواهیم کرد:
پس از معرفی آرایه $_REQUEST، آرایه های $HTTP_POST_VARS و $HTTP_GET_VARS برای یکنواختی به ترتیب به $_POST و $_GET تغییر نام دادند، اما خود آنها به دلایل سازگاری با نسخه های قبلی PHP. بر خلاف پیشینیان خود، آرایه های $_POST و $_GET تبدیل به ابرجهانی شده اند، یعنی. به طور مستقیم و درون توابع و روش ها قابل دسترسی است.
بیایید مثالی از استفاده از این آرایه ها بزنیم. فرض کنید باید فرمی را پردازش کنیم که حاوی عناصر ورودی به نامهای first_name، last_name، kurs (مثلاً فرم form.html بالا) است. داده ها با استفاده از روش POST منتقل شده اند و ما نمی خواهیم داده های منتقل شده با روش های دیگر را پردازش کنیم. این را می توان به صورت زیر انجام داد:
";$str .= "شما یک دوره در ". $_POST["kurs"];echo $str;?> انتخاب کرده اید
سپس در صفحه مرورگر، اگر نام "Vasya"، نام خانوادگی "Petrov" را وارد کرده و دوره PHP را از بین تمام دوره ها انتخاب کنیم، مانند مثال قبلی، پیامی را خواهیم دید:
سلام واسیا پتروف! شما برای مطالعه دوره PHP انتخاب کرده اید
به منظور حفظ توانایی پردازش اسکریپت ها طولانی تر نسخه های اولیهاز زمان PHP 4.1.0، دستورالعمل register_globals معرفی شده است، که اجازه می دهد یا از دسترسی مستقیم به متغیرها با نام آنها جلوگیری می کند. اگر پارامتر register_globals=On در فایل تنظیمات PHP، متغیرهایی که با روشهای GET و POST به سرور ارسال میشوند، میتوانند به سادگی با نام آنها دسترسی داشته باشند (یعنی میتوانید $first_name را بنویسید). اگر register_globals=خاموش است، باید $_REQUEST["first_name"] یا $_POST["first_name"]، $_GET["first_name"]، $HTTP_POST_VARS["first_name"]، $HTTP_GET_VARS["first_name"] را بنویسید. از نظر امنیتی، بهتر است این دستورالعمل را غیرفعال کنید (یعنی register_globals=Off). با فعال بودن دستورالعمل register_globals، آرایه های فهرست شده در بالا نیز حاوی داده های ارسال شده توسط مشتری خواهند بود.
گاهی اوقات شما نیاز دارید که مقدار یک متغیر محیطی را بدانید، مانند روشی که برای ارسال درخواست استفاده می شود، یا آدرس IP رایانه ای که درخواست را ارسال کرده است. شما می توانید این اطلاعات را با استفاده از تابع getenv() بدست آورید. مقدار متغیر محیطی را که نام آن به عنوان پارامتر به آن ارسال می شود، برمی گرداند.
همانطور که قبلاً گفتیم، اگر از روش GET استفاده شود، داده ها با افزودن یک رشته کوئری به شکل جفت های "variable_name = value" به URL منبع منتقل می شوند. هر چیزی که در URL بعد از علامت سوال نوشته می شود را می توان با استفاده از دستور بدست آورد
getenv("QUERY_STRING");
به همین دلیل امکان انتقال داده ها به شکل دیگری با استفاده از روش GET وجود دارد. به عنوان مثال، فقط مقادیر چندین پارامتر را که با علامت مثبت از هم جدا شده اند، مشخص کنید و رشته پرس و جو را به قسمت هایی در اسکریپت تجزیه کنید، یا می توانید مقدار تنها یک پارامتر را ارسال کنید. در این حالت، یک عنصر خالی با کلیدی برابر با این مقدار (کل رشته پرس و جو) در آرایه $_GET ظاهر می شود و نماد "+" موجود در رشته query با زیرخط "_" جایگزین می شود.
در روش POST، داده ها تنها با استفاده از فرم ها منتقل می شوند و کاربر (مشتری) نمی بیند که چه نوع داده ای به سرور ارسال می شود. برای دیدن آنها، هکر باید فرم ما را با فرم خود جایگزین کند. سپس سرور نتایج پردازش فرم اشتباه را به مکان اشتباه ارسال می کند. برای جلوگیری از این امر، می توانید آدرس صفحه ای که داده ها از آن ارسال شده است را بررسی کنید. این کار را می توان دوباره با تابع getenv() انجام داد:
getenv("HTTP_REFERER");
اکنون زمان حل مسئله ای است که در ابتدای سخنرانی ارائه شده است.
دسترسی به چنین دادههایی با نام متغیرهای منتقل شده انجام میشود (به یاد بیاورید که دادهها به شکل جفت "نام متغیر، "=" نماد، مقدار متغیر" منتقل میشوند). بنابراین، اگر، برای مثال، first_name=Nina پاس داده شود، متغیر $first_name با مقدار Nina در داخل اسکریپت ظاهر میشود. اگر لازم بود تشخیص داده شود که با چه روشی داده ها منتقل شده اند، از آرایه های انجمنی استفاده می شود HTTP_POST_VARS $و HTTP_GET_VARS $که کلیدهای آن نام متغیرهای عبوری بود و مقادیر به ترتیب مقادیر این متغیرها بودند. بنابراین، اگر جفت first_name = Nina به متد ارسال شود گرفتن، سپس $ HTTP_GET_VARS["first_name"]="نینا".استفاده از نام متغیرهای ارسال شده به طور مستقیم در برنامه ناامن است. بنابراین، تصمیم گرفته شد، با شروع از PHP 4.1.0، از یک آرایه ویژه برای دسترسی به متغیرهای ارسال شده از طریق درخواست های HTTP استفاده شود - $_REQUEST. این آرایه حاوی داده های ارسال شده توسط متدها است پستو گرفتن، و همچنین استفاده از کوکی های HTTP. این یک آرایه انجمنی فوق جهانی است، یعنی. مقادیر آن را می توان در هر نقطه از برنامه با استفاده از نام متغیر مربوطه (عنصر فرم) به عنوان یک کلید به دست آورد.
مثال 4.2. فرض کنید فرمی برای ثبت نام شرکت کنندگان در یک مدرسه برنامه نویسی مکاتبه ای ایجاد کردیم، مانند مثال بالا. سپس در فایل 1.php که این فرم را پردازش می کند، می توانید موارد زیر را بنویسید:
سپس اگر نام "واسیا" را در فرم، نام خانوادگی "پتروف" را وارد کرده و از بین تمام دوره ها، دوره PHP را انتخاب کنیم، پیام زیر را در صفحه مرورگر دریافت خواهیم کرد:
پس از معرفی یک آرایه $_REQUESTآرایه ها HTTP_POST_VARS $و HTTP_GET_VARS $برای سازگاری تغییر نام داد $_POSTو $_GETبه ترتیب، اما خود آنها به دلایل سازگاری با نسخه های قبلی PHP از استفاده ناپدید نشده اند. بر خلاف پیشینیان خود، آرایه ها $_POSTو $_GETابرجهانی شده اند، یعنی. به طور مستقیم و درون توابع و روش ها قابل دسترسی است.
بیایید مثالی از استفاده از این آرایه ها بزنیم. فرض کنید باید فرمی حاوی عناصر ورودی به نامهای first_name، last_name، kurs را پردازش کنیم (به عنوان مثال، فرم form.html بالا). داده ها با استفاده از روش انتقال داده شد پست، و ما نمی خواهیم داده های ارسال شده توسط روش های دیگر را پردازش کنیم. این را می توان به صورت زیر انجام داد:
سپس در صفحه مرورگر، اگر نام "Vasya"، نام خانوادگی "Petrov" را وارد کرده و دوره PHP را از بین تمام دوره ها انتخاب کنیم، مانند مثال قبلی، پیامی را خواهیم دید:
به منظور حفظ توانایی پردازش اسکریپت های زودتر از PHP 4.1.0، دستورالعمل register_globals، اجازه دادن یا رد کردن دسترسی به متغیرها به طور مستقیم با نام آنها. اگر در تنظیمات PHP فایل پارامتر register_globals =روشن، سپس به متغیرهایی که توسط متدها به سرور ارسال می شود گرفتنو پست، فقط می توانید با نام آنها به آنها اشاره کنید (یعنی می توانید $first_name را بنویسید). اگر register_globals=خاموش، سپس باید $ بنویسید _درخواست["first_name"]یا دلار _POST["first_name"], $ _GET["first_name"], $ HTTP_POST_VARS["first_name"], $ HTTP_GET_VARS["first_name"]. از نقطه نظر امنیتی، بهتر است این دستورالعمل را غیرفعال کنید (یعنی register_globals=خاموش). وقتی دستورالعمل فعال است register_globalsآرایه های ذکر شده در بالا همچنین حاوی داده های ارسال شده توسط مشتری هستند.
گاهی دانستن معنای برخی ضروری می شود متغیر محیطی، مانند روش مورد استفاده برای ارسال درخواست، یا آدرس IP رایانه ای که درخواست را ارسال کرده است. با استفاده از تابع می توانید این اطلاعات را دریافت کنید getenv(). یک مقدار برمی گرداند متغیر محیطی، که نام آن به عنوان پارامتر به آن ارسال می شود.
echo getenv("REQUEST_METHOD"); // возвратит использованный метод echo getenv ("REMOTE_ADDR"); // выведет IP-адрес пользователя, // пославшего запрос?> مثال 4.3. استفاده از getenv()
همانطور که قبلاً گفتیم اگر از روش استفاده شود گرفتن، سپس داده ها با افزودن یک رشته پرس و جو به شکل جفت های "variable_name=value" به URL منبع ارسال می شوند. هر چیزی که در URL بعد از علامت سوال نوشته می شود را می توان با استفاده از دستور بدست آورد
getenv("QUERY_STRING");
با تشکر از این، با توجه به روش امکان پذیر است گرفتنانتقال داده به شکل دیگری به عنوان مثال، فقط مقادیر چندین پارامتر را که با علامت مثبت از هم جدا شده اند، مشخص کنید و رشته پرس و جو را به قسمت هایی در اسکریپت تجزیه کنید، یا می توانید مقدار تنها یک پارامتر را ارسال کنید. در این مورد، در آرایه $_GETیک عنصر خالی با یک کلید برابر با این مقدار (کل رشته پرس و جو) ظاهر می شود، با کاراکتر " + " که در رشته پرس و جو مواجه می شود با زیرخط " _ " جایگزین می شود.
روش پستداده ها فقط با استفاده از فرم ها ارسال می شوند و کاربر (مشتری) نمی بیند چه داده هایی به سرور ارسال می شود. برای دیدن آنها، هکر باید فرم ما را با فرم خود جایگزین کند. سپس سرور نتایج پردازش فرم اشتباه را به مکان اشتباه ارسال می کند. برای جلوگیری از این امر، می توانید آدرس صفحه ای که داده ها از آن ارسال شده است را بررسی کنید. این کار را می توان دوباره با استفاده از تابع انجام داد getenv():
getenv("HTTP_REFERER");
اکنون زمان حل مسئله ای است که در ابتدای سخنرانی ارائه شده است.
مثال رسیدگی به درخواست PHP
بیایید به یاد بیاوریم که مشکل چیست و فرمول آن را روشن کنیم. برای ثبت نام شرکت کنندگان در مدرسه مکاتبه برنامه نویسی باید فرمی بنویسید و پس از ثبت نام برای شرکت کننده پیام ارسال کنید. ما این پیام را نامه جهانی نامیده ایم، اما با حرفی که در سخنرانی قبلی نوشتیم کمی متفاوت خواهد بود. در اینجا ما همچنین چیزی را از طریق ایمیل ارسال نمی کنیم تا مانند هرزنامه ها نباشیم، بلکه به سادگی این پیام را ایجاد کرده و در صفحه مرورگر نمایش می دهیم. ما قبلاً نسخه اولیه فرم ثبت نام را در بالا ارائه کرده ایم. ما آن را تغییر می دهیم تا هر ثبت نام کننده بتواند هر تعداد دوره را که می خواهد شرکت کند انتخاب کند و ما دریافت فرم ثبت نام را تایید نمی کنیم.
فرم ثبت نام دانشجو
لیست 4.4. form_final.htmlهمه چیز در اینجا کاملاً ساده و واضح است. تنها چیزی که باید به آن توجه کرد نحوه ارسال مقادیر عنصر چک باکس است. وقتی kurs را در نام عنصر می نویسیم، به این معنی است که اولین عنصر چک باکس علامت گذاری شده در اولین عنصر آرایه kurs، چک باکس دوم در دومین عنصر آرایه و غیره نوشته می شود. البته میتوانید فقط نامهای مختلفی را به عناصر چک باکس بدهید، اما در صورت وجود دورههای زیاد، پردازش دادهها را پیچیده میکند.
اسکریپتی که همه اینها را تجزیه و پردازش می کند 1.php نامیده می شود (فرم به این فایل اشاره دارد که در ویژگی آن نوشته شده است. عمل). پیش فرض ارسال روش است گرفتن، اما ما اشاره کردیم پست. با توجه به اطلاعات دریافتی از شخص ثبت نام شده، اسکریپت پیام مربوطه را تولید می کند. اگر شخصی چند دوره را انتخاب کرده باشد، پیامی در مورد زمان انجام آنها و در مورد اساتیدی که آنها را خوانده اند به او نمایش داده می شود. اگر شخص چیزی را انتخاب نکرده باشد، پیامی در مورد جلسه بعدی مدرسه برنامه نویسان مکاتبه (ZSHP) نمایش داده می شود.
// создадим массивы соответствий курс-время его
// проведения и курс-его лектор
$times = array("PHP"=>"14.30","Lisp"=>"12.00", "Perl"=>"15.00","Unix"=>"14.00"); $lectors = array("PHP"=>"Vasily Vasilievich", "Lisp"=>"Ivan Ivanovich", "Perl"=>"Peter Petrovich", "Unix"=>"Semyon Semyonovich"); define("SIGN", "با احترام، مدیریت"); // امضای نامه را به عنوان یک تعریف ثابت تعریف کنید("MEETING_TIME","18.00"); // زمان جلسه دانشجویی را تنظیم کنید $date = "12 می"; // تعیین تاریخ برای سخنرانی ها // شروع به نوشتن متن پیام $str = "سلام عزیزم" . $_POST["first_name"] . " " . $_POST["last_name"]."!
";$str .="
به شما اطلاع می دهیم که "; $kurses = $_POST["kurs"]; // لیست دوره های انتخاب شده را در این متغیر ذخیره کنید اگر (!isset($kurses)) ( // اگر هیچ دوره ای انتخاب نشده است $event = " next جلسه دانشجویی"؛ $str .= "$event در $date برگزار خواهد شد". MEETING_TIME . "
"; ) else ( // اگر حداقل یک دوره انتخاب شده باشد $event = "سخنرانی که انتخاب کرده اید برگزار می شود $date
- تابع ";//count تعداد عناصر آرایه $lect = "" را برای ($i=0;$i) محاسبه می کند
". SIGN؛ // اضافه کردن امضای echo $str؛ // چاپ پیام به صفحه؟> لیست 4.5. اسکریپت 1.php فرم form_final.html را پردازش می کند
نتیجه
بیایید خلاصه کنیم. ما یاد گرفته ایم که یک کلاینت را از یک سرور و یک کامپیوتر - یک سرور را از هم تشخیص دهیم برنامه های سرور، با روش های اصلی انتقال داده به سرور آشنا شد و ابزارهای ارائه شده توسط زبان PHP برای پردازش درخواست های مشتری را مطالعه کرد و آنها را در عمل امتحان کرد. در اصل، این برای ایجاد برنامه های کاربردی سرویس گیرنده-سرور کافی است.
در این بخش و بخش های بعدی به طور مختصر نحوه ایجاد برنامه های کاربردی وب ساده با آنها توضیح داده می شود با استفاده از PHP. آنچه در بخش توضیح داده شد به وضوح برای ارتباط برنامه شما با کاربر و فرم بسته به اقدامات انجام شده توسط وی یا پارامترهای وارد شده توسط وی کافی نیست. و چه چیزی کم است؟ در مورد نحوه سازماندهی ورودی کاربر و انتقال این داده ها به سرور، دانش کافی وجود ندارد. خوب، شما از قبل باید دانش اولیه ای در مورد نحوه پردازش برنامه نویسی اطلاعات دریافت شده در سرور داشته باشید.
روش های درخواست HTTP و پارامترهای آنها
هر برنامه وب پویا مطابق با پارامترهای وارد شده توسط کاربر یا اقدامات انجام شده در سمت مشتری، پاسخی را برای کاربر ایجاد می کند. درخواست به سرور اغلب به دو نوع درخواست کاهش می یابد: استفاده از روش GET یا روش POST. چند کلمه در مورد تفاوت این دو نوع درخواست.
روش GET:پارامترها در هدر درخواست HTTP ارسال می شوند، بنابراین در آن قابل مشاهده هستند خط فرمان، و چنین پرس و جوی را می توان نشانه گذاری کرد. از آنجایی که طول کل هدر محدود است، تعداد و طول پارامترهای ارسال شده با استفاده از GET نیز محدود است.
اعتقاد بر این است که نتایج چندین درخواست GET یکسان اجرا شده در یک ردیف باید یکسان باشد.
پارامترهای درخواست در بدنه درخواست HTTP ارسال می شوند، بنابراین در خط فرمان نیستند. تعداد و اندازه پارامترها نامحدود است.
اعتقاد بر این است که نتایج چندین درخواست POST یکسان می تواند برگردد معانی مختلفزیرا آنها می توانند خواص شی مورد نظر را تغییر دهند.
برای بازیابی محتوا باید از روش GET استفاده شود منبع اطلاعاتیبا توجه به پارامترها، زمانی که لازم نیست تغییراتی در ساختار داده های منبع هدف ایجاد کنید، و منطقی است که درخواست (URL) را نشانه گذاری کنید. سرعت اجرای متد GET ممکن است سریعتر از درخواست های مشابه با استفاده از روش POST باشد.
روش POST باید زمانی استفاده شود که لازم باشد پارامترهای ارسال شده به سرور از URL پنهان شود. این روش همچنین باید در درخواستها برای تغییرات در محتوای منبع هدف استفاده شود و در پارامترها (در متن درخواست) شرحی از همین تغییرات ارسال شود.
مسیر رسیدن به منبع؟ parameter1=value1¶meter2=value2&…
اگر خاصی ندارید فرم های HTMLبرای پر کردن پارامترها، می توانید برنامه PHP خود را با عبور دادن پارامترهای آزمایشی مستقیماً در خط فرمان مرورگر اشکال زدایی کنید، به عنوان مثال:
http://website/php-samples/sql.php?sql=انتخاب * از d_staff
برای دسترسی به پارامترهای پرس و جو در سمت سرور، از آرایه های جهانی استفاده کنید $_GETو $_POSTبه ترتیب. اگر برنامه شما اهمیتی ندارد که با چه روشی به آن دسترسی پیدا کرده است، باید از یک آرایه استفاده کنید $_REQUEST، که داده های آرایه های $_GET و $_POST را ترکیب می کند، به عنوان مثال، به صورت زیر:
$sql = isset($_REQUEST["sql"]) ? $_REQUEST["sql"] : "";
در این مثال، برنامه تعیین می کند که آیا پارامتر "sql" ارسال شده است یا خیر: اگر چنین است، مقدار آن را به متغیر مربوطه اختصاص می دهد، و اگر نه، یک مقدار خالی به آن اختصاص می دهد.
تعریف پارامترهای درخواست HTTP از طریق فرم HTML
البته، تعریف پارامترها به صورت دستی به طور مستقیم در خط فرمان مرورگر چندان راحت نیست. این روش برای اجرای برنامه ای درخواست های HTTP هنگام برقراری ارتباط بین برنامه های کاربردی وب مناسب است. برای وارد کردن و انجام اعتبارسنجی داده های اولیه در سمت مشتری، باید از فرم های HTML و . در زیر نمونه ای از ساده ترین فرم آمده است که به کمک آن یک پارامتر متنی (مقدار) وارد می شود که متعاقباً به عنوان پارامتر متد POST به سرور ارسال می شود.
ویژگی روش عنصر فرم، روشی را مشخص می کند که نحوه ارسال داده ها به سرور را تعیین می کند (get یا post). ویژگی action مشخص می کند فایل php کسی که درخواست را پردازش می کند. اگر کنترل کننده باید فایل فعلی باشد، پس ویژگی action نیازی به اضافه شدن ندارد. برای تمام عناصری که مقدار آنها باید به عنوان پارامتر درخواست HTTP ارسال شود، یک مقدار منحصر به فرد برای ویژگی name باید تعریف شود. این مقدار صفت است نامخواهد بود فهرست مطالبدر آرایه های $_GET، $_POST یا $_REQUEST (به مثال بالا مراجعه کنید). با کلیک بر روی یک دکمه ارسالفرم را با تمام مقادیر وارد شده به سرور ارسال می کند.