02-22-2013، 07:53 PM
با سلام
قطعه کد زیر موتور اژاکس رو نووشته و یه تابع برای حذف رکورد ها
در واقع این کد به بانک وصل میشه و داده ها رو تو جدول لیست میکنه حالا کاربر اگه روی دکمه حذف کلیک کنه اون رکورد با اژاکس میره تو بانک حذف میشه و با جاوا اسکریپت از صفحه فعلی برداشته میشه
اما سوال اینه که ما وقتی id سطری که کاربر روش دکمه حذف رو زده به تابع sendfordelمیفرستیم چی باعث میشه که ای دی ها با هم تفاوت داشته باشه یعنی در واقع چجوری منحصر بفرد شده در حالی که این موضوع در این جدول ربطی به ایدی بانک نداره و در واقع ما اینجا یک متغییر $id داریم و باید یک داده توش ذخیره شده باشه !!!
اما چجوری میفهمه که این id ماله کدوم سطر هست
مگه اینکه با هربار دکمه حذف یه بار حلقه while اجرا بشه تا به اون id برسه و بعد بفرسته برا تابع sendfordel به عبارت دیگه مشکل من اینه که:
ببینید ما فرض میکنیم خروجی ما به شکل زیر هست12345
ببینید این درسته هم ایدی های واکشی شده از بانک جدا هستن هم اینکه هر tr یه ایدی جدا گرفته
اما وقتی که ما id رو پاس میدیمم به تابع در واقع داریم id ی پاس میدیم که یک متغییر هست و هیچ ربطی نه به ایدی tr داره نه به ای دی بانک و با توجه به تریس کردن حلقه اخرین مقداری که در متغییر $id ذخیره میشه عدد 3 هست اینو قبول دارین دیگه؟ چون به اندازه 3 رکورد در بانک بوده و مقدار اخرین ایدی بانک هم 3 بوده پس داریم
$id=3 حالا از اون طرف ما اومدیم همین $id رو به تابع ارسال کردیم در حالی که امکان داره ما روی دومی حذف رو زده باشیم یا اولی
اما کد به درستی کار میکنه و من با درست بودن کد مشکل دارم میخوام بدونم قضیه چیه
اگه بخوام یه جور دیگه بگم اینجوری میشه
ببینید تو این خط ما اومدیم ایدی جدول رو میریزیم تو متغییر $id1
در خط بعد هم اومدیم همین $id رو به tr دادیم تا این ایدی منحصر به فرد برای هر سطر هم منحصر به فرد باشه و این رو قبول دارم
اما حرف من اینه که این id$در اولین دور اجرای حلقه مقدار 1 و دور دوم مقدار 2 و دور سوم مقدار 3 میگیره و تمام اطلاعات از بانک واکشی میشه و برای کاربر نمایش داده میشه
حالا در حالی که مقدار $id=3 هست بر اساس اخرین دور اجرای حلقه ؛ کاربر میاد روی یکی از سطرها حذف رو میزنه و ما اومدیم متغییر $id رو فرستادیم به تابع!!!!!
خوب مگه این مقدار ایدی 3 نیست پس این برنامه از کجا میفهمه که اون سطری که ما کلیک کردیم ایدیش 2 یا 3 هست؟؟؟؟؟؟؟؟؟؟؟؟؟؟
قطعه کد زیر موتور اژاکس رو نووشته و یه تابع برای حذف رکورد ها
در واقع این کد به بانک وصل میشه و داده ها رو تو جدول لیست میکنه حالا کاربر اگه روی دکمه حذف کلیک کنه اون رکورد با اژاکس میره تو بانک حذف میشه و با جاوا اسکریپت از صفحه فعلی برداشته میشه
اما سوال اینه که ما وقتی 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 + strcode, true);
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 هست؟؟؟؟؟؟؟؟؟؟؟؟؟؟