PDA

View Full Version : چگونگی استفاده از آجاکس در PHP



بیتا حکمت
سه شنبه 28 بهمن 1393, 13:10 عصر
سلام . وفت بخیر. فرض کنید دیتابیسی هست که اعداد 12 رقمی در فیلدهای آن ذخیره شده . بعد از اینکه کاربران عضو لاگین کردن . این اعداد 12 رقمی به آنها نمایش داده می شود .
و رویدادهایی که اتفاق می افتد اینها هستند :

1- با نمایش هر عدد ، یک پیغام در پایین نشان داده می شود که کاربر قبلا" چند بار برای این عدد (زوج ) یا ( فرد ) انتخاب کرده است .
2- انتخاب فعلی به تعداد قبلی در دیتابیس اضافه می شود مثلا" اگر در مثال پایین روی حذف اعداد فرد کلیک کرد ، بار پیغامش به این شکل خواهد بود :
شما قبلا برای عدد بالا 6بار حذف اعداد فرد را انتخاب کردید .
3- به محض کلیک به روی اعداد فرد و یا زوج عدد 12 رقمی بعدی لود می شود و ..


http://8pic.ir/images/xnvd5xtioeyghztsx0wo.jpg


هدف از ایجاد تاپیک این بود که بپرسم در پیاده سازی کدام بخش از مواردی که توضیح دادم باید از اجاکس یا جی کوئری استفاده کرد . و ممنون میشم که با توجه به مثالی که خودم زدم
چه اتفاقی می افتاد اگر با همین دستورات معمولی INsert و .. و بدون اجاکس این کارو انجام می دم .

هدف دوم اینکه در هر مرحله از نوشتن کدهای بالا نتونستم مشکل رو حل کنم از استادان محترم سایت کمک بگیرم.

Veteran
سه شنبه 28 بهمن 1393, 14:10 عصر
مقدار اون عدد فرد یا زوج ( هرکدوم که انتخاب شده) + عدد نمیش داده شده رو بصورت ایجکس بفرست به صفحه مورد نظر.
بعد عملیاتو که انجام دادی، مقدار تکرار و عدد بعری رو در ارایه قرار بده و با Json_encode
اریه رو چاپ کن، بعدش اینور مقدار تکرار و عدد جدیدو نشون بده.

بیتا حکمت
سه شنبه 28 بهمن 1393, 14:24 عصر
مقدار اون عدد فرد یا زوج ( هرکدوم که انتخاب شده) + عدد نمیش داده شده رو بصورت ایجکس بفرست به صفحه مورد نظر.
بعد عملیاتو که انجام دادی، مقدار تکرار و عدد بعری رو در ارایه قرار بده و با Json_encode
اریه رو چاپ کن، بعدش اینور مقدار تکرار و عدد جدیدو نشون بده.

سلام بی نهایت ممنونم . اما متوجه نشدم
"
قدار اون عدد فرد یا زوج ( هرکدوم که انتخاب شده) + عدد نمیش داده شده رو بصورت ایجکس بفرست به صفحه مورد نظر. "

منظورتون از صفحه مورد نظر چیه ؟ من کلا" در مورد یک صفحه صحبت کردم
"
بعد عملیاتو که انجام دادی، مقدار تکرار و عدد بعری رو در ارایه قرار بده و با Json_encode
اریه رو چاپ کن، بعدش اینور مقدار تکرار و عدد جدیدو نشون بده "

چرا باید مقدار تکرار رو در آرایه قرار بدم . تو فیلد دیتابیس ذخیره کنم بهتر نیست ؟

Unique
سه شنبه 28 بهمن 1393, 15:18 عصر
ببینید. شما میتونید همه چز را توی یک صفحه ایجاد کنید یا برای اینکه منظم تر کد بزنید از دو صفحه اصتفاده کنید. یک صفحه وظیفه نمایشی داره و صفحه دیگه وظیفه دریافت اطلاعات از کاربر و پردازش های مورد نیاز را داره. شما باید وقتی صفحه نمایش load میشه درخواست ها را که میتوه شامل دریافت کد ۱۲ رقمی باشه برای صفحه پردازش ارسال و نتیجه را برای کاربر چاپ کنید. یا وقتی کاربر حذف اعداد فرد یا زوج را میزنه درخواست را با Ajax ارسال کنید و پردازشتون را انجام بدین و بعدش عدد بعدی را نمایش بدین.

بیتا حکمت
سه شنبه 28 بهمن 1393, 16:57 عصر
من برای شروع یادگیری ، از این کد استفاده کردم اما خطا داد ( بررسی می کنه که کاربری وجود داره یا نه )

کدهای index.Html


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script type="text/javascript">
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}


function checkUser()
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}

url='index.php?user='+document.getElementById('use r').value;
//alert(url);
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);

}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
if (xmlHttp.responseText=='1')
{
document.getElementById("user").style.border="1px solid #FF0000";
}
else{
document.getElementById("user").style.border="1px solid #00CC00";
}

}
}

</script>
</head>

<body>
<form action="index.php" method="post">
<table width="300" border="0">
<tr>
<td><label for="name">name </label></td>
<td><input type="text" id="name" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><label for="user">user </label></td>
<td><input type="text" id="user" /></td>
<td style="text-align:left"><input type="button" value="check" onclick="checkUser()"/></td>
</tr>
<tr>
<td><label for="pass">password</label></td>
<td><input type="password" id="pass" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td colspan="2"><input type="submit" id="send" /></td>
</tr>
</table>
</form>
</body>
</html>






کدهای Index.php




<?php
$con=mysql_connect('localhost','myuser','mypasswor d');
$db=mysql_select_db('ajax',$con);
$sql="SELECT * FROM `users` WHERE `user` ='".$_GET['user']."'";
$r=mysql_query($sql);
$result=mysql_num_rows($r);
echo( $result);
?>


خطایی که نشون داده میشه :
mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/mysite1/public_html/ajax/index.php on line 6

میخوام وقتی رو دکمه چک کلید شد ، تو همون صفحه HTML نمایش داده بشه که کاربر وجود دارد ، دلیل خطا چیه ؟

Veteran
سه شنبه 28 بهمن 1393, 17:21 عصر
سلام بی نهایت ممنونم . اما متوجه نشدم
"
قدار اون عدد فرد یا زوج ( هرکدوم که انتخاب شده) + عدد نمیش داده شده رو بصورت ایجکس بفرست به صفحه مورد نظر. "

منظورتون از صفحه مورد نظر چیه ؟ من کلا" در مورد یک صفحه صحبت کردم
"
بعد عملیاتو که انجام دادی، مقدار تکرار و عدد بعری رو در ارایه قرار بده و با Json_encode
اریه رو چاپ کن، بعدش اینور مقدار تکرار و عدد جدیدو نشون بده "

چرا باید مقدار تکرار رو در آرایه قرار بدم . تو فیلد دیتابیس ذخیره کنم بهتر نیست ؟




ببینید، سناریو شما صحبت از 2 خروجی میکنه
1-مقدار تکرار عدد فعلی
2-عدد جدید ( عدد بعدی جهت نمایش)
در ایجکس اطلاعات به یک ادرس ( فایل) ارسال و هرآنچه در انجا خروجی ( چاپ ) شد برگشت داده میشه.
خب اولین کاری که باید بکنیم این عددی که داره نمیش داده میشه رو ارسال کنیم ( ایجکس) و روی اونها عملیات مورد نظر رو انجام بدیم.که توی این مسله باید تعداد تکرار عدد رو به دست بیاریم.
شما بعد از اینکار ( به دست اوردن مقدار تکرار) باید یک عدد جدید جهت نمایش به کاربر هم بسازید.
بعد باید نتیجه رو چاپ کنید که چون دو مقدار داریم.یکی مقدار تکرار و دیگری عدد جدید، بهتره در ارایه قرار داده و اون رو بصورت json برگشت بدیم.
بعد که اطلاعات برگشت خورد، میتونیم عدد جدید رو نمایش بدیم و همینطور تعداد تکرار عدد قبلی.
این فقط راه حل هست، بدون کد.
شما باید با jquery مراحل بالا را پیاده سازی کنید( ایجکس)

Unique
سه شنبه 28 بهمن 1393, 18:43 عصر
خانم حکمت شما چرا مشتقیم با XHR کار میکنید ؟! در مورد Jquery تحقیق کنید و اگه باهاش کار نکردید حتما قبل از شروع JQuery را یاد بگیرید. برای پیاده سازی مستقیم با Javascript شما باید چندین برابر Jquery کدنویسی کنید و رفع خطا ها و مشکلات هم به این آسونی نیست. متاسفانه Internet Explorer مثل همیشه مشکلات بسیار بسیار زیادی داره و حسابی اذیتتون میکنه ! برای Compatibility روی مرورگر ها و راحتی کد حتما از JQuery استفاده کنید. کتابخونه های دیگه هم هستند و اگه اون ها را هم بلدین از اون ها هم میتونید استفاده کنید اما Jquery از همه شناخته شده تره.

leaping
سه شنبه 28 بهمن 1393, 20:35 عصر
این به نظرم سادست حالا منطقشو رو اینطوری میتونید جلو برید
دو صفحه بسازید همونطور که دوستمون Veteran (http://barnamenevis.org/member.php?160830-Veteran) گفتن
بعدش یک رویداد(event) برای رادیوها بذارید حالا مثلا انتخاب شدن یا هر چیز دیگه ای و بعدش (بعد از اتفاق افتادن event توسط کاربر) مقدار رو به صفحه دوم از طریق ajax بفرستید.حالا اسم صفحه هر چی که هست بعدش که مقدار مشخص رو از طریق ajax ارسال کردین مقدار جدید رو در اون صفحه echo کنید و بعدش همین مقدار رو از طریق ajax دریافت کنید و درون صفحه رفرش کنید
حالا دوستمون به این خاطر گفتن در آرایه قرار بدین که شما دو مقدار از صفحه php دریافت میکنید و هر کدوم رو در یک مکان مختص به خودش نمایش میدین پس لازمه که با آرایه بگیرید و بعدش از طریق InerHtml اون رو در صفحه اولتون جا گذاری کنید.
من پیشنهاد میدم از همین دستورات خام javascript استفاده کنید چون کتابخانه های jquery حجم بی مربوطی دارن و برای کارهای کوچیک من خودم به شخصه استفاده نمیکنم.

Unique
چهارشنبه 29 بهمن 1393, 00:20 صبح
من پیشنهاد میدم از همین دستورات خام javascript استفاده کنید چون کتابخانه های jquery حجم بی مربوطی دارن و برای کارهای کوچیک من خودم به شخصه استفاده نمیکنم.

خدایی نمیخوام ساز مخالف بزنم اما چاره ای نیست !
Javascript خام برای استفاده از XHR واقعا غیر کاربردی و غیر عاقلانه هستش.
در مورد حجم چون به راحتی میشه gzip را روی سررو تنظیم کرد حجم کتابخونه حدود ۲۰ کیلو میشه و واقعا ۲۰ کیلو حجمی نیست ! تازه میشه از CDN های گوگل استفاده کرد که به احتمال بالای ۸۰ درصد قبلا کاربر یکبار دانلودش کرده.
باز هم توصیه میکنم از jquery و کتابخونه های دیگه استفاده بشه.

بیتا حکمت
چهارشنبه 29 بهمن 1393, 00:40 صبح
الان من گیچ شدم ، یعنی تو همین پله اول که درک مفاهیم هست گیر کردم ، اگر درست متوجه شده باشم

جاوا اسکریپت : یک زبان برنامه نویسی نویست که کدهای اون سمت کلاینت اجرا میشه . مثلا" من اگر بخوام با کلیک روی باتن مقدار Text1 در Text2 قرار بگیره و .. اما با این زبان نمیشه با پایگاه داده ارتباط برقرار کرد .



آجاکس : وقتی که بخوایم یه قسمتی از فرم سمت سرور ارسال بشه از Axax استفاده می کنم ، بدون اینکه همه فیلدها سمت فرم ارسال بشن مثل بررسی تکراری بودن کاربر

پس این وسط نقش Json و جی کوئری چیه ؟ CDN های گوگل چیه ؟

و اینکه کدی من در پست شماره 5# گذاشته بودم . از سایتی بود که عنوانش اموزش استفاده از اجاکس بود ، در حالی که دوستان بزرگوار در این تاپیک گفتند اینا کدهای جاوا هستند .

پی نوشت : یک چیزی تو پروسه یادگیری برنامه نویسی من درست نیست و لنگ نداره ، اما نمی تونم پیداش نمی کنم

aliphp1
چهارشنبه 29 بهمن 1393, 01:19 صبح
این برنامه ای که شما میخواین بنویسید رو باید کسی بنویسه که مقداری به jquery و php آشنایی داشته باشه
توصیه می کنم اول اطلاعات تون رو کامل تر کنید بعد اقدام کنید و یا از کسی برای نوشتن کد کمک بگیرید
چون با چیزهایی که گفتید مشخصه با این راهنمایی های دوستان نمی تونید خودتون کدش رو بنویسید
ضمنا به نظر من هم استفاده از jquery حداقل برای تازه کار ها خیلی خیلی راحت تر هست و برای حرفه ای ها هم کد تمیز و زیباتری داره و اگر از کتابخونه رو از گوگل فراخوانی کنید به احتمال خیلی بالا قبلا کاربر دانلودش کرده
یه توضیح کوچیک : جاوا اسکریپت یک زبان سمت کلاینت هست و فقط می تونه توی مرورگر شما کار کنه و تاثیری روی سرور نداره
php زبان سمت سرور هست که ظاهرا پروژه شما نیازی به php نداره و همه اش رو میشه با جاو ا اسکریپت طراحی کرد (البته اگر نخواین اطلاعاتی ذخیره کنید)
jquery: یک کتابخانه از جاوا اسکریپت هست که با توایع آماده ای که داره کار رو برای شما خیلی راحت می کنه
کتابخانه jquery رو می تونید به پروژه تون ضمیمه کنید و یا اینکه از سرور های گوگل فراخوانی کنید
Ajax: زبان برنامه نویسی نیست و یک تکنیک هست که با استفاده از جاوا اسکریپت (یا jquery) و php شما اطلاعاتی رو بین مرورگر و سرور رد و بدل می کنید طوری که صفحه رفرش نشه و فقط قستی از صفحه که نیاز هست تغییر کنه

بیتا حکمت
چهارشنبه 29 بهمن 1393, 01:31 صبح
این برنامه ای که شما میخواین بنویسید رو باید کسی بنویسه که مقداری به jquery و php آشنایی داشته باشه
توصیه می کنم اول اطلاعات تون رو کامل تر کنید بعد اقدام کنید و یا از کسی برای نوشتن کد کمک بگیرید
چون با چیزهایی که گفتید مشخصه با این راهنمایی های دوستان نمی تونید خودتون کدش رو بنویسید
ضمنا به نظر من هم استفاده از jquery حداقل برای تازه کار ها خیلی خیلی راحت تر هست و برای حرفه ای ها هم کد تمیز و زیباتری داره و اگر از کتابخونه رو از گوگل فراخوانی کنید به احتمال خیلی بالا قبلا کاربر دانلودش کرده
یه توضیح کوچیک : جاوا اسکریپت یک زبان سمت کلاینت هست و فقط می تونه توی مرورگر شما کار کنه و تاثیری روی سرور نداره
php زبان سمت سرور هست که ظاهرا پروژه شما نیازی به php نداره و همه اش رو میشه با جاو ا اسکریپت طراحی کرد (البته اگر نخواین اطلاعاتی ذخیره کنید)
jquery: یک کتابخانه از جاوا اسکریپت هست که با توایع آماده ای که داره کار رو برای شما خیلی راحت می کنه
کتابخانه jquery رو می تونید به پروژه تون ضمیمه کنید و یا اینکه از سرور های گوگل فراخوانی کنید
Ajax: زبان برنامه نویسی نیست و یک تکنیک هست که با استفاده از جاوا اسکریپت (یا jquery) و php شما اطلاعاتی رو بین مرورگر و سرور رد و بدل می کنید طوری که صفحه رفرش نشه و فقط قستی از صفحه که نیاز هست تغییر کنه

ممنون ، من این سناریو رو خودم برای خودم طرح کردم که با نوشتن این با اجاکس و جی کوئی اشنا بشم .

_

فقط یه قسمت از حرفاتونو متوجه نشدم این قسمت : " اگر از کتابخونه رو از گوگل فراخوانی کنید به احتمال خیلی بالا قبلا کاربر دانلودش کرده "

یعنی اگر فایل jquery.JSروی هاست من نباشه و بخوام از گوگل استفاده کنم باید کاربر اونو قبلا" دانلود کرده باشه ؟!

aliphp1
چهارشنبه 29 بهمن 1393, 01:47 صبح
ممنون ، من این سناریو رو خودم برای خودم طرح کردم که با نوشتن این با اجاکس و جی کوئی اشنا بشم .

_

فقط یه قسمت از حرفاتونو متوجه نشدم این قسمت : " اگر از کتابخونه رو از گوگل فراخوانی کنید به احتمال خیلی بالا قبلا کاربر دانلودش کرده "

یعنی اگر فایل jquery.JSروی هاست من نباشه و بخوام از گوگل استفاده کنم باید کاربر اونو قبلا" دانلود کرده باشه ؟!

ببینید شما وفتی توی هر زبانی بخواین تابع نوبسید و بعد از اون تابع استفاده کنید باید فایل حاوی تابع رو هم به پروژه تون اضافه کنید دیگه ! درسته ؟
خوب حالا jquery مجموعه ای از توابع نوشته شده با جاوا اسکریپت هست پس موقع استفاده از اون باید کتابخونه اون رو به پروژه تون اضافه کنید
حالا یا می تونید روی هاست خودتون بزارید و ای اینکه از سرور گوگل استفاده کنید
وفتی این کار رو بکنید چون تعداد زیادی سایت این کار رو می کنن خوب حتما کاربری که سایت شما رو باز می کنه قبلا یک دونه دیگه از این سایت ها رو باز کرده و الان که سایت شما رو میخواد باز کنه این کتابخونه براش دانلود شده و توی سیستمش هست و زمان برای دانلود دوباره نیاز نداره
این دانلود که میگم یعنی یکبار اجرا کرده باشه
اگر هم نکرده باشه که همون وقتی که برنامه شما رو اجرا کنه دانلود میشه
دانلود به این معنی نیست که بیاد یک فایل رو دانلود کنه و روی سیستمش بذاره تا بتونه سایت شما رو باز کنه
فقط منظور این هست که اگر قبلا اجرا کرده باشه سرعت لود سایت بالا تر هست و گر نه مشکلی پیش نمیاد

leaping
چهارشنبه 29 بهمن 1393, 15:10 عصر
ممنون ، من این سناریو رو خودم برای خودم طرح کردم که با نوشتن این با اجاکس و جی کوئی اشنا بشم .

_

فقط یه قسمت از حرفاتونو متوجه نشدم این قسمت : " اگر از کتابخونه رو از گوگل فراخوانی کنید به احتمال خیلی بالا قبلا کاربر دانلودش کرده "

یعنی اگر فایل jquery.JSروی هاست من نباشه و بخوام از گوگل استفاده کنم باید کاربر اونو قبلا" دانلود کرده باشه ؟!
خانم حکمت من یه توصیه میکنم اینه که خودتون امتحانش کنید.
حقیقتش اینه که حتی اگه کاربر از قبل دانلودش کرده باشه و از لینک گوگل هم بخواید استفاده کنید من بازهم میگم از جاوا اسکریپت خام استفاده کنید.
کار با توابع jquery یعنی اینکه کاربر شما یک مقدار مشخصی از اطلاعات رو باید خوشد بگیره و این خودش باعث دیرتر لود شدن صفحه میشه حتی برای یک بار و این خوب نیست.
کد نوشتن خام با javascript هم قدرت تجزیه و تحلیلتون رو بالا میبره و هم حجم کد نویسیتون رو کم میکنه بر خلاف دوستان که میگن تمیز نیست من میگم که آقا من یک وب سایت دارم که حداقل 200 نوع درخواست مختلف ajaxi توش هست و حجم کل اسکریپت مربوط به ajax فک نکنم 15 کیلوبایت شده باشه
من بازم توصیه میکنم با javascript خام انجام بدین jquery خیلی دست و پا گیره ... من حتی افکتهامو هم با jquery انجام نمیدم دیگه چه رسد به ajax

بیتا حکمت
چهارشنبه 29 بهمن 1393, 16:12 عصر
الان متوجه شدم چرا نمی تونستم گفته های استادان بزرگوار رو درک کنم .این عکس مثالی از دیتابیس سناریو هست


http://8pic.ir/images/nv3qmtx6jswpxkcyzkw2.jpg


فرض کنیم کاربر لاگین کرد و قرار هست اعداد 12 رقمی و پیام مربوط رو ببینه . این اعداد کجا هستند در دیتابیس .

چیزی که تو ذهن من بود : برای اینکه با هر بار رویداد ( یعنی کلیک روی رادیو باتن ) محتویات دیتابیس رو فراخوانی نکنیم ، همون اول کار نتیجه کوئری رو در متغیری که سمت کلاینت هست ذخیره می کنیم . یعنی وقتی userid=1 لاگین کرد تمام اعداد رقمی که مربوط به او هستند و فیلدهای مربوط از Mysql به ارایه ای که در جاوا اسکریپت هستند ریخته میشه ( وقتی در مورد عبارت ارسال متغیر از Php به جاوا اسکریپت سرچ کردم ، همه جا نوشته شده بود که از جی کوئری برای این کار استفاده بشه )


---
روشی که Veteran توضیح دادن :




مقدار اون عدد فرد یا زوج ( هرکدوم که انتخاب شده) + عدد نمیش داده شده رو بصورت ایجکس بفرست به صفحه مورد نظر.
بعد عملیاتو که انجام دادی، مقدار تکرار و عدد بعری رو در ارایه قرار بده و با Json_encode
اریه رو چاپ کن، بعدش اینور مقدار تکرار و عدد جدیدو نشون بده.


یعنی ذهنیت پیش فرض من این بود ، اجاکس و جی کوئری یعنی اینکه ارتباط با سرور کاملا" قطع شده و همه چیز سمت کلاینت هست :لبخند: