article

آموزش حذف گروهی اطلاعات از MySQL با استفاده از چک باکس

mysql-multiple-checkbox

یکی از مزایای استفاده از پایگاه داده و سیستم های داینامیک در مقایسه با شیوه های سنتی و استاتیک مدیریت اطلاعات، افزایش سرعت انجام کارها و قابلیت پردازش چندین دستور مختلف در یک لحظه و صرفه جویی در وقت است، به طور مثال فرض کنید می خواهیم اسامی تعدادی از کاربران سایتمان را از لیستی حذف کنیم، انجام این کار به شیوه سنتی مستلزم صرف زمان بسیار و دردسرهای خاص خودش است که باعث می شود ضریب اشتباه نیز افزایش یابد، اما کافی است یک بار در نوشتن کدی داینامیک برای حذف سیستماتیک و گروهی ردیف ها دقت کنیم تا از آن در دفعات بعدی و به اشکال مختلف، چندین و چند بار استفاده نمائیم، از این رو در این مطلب می خواهیم یکی از پرکاربرد ترین شیوه ها یعنی نحوه حذف گروهی اطلاعات از دیتابیس را به وسیله چک باکس چند گانه (Multiple Checkbox) آموزش دهیم.

ساخت دیتابیس، جدول و نمونه اطلاعات فرضی


برای درک بهتر این شیوه، آموزش را در قالب یک مثال ادامه می دهیم، ابتدا با استفاده از منوی Databases در برنامه phpMyAdmin یک پایگاه داده فرضی با نام db_test می سازیم، ترجیحا این کار را در لوکال هاست (برنامه WampServer) با درج آدرس
localhost/phpmyadmin
در مرورگر انجام می دهیم اما اگر بر روی سرور آنلاین باشیم احتمال دارد این قسمت توسط پشتیبانی فنی هاست محدود و غیرفعال شده باشد که در این صورت باید از طریق کنترل پنل اصلی سایتمان، بخش مدیریت Database ها را انتخاب و یک پایگاه داده جدید ایجاد نمائیم، فراموش نکنیم که در همین قسمت باید یک کاربر نیز به پایگاه داده جدید اختصاص دهیم، پس از ساخت دیتابیس در قسمت SQL برنامه phpMyAdmin کد زیر را درج و اجرا می کنیم تا جدولی با نام tbl_test با مقادیر پیش فرض جهت نمونه در آن ایجاد شود (ساخت جدول و ستون ها را به صورت دستی نیز می توانیم انجام دهیم، برای ایجاد جدول به صورت دستی بر روی دیتابیس مورد نظر در برنامه phpMyAdmin کلیک کرده، از قسمت Create table نام جدول و تعداد ستون ها را مشخص می کنیم، سپس بر روی دکمه Go کلیک کرده و پس از اعمال تنظیمات مربوط به هر ستون، در نهایت با دکمه Save جدول و ستون ها را ایجاد می کنیم، اگر هم جدول را بدون ستون ها ایجاد کرده باشیم یا بخواهیم ستون های دیگری به آن اضافه کنیم، ابتدا جدول مورد نظر را با کلیک بر روی نام آن انتخاب و سپس در منوی Structure از امکانات بخش Add column که معمولا در انتهای لیست ستون ها است می توانیم استفاده کنیم، برای درج نمونه ردیف های اطلاعات نیز منوی Insert کاربرد دارد):
CREATE TABLE `tbl_test` (
 `id` INT NOT NULL AUTO_INCREMENT,
 `name` VARCHAR(255) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM;
INSERT INTO `tbl_test` VALUES (1, 'user_1');
INSERT INTO `tbl_test` VALUES (2, 'user_2');
INSERT INTO `tbl_test` VALUES (3, 'user_3');
INSERT INTO `tbl_test` VALUES (4, 'user_4');
INSERT INTO `tbl_test` VALUES (5, 'user_5');
INSERT INTO `tbl_test` VALUES (6, 'user_6');

کد PHP و HTML پایه برای حذف گروهی اطلاعات


پس از ساخت دیتابیس، جدول و INSERT نمونه اطلاعات فرضی، باید رابط کاربری HTML و کدنویسی PHP سمت سرور را آماده کنیم، برای این منظور ابتدا کد پایه زیر را که جهت درک بهتر روند کار تا حد امکان مختصر شده و صرفا شامل مراحل ضروری دریافت و حذف اطلاعات از جمله متغیرهای دریافت پارامترها در هنگام ارسال فرم با متد POST، تنظیمات مربوط به اتصال به پایگاه داده، دریافت اسامی کاربران و نمایش آنها به صورت ردیف به ردیف در صفحه مرورگر، ویژگی های تعاملی مورد نیاز مانند دکمه های چک باکس، دکمه ارسال فرم و پرس و جوی دریافت و حذف اطلاعات با بررسی توسط دستورات شرطی (if، else و...) و مواردی از این دست است را در یک فایل PHP با نام دلخواه (به طور مثال delete.php) درج و در ادامه این کد را توسعه داده و موارد پیشرفته تری که ممکن است مورد نیاز کاربران مختلف باشد را اضافه می کنیم:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | حذف گروهی اطلاعات از دیتابیس با چک باکس - کد پایه</title>
<!-- Webgoo.ir -->
<style type="text/css">
.row-container{
    direction:rtl;
}
.row-1 {
    background:#FFFFFF;
}
.row-2 {
    background:#CCCCCC;
}
</style>
</head>
<body>
<div class="row-container">
<?php
//تنظیمات پایگاه داده
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "db_test";
$tbl_name = "tbl_test";

//متغیرهای تعیین رنگ ردیف ها
$color_1 = '1';
$color_2 = '2';
$color = $color_1;

//دریافت پارامترها در هنگام ارسال فرم
@$users = $_POST['users'];
@$check = $_POST['check'];

//اتصال با دیتابیس
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if(!$conn) {
    echo "Error!: " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    //اجرای پرس و جوی حذف ردیف ها در صورت ارسال فرم
    if($check == 1){
        $del_param = null;
        $count_users = count($users);
        
        for($i = 0; $i < $count_users; $i++){
            $del_param .= "id=$users[$i]";
            if($i + 1 < $count_users){
                $del_param .= " OR ";
            }
        }
    
        if($count_users > 0){
            $query = mysqli_query($conn, "DELETE FROM $tbl_name WHERE $del_param");
            if(!$query) {
                echo "Error!: " . mysqli_error($conn) . '<br>';
            } else{
                echo 'تعداد ' . $count_users .' ردیف با موفقیت حذف شد!' . '<br>';
            }
        } else{
            echo 'فیلدی برای حذف انتخاب نشده است!' . '<br>';
        }
    }
    
    //پرس و جوی دریافت ردیف ها از دیتابیس و نمایش به صورت ردیف به ردیف
    $query = mysqli_query($conn, "SELECT id, name FROM $tbl_name ORDER BY id ASC LIMIT 10");
    if(!$query) {
        echo "Error!: " . mysqli_error($conn);
    } elseif(!mysqli_num_rows($query) > 0){
        echo 'کاربری برای نمایش وجود ندارد!' . '<br>';
    } else {
        echo '<form action="#" method="post">' . "\n";
                
        while($row = mysqli_fetch_array($query)){
            echo '<div class="row-' . $color . '">' . "\n" .
            '<input name="users[]" type="checkbox" value="' . $row['id'] . '">نام کاربر: ' . $row['name'] . "\n" .
            '</div>' . "\n";
            
            if($color == $color_1){
                $color = $color_2;
            } else{
                $color = $color_1;
            }
        }
        
        echo '<input name="check" type="hidden" value="1">' . "\n";
        echo '<input type="submit" value="حذف">' . "\n";
        echo '</form>' . "\n";
    }
}
?>
</div>
</body>
</html>
همان طور که گفتیم کد بالا شامل دو قسمت اصلی است، ابتدا فرم HTML و اسامی موجود در دیتابیس به صورت ردیف به ردیف در صفحه مرورگر چاپ می شود تا کاربر پس از انتخاب موارد مورد نظر خود و کلیک بر روی دکمه حذف، اسامی را به صورت یک آرایه به سرور ارسال کند، در سرور اطلاعات ارسال شده با متد POST دریافت شده و پردازش های مورد نیاز صورت می گیرد، برای درک بهتر این شیوه کد را به صورت قسمت به قسمت بررسی می کنیم:
- ابتدا مواردی که باید در قسمت تگ html و body درج شوند را قرار می دهیم، این موارد شامل تیتر دلخواه صفحه و استایل CSS است که در فرمت بندی خروجی کار نقش ایفا می کنند، چند کلاس ساده جهت نمونه درج شده که می توانید بر حسب نیاز آنها را تغییر دهید.
- سپس اطلاعات اتصال به پایگاه داده را در قسمت مربوط به آن تنظیم می کنیم، این اطلاعات شامل نام میزبان (معمولا localhost)، نام کاربری و کلمه عبور جهت اتصال به دیتابیس (معمولا در لوکال هاست عبارت root و بدون کلمه عبور) و عنوان دیتابیس مورد نظر است، در همین قسمت نام جدول را نیز در متغیر tbl_name تعریف کرده ایم، کد از اکستنشن MySQLi در حالت برنامه نویسی رویه ای (Procedural) استفاده می کند، قاعدتا اگر با حالت شی گرا یا اکستشن PDO آشنا باشیم، تبدیل این کد کار ساده ای خواهد بود.
- در ادامه، دستورات مربوط به قسمت حذف ردیف ها را نوشته ایم، این بخش از برنامه تنها زمانی اجرا خواهد شد که کاربر فرم را ارسال کرده و متغیر check برابر با 1 باشد، لذا تا زمانی که کاربر فرم را ارسال نکند، این بخش در فرآیند اجرا عملا تاثیری نخواهد داشت، در همین قسمت برای بهینه بودن کدنویسی تعداد فیلدهای ارسالی کاربر را شمارش کرده و در حلقه for برای بخش WHERE در دستور DELETE پارامترهای داینامیک نوشته ایم، به طور مثال اگر کاربر سه فیلد را انتخاب کند متغیر del_param به شکل زیر ایجاد و جایگزین می شود:
id=1 OR id=4 OR id=6
با این روش برای هر تعداد فیلدی که کاربر ارسال کند تنها یک پرس و جوی DELETE اجرا خواهد شد و از منابع دیتابیس کمتر استفاده شده و در نتیجه سرور فشار کمتری را متحمل می شود که این چاره اندیشی برای بهینه بودن برنامه های با تعداد کاربر بالا ضروری است.
- بخش اصلی دیگر مربوط به دستور SELECT و دریافت مشخصات کاربران از دیتابیس است که در حلقه while این کار را انجام داده و خروجی HTML مورد نیاز را با استفاده از اطلاعات موجود در دیتابیس (ستون id و name) به صورت دلخواه ایجاد کرده ایم، با کمی سلیقه می توانیم به کمک استایل CSS شکل و فرم کار را سفارشی سازی کنیم، در اینجا نیز با مقداردهی چند متغیر ردیف ها را با دو رنگ متمایز کرده ایم که در خروجی به شکل نمونه زیر چاپ می شوند:
<div class="row-1">
<input name="users[]" type="checkbox" value="1">نام کاربر: user_1
</div>
<div class="row-2">
<input name="users[]" type="checkbox" value="2">نام کاربر: user_2
</div>
<div class="row-1">
<input name="users[]" type="checkbox" value="3">نام کاربر: user_3
</div>
<div class="row-2">
<input name="users[]" type="checkbox" value="4">نام کاربر: user_4
</div>
اگر به کلاس ها دقت کنیم، ردیف به ردیف عدد متناظر کلاس با شماره های 1 و 2 جایگزین شده (row-1 و row-2) که با تعریف این کلاس ها در قسمت CSS می توانیم دو رنگ مجزا برای ردیف ها داشته باشیم که این به زیبایی و خوانا شدن رابط کاربری کمک می کند.
نکته: برای ارسال گروهی فیلدهای input از نوع checkbox باید در انتهای قسمت name آنها از علامت [] استفاده کنیم:
<input name="users[]" type="checkbox" value="1">
با این کار مقدار فیلدها در قالب یک آرایه به سرور ارسال می شود و می توان در سرور با استفاده از حلقه for یا foreach مقادیر را استخراج کرد، در این حالت چک باکس ها را در اصطلاح چندگانه (Multiple) یا گروهی اطلاق می کنند.

توسعه کد HTML و PHP حذف گروهی اطلاعات با امکانات بیشتر


برای تکمیل آموزش، کد بالا را با چند امکان کاربردی دیگر توسعه داده ایم که در زیر ملاحظه می کنید، این امکانات بسته به نیاز و هدفمان می توانند به نحو دلخواه به کد اضافه شوند، برای نمونه امکان انتخاب و عدم انتخاب چک باکس ها به صورت گروهی (Toggle Checkbox) با جاوا اسکریپت را به کد اضافه کرده ایم، قابلیت اعتبارسنجی و نمایش پیام اخطار در حالتی که کاربر هیچ کدام از چک باکس ها را انتخاب نکرده اما بر روی دکمه حذف کلیک می کند و هچنین در نظر گرفتن حالت حذف دو مرحله ای با پرسش از کاربر:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | حذف گروهی اطلاعات از دیتابیس با چک باکس - توسعه کد با امکانات بیشتر</title>
<!-- Webgoo.ir -->
<style type="text/css">
.row-container{
    direction:rtl;
}
.row-1 {
    background:#FFFFFF;
}
.row-2 {
    background:#CCCCCC;
}
#confirm-id{
    display:none;
    position:absolute;
    height:50px;
    width:200px;
    top:50%;
    left:50%;
    margin-top:-25px;
    margin-left:-100px;
    text-align:center;
    background:#E5E5E5;
    border:1px solid #666666;
}
</style>
<script type="text/javascript">
var checked = false;
function checkboxToggle(name){
    var form = document.forms[name];
    
    if(checked == false) {
        checked = true
    } else {
        checked = false
    }

    for(var i = 0; i < form.elements.length; i++) {
        if(form.elements[i].type == 'checkbox'){
            form.elements[i].checked = checked;
        }
    }
}

function formCheck(form){
    var check_one = false;
    var check_confirm;
    
    for(var i = 0; i < form.elements.length; i++) {
        if(form.elements[i].type == 'checkbox' && form.elements[i].checked){
            check_one = true;
            break;
        }
    }
    
    if(check_one){
        check_confirm = 'آیا مطمئن هستید؟<br>';
        check_confirm += '<input type="button" value="بله" onclick="formSubmit(\'' + form.name + '\');">';
        check_confirm += '<input type="button" value="خیر" onclick="closeConfirm(\'confirm-id\');">';
        
        document.getElementById('confirm-id').innerHTML = check_confirm;
        document.getElementById('confirm-id').style.display = 'block';
    } else{
        alert('لطفا حداقل یک کاربر را انتخاب نمائید!');
    }
}

function formSubmit(name){
    closeConfirm('confirm-id');
    document.forms[name].submit();
}

function closeConfirm(id){
    document.getElementById(id).style.display = 'none';
}
</script>
</head>
<body>
<div class="row-container">
<?php
//تنظیمات پایگاه داده
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "db_test";
$tbl_name = "tbl_test";

//متغیرهای تعیین رنگ ردیف ها
$color_1 = '1';
$color_2 = '2';
$color = $color_1;

//دریافت پارامترها در هنگام ارسال فرم
@$users = $_POST['users'];
@$check = $_POST['check'];

//اتصال با دیتابیس
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if(!$conn) {
    echo "Error!: " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    //اجرای پرس و جوی حذف ردیف ها در صورت ارسال فرم
    if($check == 1){
        $del_param = null;
        $count_users = count($users);
        
        for($i = 0; $i < $count_users; $i++){
            $del_param .= "id=$users[$i]";
            if($i + 1 < $count_users){
                $del_param .= " OR ";
            }
        }
    
        if($count_users > 0){
            $query = mysqli_query($conn, "DELETE FROM $tbl_name WHERE $del_param");
            if(!$query) {
                echo "Error!: " . mysqli_error($conn) . '<br>';
            } else{
                echo 'تعداد ' . $count_users .' ردیف با موفقیت حذف شد!' . '<br>';
            }
        } else{
            echo 'فیلدی برای حذف انتخاب نشده است!' . '<br>';
        }
    }
    
    //پرس و جوی دریافت ردیف ها از دیتابیس و نمایش به صورت ردیف به ردیف
    $query = mysqli_query($conn, "SELECT id, name FROM $tbl_name ORDER BY id ASC LIMIT 10");
    if(!$query) {
        echo "Error!: " . mysqli_error($conn);
    } elseif(!mysqli_num_rows($query) > 0){
        echo 'کاربری برای نمایش وجود ندارد!' . '<br>';
    } else {
        echo '<form name="del-form" action="#" method="post">' . "\n";
        echo '<input id="del-toggle" type="checkbox" onclick="checkboxToggle(\'del-form\');">' . "<hr>\n";
        
        while($row = mysqli_fetch_array($query)){
            echo '<div class="row-' . $color . '">' . "\n" .
            '<input name="users[]" type="checkbox" value="' . $row['id'] . '">نام کاربر: ' . $row['name'] . "\n" .
            '</div>' . "\n";
            
            if($color == $color_1){
                $color = $color_2;
            } else{
                $color = $color_1;
            }
        }
        
        echo '<input name="check" type="hidden" value="1">' . "\n";
        echo '<hr><input type="button" value="حذف" onclick="formCheck(this.form);">' . "\n";
        echo '</form>' . "\n";
        echo '<div id="confirm-id"></div>' . "\n";
    }
}
?>
</div>
</body>
</html>
برای اعمال این نوع امکانات معمولا باید از کدنویسی سمت کاربر و به طور خاص کدنویسی جاوا اسکریپت بهره جست، در نمونه کد بالا نیز برای ایجاد حالت انتخاب چندگانه، یک فیلد input از نوع checkbox در نظر گرفتته ایم که با رویداد onclick تابع checkboxToggle را فراخوانی می کند:
<input id="del-toggle" type="checkbox" onclick="checkboxToggle('del-form');">
آرگیومنت این تابع مقادیر name فرم HTML است که در این مثال با عبارت del-form مشخص است، در تابع با متد document.forms به فرم دسترسی پیدا کرده و بررسی می کنیم که اگر چک باکس های فرم مد نظر حالت checked (تیک فعال) نداشته باشند، آنها را به صورت checked تنظیم کنیم و برعکس اگر به صورت checked بودن تیک آنها را برداریم، تابع دیگر formCheck است که در زمان کلیک کاربر بر روی دکمه حذف فراخوانی می شود، آرگیومنت این تابع همان فرم HTML است که این بار به صورت آبجکت به تابع داده شده، در واقع دو روش زیر هر دو یک کارکرد دارند و صرفا به جهت جنبه های آموزشی از دو شیوه به ظاهر متفاوت در دو تابع استفاده شده:
document.forms[name]
this.form

<input type="button" value="حذف" onclick="formCheck(this.form);">
تابع formCheck از چند بخش تشکیل شده، در یک قسمت با متغیر check_one بررسی می کنیم که کاربر حداقل یک فیلد را انتخاب کرده باشد، در غیر اینصورت پیام قسمت alert اجرا می شود، در صورتی که کاربر حداقل یک فیلد را انتخاب کرده باشد یک کادر سفارشی با id دلخواه (در اینجا confirm-id) نمایش می دهیم، در این کادر با دو تابع formSubmit و closeConfirm رفتار مد نظر را بر اساس انتخاب کاربر اعمال می کنیم.
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» آموزش ساخت فرم عضویت در سایت با PHP و MySQL
» صفحه بندی مطالب و محتوا با PHP و MySQL
» نحوه رسم چارت و نمودار آماری با PHP و MySQL
» ساخت فید آر اس اس (RSS Feed) با استفاده از PHP و MySQL
» ایجاد لینک دانلود مدت دار با PHP و MySQL
commentنظرات (۵۲ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: سید عباس
۰۰:۳۵ ۱۳۹۲/۰۹/۲۵
سلام استاد من یه کدی رو دارم که صفحه لوگین کاربرام رو تشکیل میده لذا من یه سوال دارم میخوام به فرض در صفحه ای که لوگین میشند در کل نام کاربر نمایش داده بشه چطور باید این کار رو بکنم البته با سرچی که در همون صفحه کاربر گذاشتم این کار انجام میشه البته با آپدیت و... اما اگر به فرض کاربر اسم یوزر دیگری رو سرچ کنه مشخصات اون شخص میاد چه کدی میتونه نشست و سشن مورد نظر رو برای اسم در اون صفحه اجرا کنه لطفا کدی که بتونه سشن نام رو در صفحه کاربر نمایش بده رو بذارید و چه تغییری باید در کد لوگین و یا صفحه کاربر بدم
با تشکر اوس
اینم کد
حذف شد
پاسخ: 
همان طور که خودتان اشاره کردید، مشکل شما به بحث سشن ها مربوط می شود، لذا باید مباحث مقدماتی آن را مطالعه کرده و در صورتی که خودتان قادر به حل مشکل نبودید، سوال مطرح و به قسمت اصلی کد ارجاع دهید (لطفا فرصت اندک ما و تعداد سوالات زیاد کاربران را نیز لحاظ کنید) به هر صورت، به نظر و طبق بررسی اولیه کدهای شما، از قسمت زیر می توانید برای نمایش نام کاربری استفاده کنید:
<?php
$_SESSION['MM_Username'] = $loginUsername;
echo $_SESSION['MM_Username'];
?>
نویسنده: abbas
۲۳:۴۹ ۱۳۹۲/۰۹/۲۶
استاد مچکر مشکلم حل شد خیلی از شما یاد گرفتیم
من راجبه سشن خیلی تحقیق کردم سایت شما عالیه
اوس اوس اوس
نویسنده: سید عباس
۰۱:۰۷ ۱۳۹۲/۰۹/۳۰
با سلام استاد من برای سایتم یه قسمت برای (نسخه موبایل) درست کردم آیا سایت من یا سایت هایی که از این تکنیک استفاده می کنند با مطالب تکراری برای موتورهای جستجو روبرو می شوند و روی سئو تاثیر بد دارد البته بنده در این مورد حدث میزنم که همین طور است راهنمایی بفرمایید.
پاسخ: 
لطفا سوالات مربوط به بهینه سازی را در قسمت مربوطه مطرح کنید!
وجود مطلب یا لینک مشابه با هر عنوانی منجر به ایجاد مطالب تکراری (از دید موتور جستجو) می شود، برای جلوگیری از بروز این مشکل چند راه حل وجود دارد:
- نسخه ای به عنوان موبایل نداشته باشید، بلکه سایتی با قابلیت سازگاری بیشتر با موبایل و دستگاه های مشابه طراحی کنید.
- از تگ canonical استفاده کنید.
نویسنده: مهدی
۱۱:۴۲ ۱۳۹۳/۰۲/۲۷
با تشکر از سایت خوبتون
چطور ميشه يه چک باکس طراحي کرد که وقتي روش ميزني بقيه ي چک باکس هاي موجود تيک بخورن
پاسخ: 
انجام این کار با جاوا اسکریپت ممکن است، می توانید از نمونه کد زیر برای انتخاب یا عدم انتخاب گروهی چک باکس ها استفاده کنید:
<script type="text/javascript">
checktoggle = true;
function toggleCheckAll(formname){
var checkboxes = new Array();
checkboxes = document.forms[formname].getElementsByTagName('input');
for(var i = 0; i < checkboxes.length; i++){
if(checkboxes[i].type == 'checkbox'){
checkboxes[i].checked = checktoggle;
}
}
if(checktoggle == true){
checktoggle = false;
}
else{
checktoggle = true;
}
}
</script>
<form name="test" action="#">
<input type="checkbox" name="toggle" onclick="toggleCheckAll('test');"><br>
<input type="checkbox" name="box-1" value="1">
<input type="checkbox" name="box-2" value="2">
<input type="checkbox" name="box-3" value="3">
</form>
نویسنده: فدایی
۱۵:۵۶ ۱۳۹۳/۰۴/۱۱
با تشکر از زحمات شما
اشکال این کد اینکه حلقه حذف به تعداد رکوردهای جدول تکرار میشه حتی اگه یک رکورد را تیک زده باشی
لطفا اصلاح کنید
پاسخ: 
ضمن تشکر از نکته ای که ذکر کردید، آموزش مجددا بازبینی شد.
نویسنده: سید عباس
۰۱:۵۷ ۱۳۹۳/۰۵/۱۴
استاد خسته نباشید بنده در کد بالا تغییراتی دادم خیلی عالیه اما برای مثال 1000 تا کاربر یا ای دی داشته باشیم چطور باید صفحه بندی انجام دهیم برای مثال که 3 تاش توی صفحه اول باشه بقیش توی دیگر صفحات
اینم کد
حذف شد
با تشکر
پاسخ: 
دوست گرامی لطفا به آموزشی که در رابطه با صفحه بندی در سایت وجود دارد مراجعه کنید، برای دسترسی مستقیم عبارت "صفحه بندی محتوا با PHP و MySQL" را در وب جستجو کنید.
نویسنده: mohsen
۱۵:۴۷ ۱۳۹۳/۰۵/۲۱
سلام. ممنون از آموزش های خوبتون.
میشه مثال های کاربردی تر از ارتباط با دیتابیس شامل حذف ویرایش اطلاعات بصورت کلاسیک و همچنین امنیت سایت بذارید؟
پاسخ: 
آموزش ها تا حد امکان در دو سطح مقدماتی و کاربردی ارائه شده، باید توجه داشته باشید که همه مباحث قابل پوشش نیست، خیلی از موارد جزئی تر در حین کدنویسی و تمرین فرا گرفته می شوند!
نویسنده: رفیق
۲۰:۲۷ ۱۳۹۳/۱۱/۰۴
سلام
ضمن تشکر از زحمات بی نظیر شما. به نظر می رسد یک جدول اضافی نوشته شده است که سودی ندارد. گرچه هیچ اختلالی ایجاد نمی کنه اما چون در ابتدا برای خود من سوال بود گفتم بهتون اطلاع بدم تا در صورت صلاحدید حذفش کنید.
منظورم کدی است که قبل از فرم باز شده:
<table width="400" dir="rtl">
<tr>
<td>
پاسخ: 
خیلی ممنون از توجه شما، بله ظاهرا همین طور است، در بازبینی مطالب سایت (که در آینده نزدیک صورت خواهد گرفت)، هم زمان با اعمال تغییرات دیگر در آموزش، اصلاح خواهد شد.
نویسنده: پریسا
۱۲:۲۰ ۱۳۹۳/۱۱/۱۹
سلام
من توی سایت سرچ کردم سوالم رو نمیدونستم کجا مطرح کنم فقط این مطلب رو درباره ی چک باکس نمایش داد به ناچار اینجا مطرح میکنم.
من سه تا چک باکس دارم بنام های ناهار شام صبحانه
که میخوام هر کدام که تیک خورد در یک فیلد توی دیتابیس مثلا با نام food ذخیره بشه مشکل اینجاست که وقتی توی php اطلاعات رو میگیرم فقط صبحانه ذخیره میشه لطفا کمکم کنید
پاسخ: 
علت این نوع مشکلات بدون دیدن و بررسی سورس کدها قابل تشخیص نیست! باید قدم به قدم کدهای خود را خطایابی کنید، یعنی ابتدا ببینید که آیا فرم HTML صحیح است، به فرض پارامترهای مربوط به name در فرم و در کدهای PHP به درستی تنظیم شده، آیا مقدار فرم به سرور ارسال می شود، سپس ببینید که آیا این مقدار به درستی در پرس و جو قرار می گیرد و... در هر صورت بدون دیدن سورس کدها نمی توان مشکل را حدس زد!
نویسنده: محسن طالع شايان
۰۴:۴۱ ۱۳۹۴/۰۱/۱۷
با سلام و خسته نباشيد
بنده يه كدي رو همانند آموزش شما نوشتم. حال ديتابيس بنده از نوع فيد خبرخوان هست و وقتي كه بخواي صفحه رو بياري براي حذف كردن به دليل ازدياد خبر لود نميشه.
حال چه دستوري بايد اضافه كنم كه وقتي مثلا بخواي 300 تا خبر رو پاك كني بهش بدي و اكي شه. و بشه گروهي 300 تا رو حذف كنم . و مجدد صفحه لود كنم و ادامه كار.
اگه ممكنه همين جا جوابم رو بديد ممنون ميشم.
باتشكر
پاسخ: 
سوال کمی مبهم است! در صورت آشنایی با دستورات MySQL می توانید در پرس و جوی خود از LIMIT استفاده کرده و تعداد نتیاج دریافتی در هر درخواست را محدود کنید، البته این مباحث جزء آموزش های مقدماتی هستند که باید در جای خود فرا گرفته شوند!
نویسنده: نرگس
۰۶:۱۷ ۱۳۹۴/۰۶/۱۱
با سلام. من صفحه ای دارم که در آن صفحه نام چندین غذا موجود است و برای هر نام یک چک باکس قرار داده ام. حال می خواهم زمانی که تعدادی از این چک باکس ها انتخاب شد با فشردن دکمه ارسال که در همان صفحه قرار دارد نام غذاهای انتخاب شده در صفحه ای دیگر نمایش داده شود . اما در صفحه دیگر هیچ غذایی نمایش داده نمی شود. مشکل از کجاست؟ باتشکر
پاسخ: 
قاعدتا اشکال می تواند از هر قسمتی باشد که تنها با خطایابی مشخص خواهد شد! اما طبق روال کار ابتدا باید در فرم از چک باکس چندگانه استفاده کنید تا اطلاعات به شکل یک آرایه به سرور ارسال شوند، سپس در سرور با استفاده از حلقه for یا foreach به راحتی می توان موارد را چاپ کرد!
نویسنده: نرگس
۱۸:۱۱ ۱۳۹۴/۰۶/۱۱
با تشکر از پاسخگویی شما. می توانید در قالب مثال بیان کنید. چون من متوجه نشدم.
پاسخ: 
برای این کار باید از input چندگانه (multiple) استفاده کنید (در این حالت تمام فیلدها یک نام دارند + علامت [])، به طور مثال:
<input type="text"  id="user-1" name="user[]" value="1">
<input type="text" id="user-2" name="user[]" value="2">
<input type="text" id="user-3" name="user[]" value="3">
اینها باید در یک form با متد post استفاده شوند و در سمت سرور پارامترها به صورت آرایه از طریق متد POST قابل دریافت و استفاده هستند، به فرض:
<?php
$my_array = $_POST['user'];
$loop = 1;
foreach($my_array as $key => $value){
echo 'input-'.$loop.' => '.$value.'<br>';
$loop++;
}
?>
نویسنده: رضا
۱۸:۲۳ ۱۳۹۴/۰۸/۱۹
سلام خوبید
ممنون از سایت خوبتون
جناب من یک فرم دارم که شامل نام مقاله - نمره مقاله - مدرک موسسه و.. هست حال کاربر میتونه تا 10 بار این سطر رو clone کنه یعنی شاید 2 تا مقاله داشته باشه شاید ده تا و مهمتر اینکه همه این فیلدها بصورت آرایه ای هست و شاید مثلا کاربر تو یک سطر نام موسسه رو ننویسه و یا در سطر بعدی نام مقاله رو ننویسه اما به هر حال یک فیلد رو حتما پر میکنه اما کدام فیلده مشخص نیست..
حالا من این نوع فرم رو چطوری داخل جدول درج کنم؟؟؟
پاسخ: 
برای این کار باید با نحوه کار آرایه ها و ارسال فرم های چندگانه آشنا باشید، برای مثال به نمونه زیر دقت کنید:
<form action="index.php" method="post">
<input name="name[]" type="text">
<input name="family[]" type="text">
<input name="name[]" type="text">
<input name="family[]" type="text">
<input name="name[]" type="text">
<input name="family[]" type="text">
<input type="submit" value="Submit!">
</form>
<?php
$name = @$_POST['name'];
$family = @$_POST['family'];
for($i = 0; $i < count($name); $i++){
echo 'Name['.$i.']: '.$name[$i].'<br>';
echo 'Family['.$i.']: '.$family[$i].'<br>';
}
?>
در این مثال در بخش سمت کاربر (کدهای HTML) باید به کمک جاوا اسکریپت، فیلدهای اضافه را با نامی مشابه الگوی بالا ایجاد کنید، هر نام مشابه در واقع یک ایندکس از آرایه نهایی ما خواهد بود، سپس اطلاعات بعد از ارسال به صورت آرایه قابل دریافت هستند که در نهایت می توان با استفاده از حلقه ها (for، foreach و...) متناسب با نیاز بین اعضاء به اصطلاح دور زد و مقادیر پرس و جوی MySQL را در هر دور بر اساس کلید و مقدار همان دور اجرا کرد، در کدهای بالا این کار صرفا جهت راهنمایی و درک ساختار با دستور echo ساده انجام شده که در صورت آشنایی شما با نحوه نوشتن پرس و جوی دیتابیس، به راحتی قابل برداشت و استفاده است!
نویسنده: سامان
۱۴:۵۴ ۱۳۹۴/۰۸/۲۰
سلام
چطوری میشه با جی کوئری روی این input های چندگانه validation گذاشت. من هرکاری که میکنم نمیشه فقط به یدونه اینپوت میگیره. ببینید من یک سطر رو میخوام clone کنم که اون سطر هم قابلیت validation داره هم اینکه توسط یک تابع که تو نت موجوده کاربر بتونه فقط فارسی تایپ کنه. اما وقتی clone میکنم خاصیت validation رو از دست میده و اون خاصیت مقید بودن به فارسی نویسی رو هم از دست میده. در ضمن کد زیر رو برای مقید بودن به فارسی نویسی به input ها اضافه میکنم:
lan=fa
البته قبلش هم فانکشن جاوا اسکریپت مربوطه رو فراخوانی میکنم.
پاسخ: 
این مشکل نیاز به بررسی دقیق سورس کدها دارد، احتمالا خطای Syntax برای فیلدهای اضافه یا مواردی مشابه این مورد وجود دارد، در صورت تمایل کدها را به صورت یک فایل HTML در سایت خود یا در یک سایت دیگر آپلود و آدرس صفحه را ارسال کنید تا بررسی گردد.
نویسنده: سامان
۲۱:۲۳ ۱۳۹۴/۰۸/۲۲
سلام
من آپلود کردم لینک دانلود کدهاشم گذاشتم ...
ممنون میشم اگه کمک کنید
باور کنید یک هفته درگیرشم به خیلیا هم گفتم.
حذف شد
پاسخ: 
دوست گرامی صفحه بررسی شد، موارد اینچنینی را به علت زمانبر بودن معمولا کسی انجام نمی دهد! متاسفانه کدها طوری است که برای رسیدن به اهداف شما تقریبا کل کار باید از نو دوباره نویسی شود (کدهای آماده با آگاهی از کارکرد آنها باید استفاده شوند، در غیر اینصورت صرفا باعث درهم و برهم شدن و شلوغی سورس ها می شوند!) + توابع جداگانه ای برای بحث Ajax باید نوشته شود.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





1 × 6
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form mohadeseh
در:
ممنون از راهنماییتون مشکلم حل شد
۱۳۹۹/۰۷/۲۸

form محمد
در:
سلام. یک کد نوشته ام بدین صورت: وقتی صفحه باز شده یک پنجره پیام خالی با یک ok باز شده هر چه ok را...
۱۳۹۹/۰۷/۲۸

form فایز پور جهانبخشی
در:
سلام اگر بخواهیم برنامه ای که داخل متلب نوشتیم تا یک ثانیه اجرا شود و بعد از ثانیه اول در حالت خطا که...
۱۳۹۹/۰۷/۲۸

form mohadeseh
در:
الان کد من که توی تگ <head> گزاشتم میخواستم بدونم ایا امکانش هست که توی تگ link که ایکون رو باهاش اوردم بتونم...
۱۳۹۹/۰۷/۲۷

form mohadeseh
در:
سلام ببخشید لطفا راهنمایی کنید که چجوری title برای favicon در html بزارم؟ جوری که وقتی موس روی icon قرار بگیره متن...
۱۳۹۹/۰۷/۲۷

form ryomaechizen
در:
سلام. اگه حافظه وب پر بشه و مجبورا عکسا کپی باشن چطور باید مشکل بارگزاریشون حل بشه؟
۱۳۹۹/۰۷/۲۶

form رونا
در:
پرونده فرستاده شده نمی‌تواند به wp-content/uploads/2020/10 برود. سلام این ارور برای چی رخ می ده
۱۳۹۹/۰۷/۲۵

form reza
در:
سلام خوبید انشاالله؟ خواستم بدونم این نوار ابزار رو چطور باید اونایی رو دوست دارم بزارم سمت راست وبلاگم. هر چی کد و ......
۱۳۹۹/۰۷/۲۴

form سینا
در:
چگونه میتوانیم با استفاده از HTML فرمول شیمیایی مواد را بنویسیم؟ با عدد اتمی، جرمی و بار اتمی
۱۳۹۹/۰۷/۲۱

form فاطمه
در:
سلام ممنونم... خیلی ساده و روون توضیح دادین.. اونقدر که تشویق شدم محتوای یه فایل تکس رو با ایجکس درون یه div بیارم ولی...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
خب متوجه شدم. که باید خط اول عدد فانکشن رو تغییر بدم. بسته به تعداد آرایه یا هر عدد دیگه تغییر بدم جوابمو...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
عالی بود. خیلی ممنونم. ولی هر چند کلمه داخل آرایه داشته باشم به همون میزان خروجی گرفته میشه. من اگه 10 کلمه در آرایه داشته...
۱۳۹۹/۰۷/۲۱

form سعادتی
در:
سلام کاش روش برطرف کردن این بهم ریختگی رو هم توضیح میدادید. ممنون
۱۳۹۹/۰۷/۲۰

form امیرحسین
در:
موفق شدم اینو پیدا کنم. ولی میخوام کلمات تکراری داخلشون نباشه. مثال AAA فقط یک بار در اون خط وجود داشته باشه.
۱۳۹۹/۰۷/۲۰

form امیرحسین
در:
سلام. نه محدودیت زمانی وجود نداره.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام خسته نباشید. میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم. مثلا یه آرایه داشته باشم. امیدوارم کمکم...
۱۳۹۹/۰۷/۲۰
form ابوالفضل
در:
سلام وقتتون بخیر من میخوام یه افزونه برای مرورگر کروم طراحی کنم و میخوام یه متنی رو هر سری از سایت دریافت کنه و...
۱۳۹۹/۰۷/۲۰
form mahdi
در:
سلام چطور می تونم از ip خارجی استفاده کنم؟ برای دریافت لانچر میخام. مرسی
۱۳۹۹/۰۷/۱۹
form احسان عباسی
در:
با سلام و تشکر از سایت خوبتون من یه کد تعریف کردم که در بورس ایران سهم مدنظرمو بیاره .. میخواستم ببینم امکانش هست دستوری...
۱۳۹۹/۰۷/۱۷
form شبنم
در:
سلام وقتتون بخیر، ببخشید از کلمه event یا e دقیقا چه زمانی توی فانکشن استفاده میکنیم؟
۱۳۹۹/۰۷/۱۷
form احمد
در:
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست. بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم...
۱۳۹۹/۰۷/۱۶
form احمد
در:
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن...
۱۳۹۹/۰۷/۱۶
form ابوالفضل
در:
سلام واقعا من خیلی گشتم تا بتونم این آموزش رو پیدا کنم چون واقعا نمی دونستم چی بنویسم تا یک رتبه بندی برای نتایج جستجو...
۱۳۹۹/۰۷/۱۵
form mahtab
در:
سلام وقتتون بخیر ببخشید میشه بفرمایید چجوری کلیپ رو بزاریم وبلاگ ؟؟ بی زحمت کامل بفرمایین ممنون و متشکر
۱۳۹۹/۰۷/۱۴
form Saeid Azari
در:
سلام ببخشید اگه امکانش هست سوال منو جواب بدید یکم گیج شدم...من یک کد html دارم که باید یک سایت درست کنم و ان را...
۱۳۹۹/۰۷/۱۳
form ابوالفضل
در:
سلام یک سوال دارم چجوری یک متنی که درون تگ td هست و بعد تگ br هست (تگ br درون تگ td است) رو...
۱۳۹۹/۰۷/۱۳
form parnian
در:
با سلام با توجه به این که این مطلب در سال 91 نوشته شده ایا تغیری هم کرده؟ مثلا استفاده و مهم بودن تگ های...
۱۳۹۹/۰۷/۱۳
form fahimeh
در:
سلام من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم برای کار با پایگاه داده دستور insert و delete کار میکنه ولی...
۱۳۹۹/۰۷/۱۲
form امین
در:
با عرض سلام ببخشید یه فرم دارم اخر فرمم یه دکمه دارم میخواستم بدونم چطوری باید بعد از کلیک کردن دکمه به صفحه دیگه انتقال...
۱۳۹۹/۰۷/۱۱
form محسن
در:
سلام من از فرم ساز گرویتی استفاده میکنم آیا امکان استفاده همچین چیزی رو میتونم داخلش داشته باشم آیا کدی داره که در قسمت...
۱۳۹۹/۰۷/۱۱
form مالکی
در:
چرا وبلاگم بالا نمی یاد
۱۳۹۹/۰۷/۰۹
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید نمونه کد رو اگر امکانش هست نگاه کنید که چطوری این متغییری رو که بدست اوردم در...
۱۳۹۹/۰۷/۰۹
form الناز
در:
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
۱۳۹۹/۰۷/۰۹
form محمد
در:
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از...
۱۳۹۹/۰۷/۰۹
form احمد
در:
با سلام ببخشید چطوری باید در جکوری از یک متغییر در صفحات دیگه استفاده کنم مثال دو عدد را باهم جمع کردم و ریختم داخل...
۱۳۹۹/۰۷/۰۹
form مهسا
در:
سلام و خسته نباشید مشکلی برای وبلاگ من پیش اومده موقع ورود بهم پیام میده وبلاگ داره بروز رسانی میشه و بعدا وارد وبلاگ شوید...
۱۳۹۹/۰۷/۰۸
form Moshtagh
در:
سلام و خسته نباشید بنده چند روزه که وقتی اطلاعات ورود به وبلاگم رو وارد تیترها و کلیک میکنم با چنین پاسخی مواجه میشم...
۱۳۹۹/۰۷/۰۸
form mahtab
در:
سلام خسته نباشین ببخشید چرا بلاگفا باز نمیکنه ؟؟؟ میرم مدیریت وبلاگ نه تو بروز شده ها وبی هستم نه هم که...
۱۳۹۹/۰۷/۰۷
form جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
form نبی
در:
‏asc و desc رو جابجا نوشتی
۱۳۹۹/۰۷/۰۴
form ساناز محمدی
در:
سلام مرسی از کدی که گذاشتید ♥
۱۳۹۹/۰۷/۰۳
form mahtab
در:
سلام خسته نباشین ببخشید میخواستم بپرسم که چجوری میتونیم یه کلیپ رو از کامپیوتر از انیستا دانلود کنیم ؟؟ اها اینم بگم...
۱۳۹۹/۰۷/۰۲
form سعید
در:
سلام دستتون درد نکنه از پروژه شما استفاده کردم فقط یه مشکل اگه در یک صفحه دو تا لیست کشویی داشته باشیم چطوری...
۱۳۹۹/۰۷/۰۱
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.