ارسال و دریافت اطلاعات با متد GET و POST در ای جکس (Ajax)

به طور کلی ارسال و دریافت اطلاعات در بستر وب با دو متد GET و POST صورت می گیرد که جزئی از استانداردهای تعریف شده پروتکل HTTP هستند و توسط مرورگرها و سرورهای مختلف پشتیبانی می شوند، متد GET معمولا برای ارسال پارامترهای قابل روئیت در آدرس URL درخواستی و دریافت پاسخ از سرور کاربرد دارد، از متد POST نیز به طور معمول در کدنویسی HTML در هنگام کار با فرم ها (تگ form) و ارسال اطلاعات به صورت غیرقابل روئیت استفاده می شود، در ای جکس GET و POST کارکردی مشابه دارند با این تفاوت که در هر دو متد درخواست در پس زمینه ارسال شده و خللی در پیمایش صفحه کاربر ایجاد نمی شود، درک این دو شیوه با توجه به استفاده در بدنه اصلی یک درخواست مبتنی بر ای جکس (Ajax) جهت طی ادامه روند آموزش های این بخش اهمیت زیادی دارد.
متد GET و POST در ای جکس (Ajax)
همانطور که پیش از این گفتیم درخواست های مبتنی بر ای جکس (Ajax) از چند قسمت اصلی تشکیل شده اند (آبجکت XMLHttpRequest، متد open، متد send، متد onreadystatechange و readyState)، آبجکت XMLHttpRequest ساز و کار مورد نیاز را برای ارسال و دریافت اطلاعات بر بستر Ajax فراهم می کند، متد open یک فایل را در سرور با یکی از متدهای GET یا POST فراخوانی کرده و پارامترهای مورد نیاز در قسمت send ارسال می شوند، متد onreadystatechange نیز در کنار متد readyState وضعیت های مختلف را در طی این فرآیند بررسی می کند، با ذکر این ساختار کلی این قسمت از آموزش را به متد open و send اختصاص می دهیم که خود از متدهای GET و POST در پروتکل HTTP استفاده می کنند، به طور خلاصه:
- open و send توابعی در Ajax هستند که برای فراخوانی یک فایل از سرور و ارسال پارامتر به آن از آنها استفاده می کنیم (این توابع را در اصطلاح برنامه نویسی شی گرا، متد می گویند).
- متد open برای فراخوانی فایل از سرور از یکی از شیوه های تعریف شده در پروتکل HTTP استفاده می کند، در پروتکل HTTP دو متد GET و POST برای ارسال و دریافت اطلاعات بین کاربر (Client) و سرور (Server) تعریف شده که جزء استانداردهای این پروتکل هستند.
پارامترهای متد open و send در ای جکس (Ajax)
هر درخواست مبتنی بر ای جکس (Ajax) در نهایت باید یک فایل را از سرور فراخوانی کند، این فراخوانی می تواند با ارسال مقادیر یا بدون ارسال مقادیر باشد، ای جکس برای این نیاز از دو متد open و send استفاده می کند که درخواست ها با این دو متد از طریق استاندارد HTTP و متدهای GET و POST در این استاندارد ارسال و نتیجه دریافت می شود، در نمونه کدهای زیر بخش مربوط به متد open و send از یک درخواست مبتنی بر ای جکس را بررسی می کنیم:
xmlHttp.open("GET", "index.php?action=add&id=22", true);
xmlHttp.send(null);
var params = "action=add&id=22";
xmlHttp.open("POST", "index.php", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send(params);
همان طور که در نمونه کدهای بالا مشخص است، زمانی که متد GET در قسمت open استفاده می شود، پارامترها از طریق آدرس URL به سرور ارسال می شوند و قسمت send مقدار null یا خالی دارد، اما در حالت استفاده از POST باید تنظیماتی اعمال شود که از جمله استفاده از متد setRequestHeader است، این متد در ای جکس برای تنظیم سربرگ (Header) های HTTP در یک درخواست استفاده می شود، در مثال بالا نیز سربرگ Content-type با مقادیر application/x-www-form-urlencoded تنظیم شده است، این دستور به مرورگر تفهیم می کند که اطلاعات را مانند یک فرم ساده HTML ارسال کند، پارامترها در حالت استفاده از متد POST، هم می توانند از طریق آدرس URL (مشابه متد GET) و هم در بخش send ارسال شوند که هر کدام برای شرایط خاصی مناسب هستند که در ادامه در این رابطه بیشتر خواهیم گفت، پارامتر سوم متد open نیز برای تعیین غیر همزمانی (هم روند یا Asynchronous) بودن یا نبودن درخواست است، در صورتی که این مقدار true باشد در پیمایش صفحه کاربر خللی ایجاد نمی شود اما اگر این مقدار را false تنظیم کنیم، تا زمانی که فرآیند درخواست ای جکس به پایان نرسیده، کاربر نمی تواند در صفحه پیمایش کند.GET یا POST، کدام متد را استفاده کنیم؟!
GET و POST هر کدام با هدف خاصی در HTTP تعریف شده اند، متد GET برای ارسال پارامترها در آدرس URL به کار می رود و از POST برای ارسال بسته های اطلاعات به صورت غیر قابل روئیت استفاده می شود.
کجا از GET استفاده کنیم؟
- متد GET معمولا برای ارسال پارامترهای دستوری در آدرس URL استفاده می شود، به طور مثال می توانیم شماره ID کاربر یا کلمه جستجو شده را در این متد ارسال کنیم.
- در صورتی که اطلاعات ارسال شده حالت عمومی داشته باشند استفاده از GET مانعی ندارد، به طور مثال ارسال اطلاعات حساس مانند رمز عبور از این طریق توصیه نمی شود چرا که در آدرس URL و به صورت آشکار قابل روئیت خواهد بود.
- در مواردی که نیاز به ذخیره سازی موقت (Cache) اطلاعات باشد GET گزینه مناسبی است (البته این حالت را می توان با برنامه نویسی جاوا اسکریپت به نحو دلخواه تغییر داد).
- متد GET در ای جکس سریعتر از متد POST است و برای موارد عمومی که صرفا نیاز به فراخوانی یک فایل از سرور با Ajax است، گزینه مناسبی است، متد POST در ای جکس به صورت دو مرحله ای عمل می کند (ابتدا سربرگ های HTTP و سپس اطلاعات ارسال می شوند).
جهت آشنایی بیشتر در مثال زیر اطلاعات فرضی را توسط متد GET برای یک فایل PHP با نام ajax-get.php ارسال و پاسخ را در بلاکی با آی دی result خروجی می دهیم:
فایل ajax-get.php
<?php
@$site = $_GET['site'];
@$domain = $_GET['domain'];
echo "نام سایت: $site<br>";
echo "آدرس دامنه: $domain<br>";
echo "متد استفاده شده: GET<br>";
?>
کد HTML درخواست و تنظیمات Ajax
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | ارسال و دریافت اطلاعات با متد GET</title>
<!-- Webgoo.ir -->
<style type="text/css">
body {
font-family: Tahoma, Geneva, sans-serif;
direction: rtl;
font-size: 12px;
}
</style>
<script type="text/javascript">
function ajaxCallFile(id) {
var xmlHttp;
try {
//Opera, Firefox, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
//Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("متاسفانه مرورگر شما از ای جکس پشتیبانی نمی کند");
return false;
}
}
}
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
document.getElementById(id).innerHTML = xmlHttp.responseText;
document.getElementById('button-1').innerHTML = 'ارسال درخواست ای جکس';
document.getElementById('button-1').disabled = false;
} else {
document.getElementById('button-1').innerHTML = 'لطفا چند لحظه صبر کنید...';
document.getElementById('button-1').disabled = true;
}
}
xmlHttp.open("GET", "ajax-get.php?site=Webgoo&domain=https://webgoo.ir", true);
xmlHttp.send(null);
}
</script>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیر فعال است!<br>
</noscript>
<button id="button-1" type="button" onclick="ajaxCallFile('result')">ارسال درخواست ای جکس</button>
<div id="result"></div>
<hr>
پس از کلیک بر روی دکمه بالا، تابع جاوا اسکریپتی فراخوانی شده و درخواست ای جکس به فایل PHP در سرور ارسال می شود، سپس نتیجه دریافت و در بلاک نمایش داده خواهد شد، در این مثال از متد GET استفاده شده است.
</body>
</html>
پیش نمایشمتد POST در ای جکس شباهت زیادی به GET دارد، با این تفاوت که در این شیوه درخواست، مانند تگ form در HTML سربرگ های HTTP یا HTTP Headers نیز به مرورگر ارسال می شوند، از طرفی xmlHttp.send به جای مقادیر null، پارامترهایی با مقادیر رشته ای دارد.
کجا از POST استفاده کنیم؟
- در ای جکس هرکجا نیاز به ارسال اطلاعات حساس مانند نام کاربری، کلمه عبور، مشخصات حساب بانکی و... باشد، بهتر است از POST استفاده کنیم، چرا که اطلاعات در این شیوه در آدرس URL قابل روئیت نیست.
- برای ارسال اطلاعات حجیم (به طور مثال اطلاعات یک فرم HTML) از POST استفاده می شود، متد GET از نظر میزان اطلاعات مجاز با محدودیت های بیشتری در مقایسه با POST روبرو است.
جهت آشنایی بیشتر در مثال زیر اطلاعات فرضی را توسط متد POST برای یک فایل PHP با نام ajax-post.php ارسال و پاسخ را در بلاکی با آی دی result خروجی می دهیم:
فایل ajax-post.php
<?php
@$site = $_POST['site'];
@$domain = $_POST['domain'];
echo "نام سایت: $site<br>";
echo "آدرس دامنه: $domain<br>";
echo "متد استفاده شده: POST<br>";
?>
کد HTML درخواست و تنظیمات Ajax
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | ارسال و دریافت اطلاعات با متد POST</title>
<!-- Webgoo.ir -->
<style type="text/css">
body {
font-family: Tahoma, Geneva, sans-serif;
direction: rtl;
font-size: 12px;
}
</style>
<script type="text/javascript">
function ajaxCallFile(id) {
var xmlHttp;
try {
//Opera, Firefox, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
//Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("متاسفانه مرورگر شما از ای جکس پشتیبانی نمی کند");
return false;
}
}
}
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
document.getElementById(id).innerHTML = xmlHttp.responseText;
document.getElementById('button-1').innerHTML = 'ارسال درخواست ای جکس';
document.getElementById('button-1').disabled = false;
} else {
document.getElementById('button-1').innerHTML = 'لطفا چند لحظه صبر کنید...';
document.getElementById('button-1').disabled = true;
}
}
xmlHttp.open("POST", "ajax-post.php", true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send('site=Webgoo&domain=https://webgoo.ir');
}
</script>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیر فعال است!<br>
</noscript>
<button id="button-1" type="button" onclick="ajaxCallFile('result')">ارسال درخواست ای جکس</button>
<div id="result"></div>
<hr>
پس از کلیک بر روی دکمه بالا، تابع جاوا اسکریپتی فراخوانی شده و درخواست ای جکس به فایل PHP در سرور ارسال می شود، سپس نتیجه دریافت و در بلاک نمایش داده خواهد شد، در متد POST از متد setRequestHeader استفاده و پارامترها در قسمت send تنظیم و ارسال می شوند، در این مثال از متد POST استفاده شده است.
</body>
</html>
پیش نمایشارسال پارامترها در ای جکس صرفا به روش ثابت مانند نمونه کدهای بالا محدود نمی شود، در آموزش های بعدی خواهیم دید که چگونه می توان به نحو حرفه ای تر و با قابلیت تعاملی بیشتر به صورت پویا از قابلیت های ای جکس در طراحی امکانات و رابط کاربری برنامه های تحت وب استفاده کرد.
دسته بندی: آموزش مقدماتی » Ajax
برچسب ها: Ajax

آموزش ای جکس (Ajax)، تکنیک غیرهمزمانی در وب
نمایش افکت fade in با ای جکس (Ajax)
نمایش پیام در حال بارگذاری با ای جکس (Ajax)
فریم ورک های ای جکس (Ajax Frameworks)
ذخیره و نمایش اطلاعات فایل با ای جکس (Ajax) و PHP
دیدگاه


۲۰:۲۲ ۱۳۹۶/۰۵/۰۶
باسلام! من یه قالب رو از بلاگفا به بلاگ اسکای ترجمه کردم اما با مشکلی مواجه شدم: اینکه امکاناتی مانند بخش نظرسنجی یا لایک مطالب و موارد مشابه که در بلاگ اسکای بصورت آژاکس هست، اصلا کار نمیکنه... کد قالب رو روی وبلاگ آزمایشی قرار دادم، صمیمانه ممنون میشم راهنمایی بفرمائید تا بتونم این مطلب رو تا حدودی یاد بگیرم و مشکل قالبم رو رفع کنم. باتشکر!
بلاگ اسکای اسکریپت های مورد نیاز را به صورت فایل زیر در صفحه قرار می دهد:
نکته: برخی قابلیت های قالب ممکن است فقط روی یک سرویس قابل اجرا باشند، به طور مثال ممکن است خدماتی مانند نظرسنجی روی سرویس دیگر ارائه نشوند.
http://www.blogsky.com/scripts/common?v=1
لذا این فایل باید در کد قالب شما وجود داشته باشد.نکته: برخی قابلیت های قالب ممکن است فقط روی یک سرویس قابل اجرا باشند، به طور مثال ممکن است خدماتی مانند نظرسنجی روی سرویس دیگر ارائه نشوند.
۰۱:۱۰ ۱۳۹۵/۱۲/۱۷
با سلام و خسته نباشید بابت سایت و مطالب خوبتون.
من یه سوال دارم.
من در جایی از سایتم یک کوئری با متد get می گیرم از مواردی که در دیتابیس ذخیره شده.
به این صورت:
حالا نگرانی و سوالم اینه که من چطور میتونم جلوی کوئری ناخواسته رو بگیرم!
یعنی اینکه نذارم کاربر مستقیم از طریق تغییر شماره id در آدرس بار بیاد کوئری های هر id رو نمایش بده و ببینه!!!
با تشکر
من یه سوال دارم.
من در جایی از سایتم یک کوئری با متد get می گیرم از مواردی که در دیتابیس ذخیره شده.
به این صورت:
http://khadmat.ir/search.php?id=157
که این کوئری با توجه به شماره id نتیجه مربوطه رو نمایش میده.حالا نگرانی و سوالم اینه که من چطور میتونم جلوی کوئری ناخواسته رو بگیرم!
یعنی اینکه نذارم کاربر مستقیم از طریق تغییر شماره id در آدرس بار بیاد کوئری های هر id رو نمایش بده و ببینه!!!
با تشکر
دقیقا متوجه هدفتان نشدیم! در تئوری لینک های سایت یا حالت عمومی دارند یا حالت خصوصی و محافظت شده، برای لینک های عمومی به طور معمولا باید این امکان برای همه کاربران باشد که با فراخوانی، محتوا نمایش داده شود، در واقع با تغییر شماره ID باید محتوای مربوطه نمایش داده شود و این امری عادی است، اما اگر محتوای مد نظر خصوصی بود یا وجود نداشت، بحث دیگری است که باید در ابتدا برای آن یک قانون و ساختار مشخص داشته باشید، به طور مثال در ردیفی از دیتابیس برای ID های خصوصی به فرض ستون Access داشته باشید، اگر برابر 1 بود، محتوا را به کاربر نمایش دهید، در غیر اینصورت پیام خطای 403 را چاپ کنید! همین طور است برای ID هایی که در دیتابیس وجود ندارند، اگر نتیجه پرس و جو برابر 0 ردیف بود می توانید پیام "محتوای مد نظر در سایت وجود ندارد" را چاپ کنید!
مهدی
۱۷:۲۳ ۱۳۹۵/۰۸/۰۸
سلام
ما هر وقت از متد post استفاده می کنیم باید
و اگه نه ، چه مواقعی باید نوشت؟
ممنون از راهنمایی هاتون!
ما هر وقت از متد post استفاده می کنیم باید
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
رو هم بنویسیم؟ یا نه؟و اگه نه ، چه مواقعی باید نوشت؟
ممنون از راهنمایی هاتون!
متد setRequestHeader برای تنظیم سربرگ های HTTP در یک درخواست مبتنی بر AJAX است، در حالت معمول نیازی به تنظیم این مقادیر نیست و به صورت پیش فرض داده ها به صورت متنی ارسال می شوند، اما اگر بخواهید به طور مثال یونیکد داده های ارسالی را مشخص کنید، باید از این متد استفاده کنید (توضیح این موارد نیاز به آموزش های جداگانه دارد!)، لیست پارامترهایی که می توانید در این متد استفاده کنید:
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
Sepehr
۱۹:۰۳ ۱۳۹۴/۱۱/۰۹
با عرض سلام. من برای پروژه دانشگاه لازم هست تا با فناوری Ajax و Php از پایگاه داده اطلاعاتی را جستجو کرده و بدون ریفرش شدن صفحه اطلاعات نمایش داده شود.
اطلاعات به گونه ای از قبل در Mysql ذخیره شده اند که کلید اصلی کد ملی است. در صورتی که مدیریت سایت در هنگام جستجو کد ملی شخص را وارد کند باید اطلاعات او با فناوری Ajax در خروجی نشان داده شود. از شما خواهشمند هستم من را راهنمایی بفرمایید . با تشکر
اطلاعات به گونه ای از قبل در Mysql ذخیره شده اند که کلید اصلی کد ملی است. در صورتی که مدیریت سایت در هنگام جستجو کد ملی شخص را وارد کند باید اطلاعات او با فناوری Ajax در خروجی نشان داده شود. از شما خواهشمند هستم من را راهنمایی بفرمایید . با تشکر
لطفا از طرح سوالات کلی خودداری کنید!
برای این کار علاوه بر آشنایی با PHP و نحوه ارتباط با MySQL، باید مباحث Ajax را هم مرور کرده باشید، در این صورت با آموزش ها و نمونه کدهایی که وجود دارد می توانید مطابق نیازتان کدهای پروژه را تعریف کنید.
برای این کار علاوه بر آشنایی با PHP و نحوه ارتباط با MySQL، باید مباحث Ajax را هم مرور کرده باشید، در این صورت با آموزش ها و نمونه کدهایی که وجود دارد می توانید مطابق نیازتان کدهای پروژه را تعریف کنید.
غریب
۲۱:۵۴ ۱۳۹۴/۰۸/۰۲
سلام مجدد عزیز
کد اول رو گذاشتم اما عمل نکرد اگه میشه توضیح کاملتری بدید ممنون میشم و مشکل اصلی بنده اینه که میخوام با این متد لینک تصویر قرار داده بشه اما مشکل اینجاست که ممکنه فایلهای مخربی بگذارن حالا پیشنهاد شما برای بنده چیه ایا دستوری هست که بشه چند فرمت رو به فایل معرفی کرد؟
و کلا پیشنهاد شما برای بنده چی هست که بتونم امنیت همچین فایلی رو حفظ کنم ممنون میشم ساده و روون توضیح بدید چون دانش بنده قابل مقایسه با شما نیست جوری بفرمایید که بنده هم بتونم استفاده کنم از راهنماییتون مرسی و موفق باشید
در ضمن واقعا تشکر میکنم ازتون بابت راه اندازی سایتی اینگونه مفید جایی مثل سایت شما پیدا نکردم که انقدر ساده و بی تکلف به خواست دیگران اهمیت بده
کد اول رو گذاشتم اما عمل نکرد اگه میشه توضیح کاملتری بدید ممنون میشم و مشکل اصلی بنده اینه که میخوام با این متد لینک تصویر قرار داده بشه اما مشکل اینجاست که ممکنه فایلهای مخربی بگذارن حالا پیشنهاد شما برای بنده چیه ایا دستوری هست که بشه چند فرمت رو به فایل معرفی کرد؟
و کلا پیشنهاد شما برای بنده چی هست که بتونم امنیت همچین فایلی رو حفظ کنم ممنون میشم ساده و روون توضیح بدید چون دانش بنده قابل مقایسه با شما نیست جوری بفرمایید که بنده هم بتونم استفاده کنم از راهنماییتون مرسی و موفق باشید
در ضمن واقعا تشکر میکنم ازتون بابت راه اندازی سایتی اینگونه مفید جایی مثل سایت شما پیدا نکردم که انقدر ساده و بی تکلف به خواست دیگران اهمیت بده
- این کد صرفا یک مثال بود نه کدی کاربردی، منظور این بود که شما اگر با PHP آشنا باشید، با چنین روشی می توانید پارامترهای ارسالی به سرور را مدیریت کنید، قاعدتا اگر با PHP آشنا نباشید، نمی شود انتظار داشت چند خط کد ساده همه کارها را انجام دهد، باید معنی دستورات استفاده شده را بدانید.
- دقیقا متوجه نشدیم، منظورتان از لینک تصویر با متد GET چیست؟! آیا در حال طراحی یک سیستم آپلود هستید؟ لطفا ضمن توضیح گام به گام هدفتان، چند اسکرین شات تهیه یا آدرس صفحه مورد نظر را درج کنید.
- دقیقا متوجه نشدیم، منظورتان از لینک تصویر با متد GET چیست؟! آیا در حال طراحی یک سیستم آپلود هستید؟ لطفا ضمن توضیح گام به گام هدفتان، چند اسکرین شات تهیه یا آدرس صفحه مورد نظر را درج کنید.
۱۸:۵۲ ۱۳۹۴/۰۶/۱۹
سلام دوست عزیز بنده دو سوال در مورد متد get دارم
اول اینکه چطور میشه یه عدد یا کلمه پیش فرض واسه فایل قرار داد یعنی وقتی طرف مقابل خود فایل پی اچ پی رو بدون متد اضافه شده به اخرش باز میکنه جلوی جاهایی که ما در فایل مقدار دهی کردیم خالی نباشه و مثلا یه عدد پیش فرض داشته باشه
دوم اینکه چطور میتونم برای فایل متغییر با این متد محدودیت کاراکتر بزارم که کاربر مثلا فقط بتونه 10 حرف و یا کاراکتر وارد بخش خالی متد get بکنه این رو برای امنیت میخوام البته بگم متد پست نیست
ممنون و خسته هم نباشید
اول اینکه چطور میشه یه عدد یا کلمه پیش فرض واسه فایل قرار داد یعنی وقتی طرف مقابل خود فایل پی اچ پی رو بدون متد اضافه شده به اخرش باز میکنه جلوی جاهایی که ما در فایل مقدار دهی کردیم خالی نباشه و مثلا یه عدد پیش فرض داشته باشه
دوم اینکه چطور میتونم برای فایل متغییر با این متد محدودیت کاراکتر بزارم که کاربر مثلا فقط بتونه 10 حرف و یا کاراکتر وارد بخش خالی متد get بکنه این رو برای امنیت میخوام البته بگم متد پست نیست
ممنون و خسته هم نباشید
- اگر منظور از "باز کردن فایل" همان فراخوانی از طریق مرورگر است، در این صورت می توانید با یک دستور شرطی، مقدار اولیه برای پارامتر در نظر بگیرید، به فرض:
<?php
$var = $_GET['param'];
if(!isset($var) || $var == ''){
$var = 0;
}
?>
- برای متد GET نمی توانید در سمت مرورگر محدودیت ایجاد کنید (تا حدی که مرورگر اجازه دهد، کاربر می تواند پارامتر را به سرور ارسال کند)، منتها ایمن سازی باید ابتدا توسط فایروال و ماژول های امنیتی سرور انجام شود، سپس در کدهای PHP نیز می توان طول رشته را بررسی کرد:<?php
$var = $_GET['param'];
if(mb_strlen($var) > 10){
echo 'Error!';
}
?>
ترنم
۲۳:۲۲ ۱۳۹۴/۰۵/۱۸
سلام و خداقوت
من میخوام از طریق ajax بین دو کاربر اطلاعات رد و بدل کنم مثلا یک کاربر پیامی به کاربر دیگر ارسال کند.
دقیقا نمیدونم باید چیکار کنم، میشه کمک کنید؟؟؟
من میخوام از طریق ajax بین دو کاربر اطلاعات رد و بدل کنم مثلا یک کاربر پیامی به کاربر دیگر ارسال کند.
دقیقا نمیدونم باید چیکار کنم، میشه کمک کنید؟؟؟
این موارد جزء قابلیت های تقریبا پیشرفته محسوب می شوند، به این معنی که شما حداقل باید یک برنامه نویس با تجربه متوسط باشید تا بتوانید چنین سیستمی طراحی کنید، در هر صورت در حد راهنمائی، ابتدا باید در دیتابیس ساختار مناسب را طراحی کنید که شامل جدول اطلاعات کاربران، جدول مدیریت پیام ها و ... است، در مرورگر نیز یک موتور Ajax داشته باشید که به فواصل زمانی مشخص، فرآیندها را با دیتابیس هماهنگ کند، به این صورت که به فرض پیام کاربر را به سرور منتقل و بین پیام های موجود، موارد خوانده نشده ای که گیرنده پیام، کاربر حاضر می باشد را دریافت و در مرورگر او چاپ کند، البته قاعدتا بدون آشنایی با مباحثی مانند سشن و کوکی نمی توانید درک درست و راحتی از نحوه طراحی این ساختار داشته باشید.
saeid
۱۴:۳۴ ۱۳۹۴/۰۳/۲۹
ممنون از راهنماییتون مشکل بطرف شد و همون دو تا ' اضافه باعث خطا شده بود
saeid
۱۸:۲۷ ۱۳۹۴/۰۳/۲۸
ممنون از پاسختون
منظورم همان بعد از پرس و جو کردن و بدست آوردن مقدار مورد نظر از MySQL جایگذاری شود دقیقا بجای id در عبارت
چون در صفحه html به سادگی میتوان مقدار پرس و جو رو به عنوان نام فیلد جای گذاری کرد اما در صفحه php نمی توان مقدار را جایگزاری کرد
امیدوارم توانسته باشم درست منظورم رو بیان کرده باشم
با تشکر
منظورم همان بعد از پرس و جو کردن و بدست آوردن مقدار مورد نظر از MySQL جایگذاری شود دقیقا بجای id در عبارت
$name = $_POST['id'];
چون نام فیلد ها در فرم html از طریق پرس و جو از دیتابیس بدست می آید در صفحه php هم برای دریافت مقادیری که از متد post ارسال شده هم از روش پرس و جو استفاده میشهچون در صفحه html به سادگی میتوان مقدار پرس و جو رو به عنوان نام فیلد جای گذاری کرد اما در صفحه php نمی توان مقدار را جایگزاری کرد
امیدوارم توانسته باشم درست منظورم رو بیان کرده باشم
با تشکر
اگر می خواهید برای پارامتر قسمت POST در PHP مقادیری از دیتابیس را قرار دهید که در واقع همان نام فیلد است، حالت زیر صحیح است:
$name = $_POST[$row['id']];
روش دیگر نسبت دادن مقادیر قسمت row (که در مثال شما عبارت data استفاده شده) در حلقه while به متغیر دیگر و استفاده از آن متغیر در ادامه کدها است.saeid
۱۶:۱۱ ۱۳۹۴/۰۳/۲۸
سلام
ببخشید شیوه صحیح کد زیر به چه شکل هست؟
با تشکر
ببخشید شیوه صحیح کد زیر به چه شکل هست؟
$name = $_POST['$data['id']'];
یعنی میخام اون نامی که گذاشته میشه در تابع post رو از دیتابیس دریافت کنم ولی با جایگذاری با خطا مواجه میشم با تشکر
هرچند دقیقا متوجه منظورتان نشدیم، اما متد POST مقادیر را از فرم های وب یا مقادیر ارسال شده از دستورات Ajax را دریافت می کند نه از دیتابیس، برای دریافت مقادیر از دیتابیس باید پرس و جوی MySQL بنویسید و در حلقه while خروجی را دریافت کنید، اگر هم می خواهید مقدار ارسال شده از متد POST را در پرس و جو استفاده کنید، باید ابتدا به روش زیر مقدار را دریافت و سپس در پرس و جو جایگذاری کنید، به فرض:
$name = $_POST['id']'];
SELECT name, family FROM user WHERE id = '$name'
امین
۱۸:۴۱ ۱۳۹۴/۰۳/۲۲
سلام و خسته نباشید
ممنون بابت اموزش های مفیدتون
سایت های وردپرسی ازچه متدی استفاده میکنند که آدرس دهی صفحات به شکل های زیر هست
با تشکر
ممنون بابت اموزش های مفیدتون
سایت های وردپرسی ازچه متدی استفاده میکنند که آدرس دهی صفحات به شکل های زیر هست
www.site.com/post/454
www.site.com/post/5225.html
www.site.com/post/5225.aspx
مثلا اگه الان من از طریق متد get استفاده کرده باشم و ادرس دهی صفحاتم به شکل زیر باشهwww.site.com/?post=454
باید از چه متدی استفاده کنم که به شکل بالا در بیاد ؟ اسم متد چی هست ؟با تشکر
لطفا در وب عبارت "دوباره نویسی لینک با htaccess" یا "نحوه rewrite آدرس های URL با htaccess" را جستجو کنید!
۱۵:۵۶ ۱۳۹۴/۰۱/۱۰
آقا دمت گرم من تازه شروع کردم PHP رو. تو ایجکس مشکلی داشتم که با خوندن این مطلب بر طرف شد. ممنون
ahmad
۰۸:۵۳ ۱۳۹۳/۱۱/۲۵
سلام
من یه map دارم تو صفحه
الان می خوام این سه تا متغیر رو از دیتابیس بخونه و جایگذاری کنه
توی فایل js با تابع
من یه map دارم تو صفحه
<area shape="rect" coords="0,0,20,20" href="$site" title="$title" id="$id">
این مقادیرشهالان می خوام این سه تا متغیر رو از دیتابیس بخونه و جایگذاری کنه
توی فایل js با تابع
onmouseover="show1(this)"
اطلاعات دیتابیس و کوئری که می خوام رو زدم اما اطلاعاتی لود نمی کنه میشه راهنمایی کنید؟اصولا این کار باید در هنگام چاپ خروجی توسط PHP انجام شود، در دستورات بالا از echo قبل از متغیر استفاده نشده ضمن اینکه دستورات باید درون تگ php تعریف شوند، اگر هم قرار باشد توسط Ajax مقادیر از سرور گرفته و در صفحه جایگزین مقادیر فعلی شوند، باید ضمن آشنایی با Ajax با توابعی مانند split و همچنین متدهای پر کاربرد در جاوا اسکریپت مانند document.getElementById آشنا باشید.
سپیده
۰۱:۱۳ ۱۳۹۳/۱۰/۲۹
سلام. ممنون ازسایت پر محتواتون.
من دو کامبو باکس دارم که با ایجکس تونستم با انتخاب یک گزینه از کامبو باکس اولی، گزینه های کامبو باکس بعدی از پایگاه داده استخراج بشه، مشکل من اینکه حالا نمیتونم مقدار انتخابی کامبو باکس دومی رو با استفاده از فرم و ایجکس به صفحه ای دیگری ارسال کنم، یعنی کامبو باکس دومی رو به عنوان عناصر فرمم نمی شناسه. ممنون میشم راهنماییم کنید
من دو کامبو باکس دارم که با ایجکس تونستم با انتخاب یک گزینه از کامبو باکس اولی، گزینه های کامبو باکس بعدی از پایگاه داده استخراج بشه، مشکل من اینکه حالا نمیتونم مقدار انتخابی کامبو باکس دومی رو با استفاده از فرم و ایجکس به صفحه ای دیگری ارسال کنم، یعنی کامبو باکس دومی رو به عنوان عناصر فرمم نمی شناسه. ممنون میشم راهنماییم کنید
هرچند بدون دیدن و تست سورس کدهای صفحه نمی توان پاسخ دقیقی داد، اما بررسی کنید که خروجی قسمت Ajax در بین دو تگ form چاپ شود نه خارج از آنها، به عبارتی بلاک خروجی برای نمایش پاسخ Ajax باید بین دو تگ form باشد، همچنین از صحیح بودن name فیلدها اطمینان حاصل کنید (برای تسلط بیشتر می توانید سورس صفحه را با افزونه View Source Chart مرورگر فایرفاکس ببینید).
saeed
۱۶:۲۵ ۱۳۹۳/۰۹/۰۳
سلام. من یک پنل پیامک دارم که این قابلیت رو داره که پیامک های دریافتی رو با جزئیات کامل به یک آدرس url ارسال کنه. (یادم رفت اینو اول بگم که من اصلا کدنویسی و ... بلد نیستم) که این کار رو با post انجام میده. حالا من باید اینها رو get کنم. اینا رو از پشتیبانی پرسیدم. ولی نمیدونم چجوری. با کلی اصرار این تیکه کد رو ازشون گرفتم:
این کد رو داخل یک فایل php میریزم. توی همون پوشه یه فایل 1.txt درست میکنم و پرمیزن رو 777 میزارم ولی اطلاعاتی توی فایل تکست ذخیره نمیشه.
من فقط میخام جزئیات پیامک های دریافتی توی یک فایلی ذخیره بشه. (کاری به دیتابیس ندارم)
ممنون میشم اگه راهنمایی کنید چیکار کنم.
$from = $_POST['from'];
$to = $_POST['to'];
$message = $_POST['message'];
$timestamp = $_POST['timestamp'];
$ticket = $_POST['ticket'];
//save in a file
file_put_contents('1.txt', print_r($_POST, true));
// save in database
$con=mysqli_connect("hostname","username","password","database name");
mysqli_query($con,'SET NAMES `utf8`');
mysqli_query($con,"INSERT INTO `table name` (`from`, `to`, `messege`, `time` ,`ticket`)
VALUES ('$from', '$to', '$message', '$timestamp','$ticket')");
mysqli_close($con);
?>
ولی کار نمیکنه.این کد رو داخل یک فایل php میریزم. توی همون پوشه یه فایل 1.txt درست میکنم و پرمیزن رو 777 میزارم ولی اطلاعاتی توی فایل تکست ذخیره نمیشه.
من فقط میخام جزئیات پیامک های دریافتی توی یک فایلی ذخیره بشه. (کاری به دیتابیس ندارم)
ممنون میشم اگه راهنمایی کنید چیکار کنم.
دوست گرامی باید با نحوه کار تابع file_put_contents آشنا باشید، این تابع برای باز کردن یک فایل و نوشتن اطلاعات در آن استفاده می شود، ظاهرا در کد شما برای آرگومان دوم این تابع هیچ مقداری قرار نداده اید! در بخش دوم تابع باید یک مقدار قرار دهید که می تواند به فرض متغیر message باشد:
<?php
file_put_contents('1.txt', $message, FILE_APPEND);
?>
البته قاعدتا مدیریت سفارشی اطلاعات بدون آشنایی با برنامه نویسی PHP کار ساده ای نخواهد بود!http://php.net/manual/en/function.file-put-contents.php
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.