Parsi Coders
سوال مفهومی از ajax در این کد - نسخه قابل چاپ

+- Parsi Coders (http://parsicoders.com)
+-- انجمن: Web Development and Design (http://parsicoders.com/forumdisplay.php?fid=47)
+--- انجمن: AJAX (http://parsicoders.com/forumdisplay.php?fid=51)
+--- موضوع: سوال مفهومی از ajax در این کد (/showthread.php?tid=3070)



سوال مفهومی از ajax در این کد - one hacker alone - 02-22-2013

با سلام
قطعه کد زیر موتور اژاکس رو نووشته و یه تابع برای حذف رکورد ها
در واقع این کد به بانک وصل میشه و داده ها رو تو جدول لیست میکنه حالا کاربر اگه روی دکمه حذف کلیک کنه اون رکورد با اژاکس میره تو بانک حذف میشه و با جاوا اسکریپت از صفحه فعلی برداشته میشه
اما سوال اینه که ما وقتی id سطری که کاربر روش دکمه حذف رو زده به تابع sendfordelمیفرستیم چی باعث میشه که ای دی ها با هم تفاوت داشته باشه یعنی در واقع چجوری منحصر بفرد شده در حالی که این موضوع در این جدول ربطی به ایدی بانک نداره و در واقع ما اینجا یک متغییر $id داریم و باید یک داده توش ذخیره شده باشه !!!
اما چجوری میفهمه که این id ماله کدوم سطر هست
مگه اینکه با هربار دکمه حذف یه بار حلقه while اجرا بشه تا به اون id برسه و بعد بفرسته برا تابع sendfordel 
کد پی‌اچ‌پی:
[color=#800000]<script type=[color=#0000FF]"text/javascript"[/color] language=[color=#0000FF]"javascript"[/color]>[/color]
var pageurl="del.php?code=";
var 
xmlhttp;
var 
nid=0;
function 
answer()
{
if(
xmlhttp.readyState == 4)
{
var 
result=xmlhttp.responseText;
del(nid);
}
}
function 
sendfordel(id)
{
var 
strcode;
createXMLHttpRequest();
strcode id;
nid=id;
xmlhttp.open("GET"pageurl strcodetrue);
xmlhttp.onreadystatechange=answer;
xmlhttp.send(null);
}
function 
createXMLHttpRequest()
{
if (
window.ActiveXObject)
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (
window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
}
function 
del(nid)
{
var 
tab=document.getElementById("tbl");
var 
tr=document.getElementById("tr"+nid);
tab.deleteRow(tr.rowIndex);
}
[
color=#800000]</script>[/color]
[color=#000080]</head>[/color]
[color=#000080]<body>[/color]
[color=#008080]<table width=[color=#0000FF]"500"[/color] id=[color=#0000FF]"tbl"[/color] border=[color=#0000FF]"0"[/color] cellspacing=[color=#0000FF]"0"[/color] cellpadding=[color=#0000FF]"5"[/color]>[/color]
[color=#008080]<tr>[/color]
[color=#008080]<td width=[color=#0000FF]"99"[/color] bgcolor=[color=#0000FF]"#00CC66"[/color]>[/color]ID[color=#008080]</td>[/color]
[color=#008080]<td width=[color=#0000FF]"112"[/color] bgcolor=[color=#0000FF]"#00CC66"[/color]>[/color]Name[color=#008080]</td>[/color]
[color=#008080]<td width=[color=#0000FF]"171"[/color] bgcolor=[color=#0000FF]"#00CC66"[/color]>[/color]Phone Number[color=#008080]</td>[/color]
[color=#008080]<td width=[color=#0000FF]"78"[/color] bgcolor=[color=#0000FF]"#00CC66"[/color]>[/color]Operation[color=#008080]</td>[/color]
[color=#008080]</tr>[/color]
[color=#000080]<?php
$s=mysql_connect("127.0.0.1","root","");
if(!
$s)
echo 
"error in connect to mysql server";
$db=mysql_select_db("tellbook");
$result=mysql_query("select * from tbl");
$row="";
while(
$row=mysql_fetch_assoc($result))
{
?>[/color]
[color=#000080]<?php $id=$row["id"]; ?>[/color]
[color=#008080]<tr id=[color=#0000FF]"tr<?php print($id);?>"[/color]>[/color]
[color=#008080]<td>[/color][color=#000080]<?php print($row["id"]); ?>[/color][color=#008080]</td>[/color]
[color=#008080]<td>[/color][color=#000080]<?php print($row["name"]); ?>[/color][color=#008080]</td>[/color]
[color=#008080]<td>[/color][color=#000080]<?php print($row["telephone"]); ?>[/color][color=#008080]</td>[/color]
[color=#008080]<td>[/color][color=#FF8000]<input type=[color=#0000FF]"button"[/color] value=[color=#0000FF]" delete "[/color] name=[color=#0000FF]"clk"[/color] onclick=[color=#0000FF]"sendfordel(<?php print($id);?>;);"[/color]/>[/color][color=#008080]</td>[/color]
[color=#008080]</tr>[/color]
[color=#000080]<?php
}
mysql_close($s);
?>[/color]
[color=#008080]</table>[/color]
[color=#000080]</body>[/color] 
  به عبارت دیگه مشکل من اینه که:

ببینید  ما فرض میکنیم خروجی ما به شکل زیر هست12345

کد:
id       name    operate
کد:
_______________________
کد:
1    ali    del
کد:
2    reza    del
کد:
3    ahmad    del


ببینید این درسته هم ایدی های واکشی شده از بانک جدا هستن هم اینکه هر tr یه ایدی جدا گرفته

اما وقتی که ما id رو پاس میدیمم به تابع در واقع داریم id ی پاس میدیم که یک متغییر هست و هیچ ربطی نه به ایدی tr داره نه به ای دی بانک و با توجه به تریس کردن حلقه اخرین مقداری که در متغییر $id ذخیره میشه عدد 3 هست اینو قبول دارین دیگه؟ چون به اندازه 3 رکورد در بانک بوده و مقدار اخرین ایدی بانک هم 3 بوده پس داریم
$id=3 حالا از اون طرف ما اومدیم همین $id رو به تابع ارسال کردیم در حالی که امکان داره ما روی دومی حذف رو زده باشیم یا اولی
اما کد به درستی کار میکنه و من با درست بودن کد مشکل دارم میخوام بدونم قضیه چیه
اگه بخوام یه جور دیگه بگم اینجوری میشه
ببینید تو این خط ما اومدیم ایدی جدول رو میریزیم تو متغییر $id1

کد:
<?php $id=$row["id"]; ?>


در خط بعد هم اومدیم همین $id رو به tr دادیم تا این ایدی منحصر به فرد برای هر سطر هم منحصر به فرد باشه و این رو قبول دارم
اما حرف من اینه که این id$در اولین دور اجرای حلقه مقدار 1 و دور دوم مقدار 2 و دور سوم مقدار 3 میگیره و تمام اطلاعات از بانک واکشی میشه و برای کاربر نمایش داده میشه
حالا در حالی که مقدار $id=3 هست بر اساس اخرین دور اجرای حلقه ؛ کاربر میاد روی یکی از سطرها حذف رو میزنه و ما اومدیم متغییر $id رو فرستادیم به تابع!!!!!
خوب مگه این مقدار ایدی 3 نیست پس این برنامه از کجا میفهمه که اون سطری که ما کلیک کردیم ایدیش 2 یا 3 هست؟؟؟؟؟؟؟؟؟؟؟؟؟؟