add&delete

it5

Member
سلام
من يك جدولي دارم كه اطلاعاتي را از بانك ميخونه و نمايش ميده
من ميتونم در اين جدول اعمال add و delete را انجام دهم
اين جدول يك فيلد id هم داره
حالا من ميخوام هر بار كه add ياdelete ميكنم اين id ها به طور خودكار مرتب بشه
اگر توي mysql قسمت id را auto_increment تعريف كنيم چنين امكاني نيست.يعني id ها به هم ميريزه.
پس چاره چيه؟
 

tabib_m

Member
به هم که نمیریزه ، در حقیقت ثابت میمونه
پیشنهاد میکنم که یک فیلد دیگه (unique) بسازی که اعداد به صورت مرتب توش ثبت بشن ، و بعد از اون هم به شکل زیر آپدیت بشن:
کد:
if deleted a record:
-------
$query=mysql_query("select `id` from `tableName` where 1 order by `id`");
while($row=mysql_fetch_assoc($query)){
    $counter++;
    $thisID=$row['id'];
    $query2=mysql_query("update `tableName` set `numberField`='$counter' where `id`='$thisID'");
}
البته برای آپدیت نمیدونم راه ساده تر و کوتاه تری هم داره یا نه.

اگه خواستی با خود فیلد id هم میتونی همین کار رو بکنی ، ولی همونطور که گفتم بهتره که دستش نزنی
 
آخرین ویرایش:

it5

Member
ميشه بيشتر توضيح بدي
يعني من id را auto_increment انتخاب كنم و علاوه بر اون يك فيلد ديگه مثلا" به نام numberField ايجاد كنم و اين دستورات براش بنويسم؟
 

tabib_m

Member
يعني من id را auto_increment انتخاب كنم و علاوه بر اون يك فيلد ديگه مثلا" به نام numberField ايجاد كنم و اين دستورات براش بنويسم؟
درسته

اين فيلد جديد auto_increment باشه يا نه؟
نه


اصلا کلا برای چی میخوای یه همچین کاری بکنی؟؟ به چه دردت میخوره؟؟
 

it5

Member
ميخوام وقتي ليست منو نشون ميده با id كنارش.بصورت مرتب نشون بده(منظورم ترتيب idها)
 

it5

Member
يك سوال ديگه
مثلا" كاربر امكان add كردن توي بانك داره.
وقتي روي دكمه addكليك ميكنه به صفحه add كه شامل يك فرم ورود اطلاعات هست وارد ميشه
action اين صفحه ما رو به يك صفحه ديگه مثلا" add2 ميبره كه توي اون دستورات php هستش :
<?php
$username=$_POST['u'];
$password=$_POST['p'];
if(($username!='') && ($password!='')) {
include("connect.php");
//دستورات اضافه كردن به بانك
}
header('Location:صفحه نمايش اطلاعات بانك.php');

}
else
header('Location:add.php');
?>
من وقتي كه add ميكنم بلافاصله به خاطر header('Location:صفحه نمايش اطلاعات بانك.php'); به صفحه نمايش ميره.....
حالا يك مشكل اينجا هست و اون هم اينكه وقي بعد از add به صفحه نمايش ميرم با زدن كليد back space به صفحه قبلي بر ميگرده !!!!
در حالي كه نبايد بر گرده!!! چرا اين طور ميشه؟ مشكل چيه؟
 

it5

Member
ببخشيد. :wink:
اين كدها اين طوري هستش :

[LTR]
PHP:
<?php 
$username=$_POST['u'];
$password=$_POST['p'];
if(($username!='') && ($password!='')) {
include("connect.php");
//دستورات اضافه كردن به بانك
} 
header('Location:صفحه نمايش اطلاعات بانك.php'); 

}
else
header('Location:add.php');
?>
[/LTR]
 

tabib_m

Member
ميخوام وقتي ليست منو نشون ميده با id كنارش.بصورت مرتب نشون بده(منظورم ترتيب idها)
یعنی شما فقط برای همین کار میخواید سر دیتابیس رو شلوغ کنید؟
کافیه موقع نمایش دادن اونها ، یک شمارنده رو چاپ کنید:
PHP:
while($row=mysql_fetch_assoc($query)){
    $counter++;
    echo $counter;
    echo $row['FieldName'];
    ....
}
و یا هر روش دیگه.
برای یه همچین کاری هیچ وقت پای دیتابیس رو نکشید وسط!

در حالي كه نبايد بر گرده!!! چرا اين طور ميشه؟ مشكل چيه؟
چرا نباید برگرده؟؟

برای این که به این مسئله بر نخورید ، دستورات add رو توی همون صفحه ی نمایش اطلاعات بدید. یعنی اکشن فرمتون همون صفحه ی اول (نمایش اطلاعات) باشه.
 

it5

Member
ميشه راجب اين شمارنده و نحوه اضافه كردنش به كد بيشتر توضيح بدي....
يعني با اين شمارنده با هر بار add يا با هر بار del اين idها به ترتيب مرتب ميشه؟


در مورد دوم حالا اگر بخوام كد ها همينطوري در صفحات جدا باشند چي؟ راهي نيست كه با كليد backspace به صفحه قبلي بر نگرده/ يا اصلا" اين موضوع برگشت طبيعيه يا غير طبيعي ؟

mersi
 

tabib_m

Member
ميشه راجب اين شمارنده و نحوه اضافه كردنش به كد بيشتر توضيح بدي....
يعني با اين شمارنده با هر بار add يا با هر بار del اين idها به ترتيب مرتب ميشه؟
این شمارنده ای که من گفتم هیچ ربطی به دیتابیس نداره ، هیچ دخالتی هم توی تیبل ها نمیکنه.
اگه میخوای کنار رکوردهات یه عدد سریال ثبت بشه ، یک متغیر رو (به اصطلاح شمارنده) چاپ (echo) کن و یکی بهش اضافه کن برای رکورد بعدی. برای مثال توی یک حلقه ی while اگه بخوایم توی هر بار اجرا شدن دستورات حلقه ، نشون بدیم که این چندمین باره که داره انجام میشه ، از روشی مثل زیر استفاده میکنیم:
PHP:
$counter=0;

whlie(....){
    ....
    $counter++; // or $counter=$counter+1;
    echo $counter;
}

راهي نيست كه با كليد backspace به صفحه قبلي بر نگرده
توی مرورگر ها همیشه این اجازه رو به کاربر میدن که بتونه به صفحه قبل برگرده. این مسئله از دست طراحان سایت خارجه.
البته اگه شما میخوای که رکورد مورد نظر دوباره ثبت نشه ، کافیه یه کم کد نویسی کنی که رکورد ثبت نشه ! ولی در کل نمیتونی جلوی برگشتن صفحه رو بگیری!

بعضی ها برای رفع این مشکل ، برای تغییر صفحات از AJAX استفاده می کنن که در نتیجه باعث میشه در حقیقت اصلا صفحه تغییر نکنه که بخوات برگرده.
 

جدیدترین ارسال ها

بالا