PDA

View Full Version : سوال: منو برای کار با checkbox ها راهنمایی کنین



ahmadbadpey
یک شنبه 12 آبان 1387, 20:10 عصر
با سلام خدمت دوستان عزیز تر از جان
یه سوال . من برای سایتم قسمتی برای عضویت دارم که مشخصات اعضا بوسیله اون در جدولی به نام members در دیتابیس ذخیره میشه . حالا وقتی که می خوام اعضا سایت رو مدیریت کنم (منظورم حذف و ویرایش و...) می خوام توسط یک جدول که ستون اون از یک checkbox در جلوی نام هر کاربر هست و یک دکمه در پایین جدول بتونم تمام یا تعدادی از اعضا رو انتخاب و توسط اون دکمه اوها رو حذف یا ویرایش کنم . یه مثال ساده مثل ایمیل های تو یاهو که هر کدومشون یه checkbox جلوشون دارن و به راحتی میشه با انتخاب یکی یا همه اونا و زدن یه دکمه اونا رو حذف کرد . ختم کلام اینکه چه کدی بنویسم که با زدن اون دکمه اون اعضایی که check box شون تیک داره رو حذف کنه .

امید امرایی
یک شنبه 12 آبان 1387, 21:21 عصر
شما میتونید ابداعا مقدار عناصر checkbox رو برابر با کلید یکتای جدول (به عنوان مثال id) قرار بدید .
بعد از اون می تونید چک کنید اگه تیک خورده رکوردی که کلیدش برابر با نام اون checkbox هست رو ویرایش یا حذف کنید



$ArrayOfKeys = array();
if(isset($_POST['CheckBox1']))
$ArrayOfKeys[0] = $_POST['CheckBox1']; // That value is a key
if(isset($_POST['CheckBox2']))
$ArrayOfKeys[1] = $_POST['CheckBox2']; // That value is a key
$SQL = "DELETE FROM table ";
for($k=0; $k<count($ArrayOfKeys); $k++){
$Cond = $k == 0? ' WHERE ': ' AND ';
$SQL .= ($Cond.' key = '.$ArrayOfKeys[$k]);
}
بنده خلاصه گویی کردم . شما می تونید خیلی داینامیک تر هم عمل کنید.

as13851365
دوشنبه 13 آبان 1387, 07:44 صبح
ساده ترین راهش استفاده از آرایه است به کد زیر نگاه کن :


<input type="checkbox" name="checkbox1[]" id="box1" value="<?php echo $a['id'];?>" />


و در اون طرف از یه کدی مانند زیر استفاده کن :


$a=$_POST['checkbox1'];
if(isset($a))
{
for($i=0;$i<count($a);$i++)
if(!is_numeric($a[$i]))
{
header("location: index.php");
exit;
}
$ss=implode(',',$a);
$q="select * from nazar1 where id in ($ss)";
}
else
header("location: index.php");

با استفاده از کد بالا شما لیستی از رکوردهایی رو که کاربر انتخاب کرده رو دارید می تونید هر کاری خواستید رو انجام بدید ( بقیش فقط نیاز کمی به آشنایی با دستورات mysql دارد)

ahmadbadpey
دوشنبه 13 آبان 1387, 10:51 صبح
آقا با تشکر از شما
میشه یه کم بیشتر در مورد کد بالا توضیح بدین مثلا checkbox[] چیکار می کنه ؟ یا متغیر های a توی کد html با کد php یکی هستند . خلاصه کد رو بی زحمت خط به خط برام توضیح بدین ؟ آخه من اولای راهه php ام .

sama01
دوشنبه 13 آبان 1387, 11:21 صبح
دوست عزیز.
در تاپیک‌های زیادی در این مورد تذکر داده شده که این‌جا کلاس آموزش نیست. انجمن و برای رفع اشکال.
اگر دوستان لطف می‌کنند کد را برای شما می‌نویسند، حداقل انتظاری که از شما می‌ره اینه که تحلیل کد رو خودتون انجام بدید.

من هم اول راه هستم. ولی بیش از این‌که سوال بپرسم و کد بخواهم، خودم تحقیق می‌کنم. خدا را شکر با وجود اینترنت انواع و اقسام کدهای آماده وجود دارند که تنها زحمت تحلیل و بررسی کدها برای امثال من باقی می‌مونه. اگر تحلیلش رو هم بخوام کسی دیگری برای من انجام بده که دیگه هیچی.!

yaqubian
دوشنبه 13 آبان 1387, 11:47 صبح
دوست عزیز
وقتی متغیری رو می خواین بصورت آرایه تعریف کنید از این روش استفاده می کنید.
موفق باشید

as13851365
دوشنبه 13 آبان 1387, 13:01 عصر
در تائید گفته های دوست گرامی sama01 و آقای یعقوبیان نظر شما رو به مطالب زیر جلب می کنم

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


while($a=mysql_fetch_array($r))
{
echo "<input type=\"checkbox\" name=\"checkbox1[]\" id=\"box1\" value=\"<?php echo $a['id'];?>\" />";
}

حالا در حلقه بالا اطلاعات مربوط به رکورد ها رو از بانک می خونیم و چاپ می کنیم حالا من در بانک فیلدی با نام ID دارم که کلید است و مقدار ID رو در قسمت value مربوط به checkbox می نویسم با این کار وقتی که این صفحه ارسال می شه اگر دقت کنید مقادیر مربوط به value هر checkbox ارسال می شه حالا من در صفحه بعد که می خوام این اطلاعات دریافتی رو پردازش کنم اول مقدار checkbox های ارسال شده رو که به صورت آرایه از صفحه قبل ارسال شده رو دریافت می کنم :


$a=$_POST['checkbox1'];

بعد بررسی می کنم ببینم آیا checkbox ارسال شده است یا نه ؟


if(isset($a))

اگر ارسال شده بود کد زیر رو اجرا می کنم ( در غیره این صورت با دستور header برگشت می دم به صفحه قبلی.)
این کد اول مقادیر ارسالی به صفحه رو چک می کنه ( برای اطمینان بیشتر ) از آنجایی که ما مقدار ID رو که به صورت عددی است رو به checkbox ها دادیم پس مقدار ارسال شده حتما باید از نوع عدد باشد برای چک کردن از کد زیر استفاده می کنم :


for($i=0;$i<count($a);$i++)
if(!is_numeric($a[$i]))
{
header("location: index.php");
exit;
}

بعد از اجرای تکه کد قبلی یعنی اگر تمام ورودی ها عدد بود حالا باید این عدد ها رو که به صورت آرایه داریم رو به صورت یک رشته با علامت جدا کنند , تبدیل کنیم تا در دستورات sql خود ازش استفاده کنیم !
برای این کار از دستور زیر استفاده می کنیم ( تبدیل آرایه به رشته )


$ss=implode(',',$a);

حالا ما مقادیری رو که کاربر انتخاب کرده و ارسال کرده رو داریم به راحتی می تونید از آنها استفاده کنیم .


where id in ($ss)

این قسمت از کد رو هم که معلومه اگر کمی با sql آشنا باشید مشکلی نخواهید داشت!

امیدوارم که مشکل شما حل شده باشد.

persian_farvahar
چهارشنبه 15 آبان 1387, 16:43 عصر
سلام يه سوال داشتم: چرا اينجا:
name="checkbox1[]" نام checkbox را اينجوري داده ولي اينجا :
$a=$_POST['checkbox1']; اينجوري تحويل گرفته؟ ********************* يه سوال هم داشتم اونم اين بود اگه ما تو فرم ورودي بيش از يك checkbox داشته باشيم چه جوري سمت سرور اينارو تحويل بگيريم؟ منظورم اينه كه ما چه جوري ميتونيم ceckbox ها را به آرايه تحويل بديم؟ بزاريد بيشتر توضيح بدم. فرض كنيد ما به تعداد اطلاعات داخل بانكمون به هنگام نمايش براي حذف يا تاييد يك checkbox قرار بديم. حالا ما نميدونيم اين طلاعات چندتاست،پس بايد بيايم name اين checkbox ها را به طور دايناميك به حسب يك فيلد شمارنده بدهيم حالا تو سمت سرور ما نميدونيم كه اين checkbox ها چند تا هستند يا نامشون چيه!!! كه به تعداد يا نامهاي آنها يكي يكي اطلاعات را از فرم بگيريم سمت سرور چطوري اطلاعات را به اون شكلي كه گفتم دريافت كنيم؟؟؟؟

shahriyar3
چهارشنبه 15 آبان 1387, 17:29 عصر
جواب سوال اول كار با متد پست
http://www.w3schools.com/php/php_post.asp
سوال دومتون هم اگر شما بصورت دستي checkbox ها رو ايجاد كرده باشيد پس حتما ميدونيد كه چند تان
اما اگه مخواهيد بدونيد كه كدومشون تيك خورده كافي مقدار ارسالي توسط متد پست رو با خالي مقايسه كيند تا متوجه بشيد (اگر خالي نباشند حتما مقدار دارن)
البته راه هاي ديگه هم داره
موفق باشي.

as13851365
چهارشنبه 15 آبان 1387, 17:36 عصر
مشکل شما این است که مطالب رو به درستی نخونید اگر شما پست 6 رو مطالعه کنید به سوال خودتان جواب خواهید داد

شرمنده جواب shahriyar3 رو ندیده بودم وقتی که جواب دادم پست شما ( shahriyar3 ) رو دیدم

persian_farvahar
چهارشنبه 15 آبان 1387, 18:41 عصر
جواب سوال اول كار با متد پست
http://www.w3schools.com/php/php_post.asp
سوال دومتون هم اگر شما بصورت دستي checkbox ها رو ايجاد كرده باشيد پس حتما ميدونيد كه چند تان
اما اگه مخواهيد بدونيد كه كدومشون تيك خورده كافي مقدار ارسالي توسط متد پست رو با خالي مقايسه كيند تا متوجه بشيد (اگر خالي نباشند حتما مقدار دارن)
البته راه هاي ديگه هم داره
موفق باشي.
مثل اينكه درست سول منو را نخوندي يا متوجه نشدي
اونقدم ميتدي نيستم كه ندونم بره چي با post تحويل گرفته من دارم ميگم اونجا تو فرم ورودي اسم checkbox را اينجوري گزاشته:


name="checkbox1[]"

ولي اون دو تا براكد را سمت سروز مد نظر نگرفته
يه نگاه به كد بندازيد
***************************
:::در مورد سوال دومم:::
يه چيز مثل ياهو ميل را فرض كنيد
من كه نميدونم چه تعداد نظراتي يا نامه هايي براي كاربر اومده پس بايد بيام اونايي كه تايد نشده را با php بخونم حالا من نميتونم براي هر چك باكس فقط يك نام بزارم
پس بايد براي هر كدوم يه نام مختص بزارم اين نام رو هم با php ميام بر حسب يك فيلد شمارنده قرار ميديم .

حالا وقتي ميخوام اين تغييرات(تاييد،حذف و...) را بر روي بانك اعمال كنم
اين اطلاعات فرم ورودي را به سمت سرور ميفرستم .
اينجا ديگه من نميدونم به چه تعداد بايد از متغير سراسريpost استفاده كنم و نام كدوم چك باكس را براي عمليات به كوئري بفرستم(چون نام و تعداد چك باكس ها را نميدونم)
پس بايد به صورت داينمايك باشه
من تو اين دايناميك بودنش گير كردم

اميدوارم منظورمو متوجه شده باشيد
ممنون ميشم كمك كنيد چون بد گير كردم



مشکل شما این است که مطالب رو به درستی نخونید اگر شما پست 6 رو مطالعه کنید به سوال خودتان جواب خواهید داد

شرمنده جواب shahriyar3 رو ندیده بودم وقتی که جواب دادم پست شما ( shahriyar3 ) رو دیدم
از شما هم سپاسگزام
ولي اون پست را هم خونده بودم ولي ربطي ه اين سوال من نداره

shahriyar3
چهارشنبه 15 آبان 1387, 22:09 عصر
جهت اطلاعتون ميگم فقط تو هر صفحه ياهو دقيقا 25 تا ايميل با چك باكس وجود داره چه خونده شده چه خونده نشده مگر اينكه تعداد كل ميل ها كمتر از 25 باشه .
شما هم ميتونيد براي اطلاعاتتون محدوديت اعمال كنيد . مهم نيست چند هزار نامه باشه
نمايش اطلاعات db بصورت <123> قبلا توسط دوستان توضيح داده شده
شما فقط كافي به ازاي هر subject كه از db با كوئري ميگيريد يك خط هم html كنارش بذاريد

http://barnamenevis.org/forum/showthread.php?t=126658
موفق باشي

persian_farvahar
چهارشنبه 15 آبان 1387, 22:52 عصر
جهت اطلاعتون ميگم فقط تو هر صفحه ياهو دقيقا 25 تا ايميل با چك باكس وجود داره چه خونده شده چه خونده نشده مگر اينكه تعداد كل ميل ها كمتر از 25 باشه .
نمايش اطلاعات db بصورت <123> قبلا توسط دوستان توضيح داده شده
شما فقط كافي به ازاي هر subject كه از db با كوئري ميگيريد يك خط هم html كنارش بذاريد
نميدونم من بد توضيح ميدم يا شما متوجه نميشيد
دوست عزيز من منظورم Pageintation نيست.
اينارو خودم بلدم

من اون مثالي كه از ياهمو ميل زدم منظورم صفحه بنديش يا تعداد نامه ها در صفحه نبود(خواهشآ سوال را درست بخونيد).
منظور من از اون صفحه چك باكس ها بود.
اصلآ شما ياهو ميل را از ذهنت بيار بيرون

ببين شما فرض كن براي ادمين سايت روزانه 1000 تا نظر مياد
ما ميخوايم اين نظرات را براي ادمين نشون بديم جوري كه ادمين اين نظرات را تاييد كنه بعد اين نظرات براي همه نمايش داده بشه ويا اينكه اينارو حذف بكنه.
اين تاييد كردن هم اينطوره كه اگه ادمين چك باكس مقابل يه نظري رو تيك زد معلومه كه تاييد شده اگر نه پس تاييد نشده.
خوب من ميام براي هر نظري كه از بانك خونده ميشه يه چك باكس قرار ميدم براي شناسايي چك باكس هاه يه نام مختص به خودش بهش ميدم كه در اصل اين نام را هم من بهش نميدم اين نام را بر حسب id اون نظر از بانك ميخونم و بهش ميدم.
حالا تو سمت سرور اگه تعداد چك باكس يكي باشه و نامشو بدونيم ، اينجوري اسمشو ميخونيم:


$_POST['نام اون چك باكس']

ولي وقتي تعداد چك باكس ها بره بالا و در هر بار اين نامها تغيير كنه نميشه كه الكي يه اسم بديم يا بيايم n تا post_$ بنويسيم .
پس ما بايد به صورت دايناميك اينارو دريافت كنيم و بر حسب اون عمليات رو روي پايگاه خود اعمال كنيم


خواهشآ درست بخونيد اين براي بار سومه كه توضيح ميدم ديگه نميدونم چه جوري بايد توضيح بدم
از اساتيد درخواست ميشه كار مارو رها بندازن بد گير كردم

as13851365
پنج شنبه 16 آبان 1387, 09:30 صبح
نمی دونم چرا این دوست گرامی persian_farvahar نمی خواد متوجه بشه !
عزیزم ببین کلا قضیه این است که اون دستوراتی که من گفتم ( در پست های قبلی ) کلا برای این جور کارها نوشته شده .

یعنی ما مثلا نمی دونیم چند تا checkbox در صفحه داریم ( لازم هم نیست بدونیم ) خوب من اول اطلاعات رو از دیتابیس می خونم و بعد به اعزای هر رکورد یک checkbax با نام یکسان برای همه مثلا checkbak1[] قرار می دم ولی مقدار value هر چک باکس رو با مقدار ID رکورد مورد نظر مقدار دهی می کنم .

حالا مثلا 1000 تا checkbox در صفحه وجود دارد و کاربر بسته به خودش یک تعدادی رو انتخاب می کنه و برای مثلا حذف ارسال می کنه حالا چه چیزهایی ارسال می شه ؟ خوب در این جا مقدار value تمام checkbox هایی که انتخاب شده اند به صورت آرایه ( چون تمام checkbox ها از یک نام یکسان همرا با [] استفاده کردن پس یک آرایه هستن ) ارسال می شه من در صفحه بعد این آرایه رو در یک آرایه دیگر با دستور post می گیرم و بعد مقدار value هر حانه از آرایه می شه شماره رکورد انتخاب شده !

مشکل شما بیشتر مربوط می شه به ارسال المنتها به صورت آرایه به صفحه که اگر در این باره کمی مطالعه کنید دیگر شاهد چنین سوالاتی نخواهید بود

بهتر است شما از آرایه استفاده کنید تا نام هایی مانند $_POST['نام اون چك باكس']

persian_farvahar
پنج شنبه 16 آبان 1387, 10:04 صبح
مشکل شما بیشتر مربوط می شه به ارسال المنتها به صورت آرایه به صفحه که اگر در این باره کمی مطالعه کنید دیگر شاهد چنین سوالاتی نخواهید بود
بله
مشكل من اينجا بود
باز هم ممنون از شما دوست عزيز

binboy
یک شنبه 09 آبان 1389, 14:26 عصر
ساده ترین راهش استفاده از آرایه است به کد زیر نگاه کن :


<input type="checkbox" name="checkbox1[]" id="box1" value="<?php echo $a['id'];?>" />
و در اون طرف از یه کدی مانند زیر استفاده کن :


$a=$_POST['checkbox1'];
if(isset($a))
{
for($i=0;$i<count($a);$i++)
if(!is_numeric($a[$i]))
{
header("location: index.php");
exit;
}
$ss=implode(',',$a);
$q="select * from nazar1 where id in ($ss)";
}
else
header("location: index.php");
با استفاده از کد بالا شما لیستی از رکوردهایی رو که کاربر انتخاب کرده رو دارید می تونید هر کاری خواستید رو انجام بدید ( بقیش فقط نیاز کمی به آشنایی با دستورات mysql دارد)

سلام
تا حالا که چند تا پست زدم برای مشکلاتم متاسفانه یکیشو جواب ندادن علتش را نمی دونم!!
به امید جواب:
یک کدی شبیه کد معرفی شده در بالا دارم و کارشم تیک چند ستون برای حذف است.
حالا تو صحفه select ستون ها را با حلقه while فراخوانی کردم و می خوام کد زیر را برای تکرار چک باکس با آیدی در این حلقه بزارم :

<input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $rows['id']; ?>">کد حلقه while :

<?php
while($row = mysql_fetch_array($result))
{

echo '<div class="nav4">' . $row['id'] . '</div>';
echo '<div class="content"><a href="update.php?id='.$row['id'].'">'.$row['name'].'</a></div>';
echo '<div class="nav3">' . $row['lastname'] . '</div>';
echo '<div class="sidebar">' . $row['email'] . '</div>';
}
?>حالا چه کاری باید انجام بدم؟

binyaft
یک شنبه 09 آبان 1389, 17:27 عصر
<?php
while($row = mysql_fetch_array($result))
{
echo '<div><input name="checkbox[]" type="checkbox" id="checkbox[]" value="'.$rows[id].'"></idv>';
echo '<div class="nav4">' . $row['id'] . '</div>';
echo '<div class="content"><a href="update.php?id='.$row['id'].'">'.$row['name'].'</a></div>';
echo '<div class="nav3">' . $row['lastname'] . '</div>';
echo '<div class="sidebar">' . $row['email'] . '</div>';

}
?>