سئوال در مورد كار با "چك‌باكس"

Aftabgardan-cc

Active Member
سلام؛

من يه مشكلي دارم و اون اينكه:
ببينيد، فرض كنيد من در يك صفحه با do while، همه رديف‌هاي يك جدول در ديتابيس رو فراخواني كردم و چاپ كردم... (ليست همه اعضا) و جلو هر كدوم يك "چك‌باكس" گذاشتم...
حالا مي‌خوام به مدير اين امكان رو بدم كه چك باكس كنار اسم هر عضوي كه قراره در صفحه بعد، به عنوان ليست حضور و غياب چاپ بشه رو تيك بزنه و روي دكمه Submit كليك كنه و در صفحه بعد، فقط اونايي رو كه تيك زده ببينه!

حالا چطور بايد اين كار رو كنم؟
چطور با REQUEST_$ چك‌باكس‌ها رو تست كنم و ببينم كه كدوم تيك خورده؟
چون تعداد اعضا كه ثابت نيست كه مثلا بگم اگه اولي تيك خورده بود، كپي كن در متغير فلان!

اصلا چطور بفهمم كه كدوما تيك خورده! شماره ID اعضايي كه تيك خوردن رو چطور بايد بفهمم؟!

تا به حال اين كار رو انجام داديد؟
راه ساده‌اي سراغ داريد؟


من براي توضيح بيشتر، يه مثال بزنم:
مثلا فرض كنيد مدير همين انجمن، مي‌ياد كنار تاپيك‌هايي كه مثلا اضافه هستند، چك‌باكسش رو تيك مي‌زنه و دكمه DELETE رو مي‌زنه كه تيك خورده‌ها پاك بشن!
من مي‌خوام بدونم چطور به ديتابيس بفهمونم كه اين تاپيك IDش چنده كه پاكش كنه و ....

اميدوارم متوجه شده باشيد و راهنمايي كنيد، ممنون...
 

tabib_m

Member
سلام
PHP:
<?
whlie(....){
     ....
     ?>
     <input type="checkbox" name="BOXES[<?=$row['id'];?>]" value="1">
     <?
}
?>

نام تکست باکسها به صورت BOXES[rowid](به جای rowid آی دی رکورد مورد نظر) ثبت میشه
که نتیجه ای که در صفحه ی بعد داره ، یک آرایه س که اندیس های اون رو آی دی های تیبلتون تشکیل داده ، و مقادیر اونهایی که چک خورده بودن ، 1 هست.
اینجوری میتونید بفهمید که چه رکوردهایی تیک خورده بودن.
موفق باشید
 
آخرین ویرایش:

Aftabgardan-cc

Active Member
آقا طبيب ممنون...

مشكل نام‌گذاري چك‌باكس‌ها رو با راهنمايي شما حل كردم، مشكل اصلي خوندن مقدار چك باكس در صفحه بعد بود كه از همون حلقه do while كه براي چاپ مقادير استفاده كرده بودم، استفاده كردم و مشكل به خوبي حل شد :)

بازم ممنون،
لطف كردي...
 
آخرین ویرایش:

msnasiri

Member
خب اونم راحته
فقط چندتا نکته:
1- اینکه می تونی به صورت زیر عمل کنی
$var="BOXES".$i;
$$var
2- حال این متغیر دلخواه شماست و برای اینکه بفهمید تیک خورده یا نه می تونید از isset() استفاده کنید.
که در صورتی که تیک خورده باشه مقدار صحیح و در غیر اینصورت مقدار خراب رو بر می گردونه
 
سلام.
منم به‌ همچین مشکلی برخوردم، هر چی هم راهنمایها رو خوندم نشد که‌ نشد.
من یه‌ فرم دارم به‌ این شکل:
PHP:
<form id="form1" name="form1" method="post" action="del.php">
    <?php do { ?>
      <?php echo $row_art['title']; ?>
      <input type="checkbox" name="BOXES[<?=$row_art['id'];?>" value="1" />
      <?php } while ($row_art = mysql_fetch_assoc($art)); ?>
    <input type="submit" name="Submit" value="delete all" />
</form>
تو این فرم همه‌ تایتل همه‌ خبرها نمایش داده‌ میشه‌ و بغلشم یه‌ چک باکس.
حالا من میخوام همه‌ اون تایتلها‌ که‌ چک شدن با هم پاک شن.
فکر کنم فرم درست باشه‌، مشکل صفحه‌ del.php هست.
اگه‌ میشه‌ لطف کنید و یه‌ راهنمایی بفرمایید. (یه‌ خورده‌ بیشتر و واضح تر توضیح بدین)
 

Aftabgardan-cc

Active Member
سلام؛

من در صفحه اول، مثل شما، اونايي كه چك خوردن رو به صفحه بعد ارسال كردم، بعد در صفحه بعد، همه سطرهاي تيبل رو خوندم، چك كردم كه اگه از صفحه قبل ارسال شده بود و مقدارش on بود، يه چيزي رو پرينت كنه:
کد:
	do {
if (isset ($_REQUEST["b".$rec[0].""])){
		$h =$_REQUEST["b".$rec[0].""];
	if ($h == "on"){
echo ("AnyThing");
}
}
}while ($rec=mysql_fetch_row($result));

من در صفحه اول، نام چك باكس‌ها رو
کد:
b".$rec[0]."
گذاشتم، و حالا چك مي‌كنم كه اگه On بود يه كاري انجام بده، شما مي‌توني بگي DELETE كنه...
کد:
$rec[0]
شماره آي‌دي سطرهاي تيبله... :wink:

من از اين طريق خيلي راحت اين كار رو انجام دادم، شما هم مي‌توني همين كار رو انجام بدي:wink:
 
آخرین ویرایش:
سلام،
نمیدونم چرا ارور میده‌، شما لطف کن اگه‌ داری نمونه‌ کار خودت رو بزار. اینجور دیگه‌ حتما حل میشه‌ .

ممنون.
 

Aftabgardan-cc

Active Member
عزيز جان،
من نمونه كار بذارم، شما بايد شونصد تا كار انجام بدي تا اجرا بشه!
چون از روي ديتابيس من كار مي‌كنه و بايد خيلي از فايل‌ها رو include كني و ...

معمولا اينطوريه كه كسي كه اشكال داره، كدهاش رو مي‌ذاره بقيه اصلاح كنن :) :wink:
 
این صفحه‌ فرم:
PHP:
<form id="form1" name="form1" method="post" action="delshow.php">
    <?php do { ?>
      <?php echo $row_art['title']; ?>
      <input type="checkbox" name="b<?=[b.$rec[0].]?>" value="1" />
      <?php } while ($row_art = mysql_fetch_assoc($art)); ?>
    <input type="submit" name="Submit" value="delete all" />
</form>
اینم صفحه‌ delshow.php :
PHP:
<?
do {
if (isset ($_REQUEST["b".$rec[0].""])){
		$h =$_REQUEST["b".$rec[0].""];
	if ($h == "on"){
echo ("AnyThing");
}
}
}while ($rec=mysql_fetch_row($art));
?>

مگه‌ نباید تو صفحه‌ دوم ای دی های که‌ چک خورده‌ رو پرینت کنه‌؟؟؟
 

Aftabgardan-cc

Active Member
1- اين بخش از كدت چرا اينجوريه؟
PHP:
 <input type="checkbox" name="b<?=[b.$rec[0].]?>" value="1" />
فكر كنم بايد اينجوري باشه:
PHP:
 <input type="checkbox" name="b<? echo $rec[0]; ?>" value="on" />

2- يه بخش ديگه از كدهاي اولت مشكل داره، كلا من پيشنهاد مي‌كنم كد صفحه اول رو اينجوري بذاري: (قبل از استفاده از rec$ اون رو تعريف كن، يادت نره)

PHP:
<form id="form1" name="form1" method="post" action="delshow.php">
    <?php
$rec = mysql_fetch_assoc($art);
 do { 
 echo $rec['title'];
?>
<input type="checkbox" name="b<? echo $rec[0]; ?>" value="on" />
      <?php } while ($rec = mysql_fetch_assoc($art)); ?>
    <input type="submit" name="Submit" value="delete all" />
</form>


3- توي صفحه دوم، طبق ايني كه گذاشتي (كه مال خودمه) به تعداد چك خورده‌ها، عباره AnyThing چاپ مي‌شه!
اين رو خودت درستش كن، بلدي...
 
آخرین ویرایش:
آقا دستت درد نکنه‌، صفحه‌ اول که‌ درسته‌. اما اگر 4 تا record داشته‌ باشم 3 تا نشون میده‌ همه‌ رو نشون نمیده‌. همیشه‌ یک دونه‌ کمتر نشون میده‌.
اما صفحه‌ دوم میخوام به‌ جای anything ای دی رو چاپ کنه‌. این کد شما فقط یک بار anything رو مینویسه‌، چرا؟
(کلا من میخوام اونای که‌ چک خورده‌ رو پاک کنم)
مرسی
 

tabib_m

Member
اگر 4 تا record داشته‌ باشم 3 تا نشون میده‌ همه‌ رو نشون نمیده‌. همیشه‌ یک دونه‌ کمتر نشون میده‌.
به جای استفاده از do while از خود while استفاده کن تا اون مشکل اول حل بشه

چرا اینقدر دردسر میکشی آخه؟؟
هم شما و هم آقای آفتابگردان
عوض استفاده از isset از حلقه ی foreach استفاده کن
خدا خیرش بده همه ی کارا رو راحت کرده
اول اون صفحه ی فرمت رو به این صورت در بیار:
کد:
<form id="form1" name="form1" method="post" action="delshow.php">
    <?php  [B]while ($row_art = mysql_fetch_assoc($art))[/B]{ ?>
      <?php echo $row_art['title']; ?>
      <input type="checkbox"[B] name="b[<?=b.$rec[0]?>]"[/B] value="1" />
      <?php[B] }[/B] ?>
    <input type="submit" name="Submit" value="delete all" />
</form>

و بعدش هم از foreach به این صورت استفاده کن:
کد:
foreach($b as $andis => $value){
    $query=mysql_query("delete from .... where `IDFIELD`='$andis'");
}
 

Aftabgardan-cc

Active Member
آخ شرمنده، آقا طبيب و شما راست مي‌گيد، اگه از حلقه do while استفاده كني، ركورد اول رو در صفحه بعد از دست مي‌دي...

از while استفاده كن. (شرمنده، حواسم نبود)

از اينا گذشته، آقا طبيب مثل هميشه گل كاشتند ديگه...
خيلي راحت از همين كد جديد استفاده كن و قال قضيه رو بكن :)

آقا طبيب، ممنون و موفق باشيد ...
 

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

بالا