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
» تعویض کد امنیتی Captcha با Ajax و 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 لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




2 × 1
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form adel
در:
سلام با تشکر از سایت خوب شما. یه سوال داشتم چگونه تمام این کدها را در جاوا اسکریپت همزمان قرار دهیم. من مثلا دستور این...
۲۱:۲۵:۴۰ ۱۳۹۸/۰۸/۲۴

form یه سوال کننده
در:
سلام. ببخشید چطور میشه ایمیل هایی رو میفرستن که ریپلای زدن رو ایمیلی که از طرف ما نبوده بیشتر تو تبلیغات دیدم امیدوارم منظورم و...
۰۳:۲۳:۰۸ ۱۳۹۸/۰۸/۲۴

form پرتو
در:
با عرض سلام و خسته نباشید امیدوارم حالتون خوب باشه من دو سه سال پیش وبلاگم رو حذف کردم ایا امکانش هست برگرده؟ ادرس...
۱۴:۵۵:۵۲ ۱۳۹۸/۰۸/۲۰

form علی
در:
سلام من نمی تونم html tag رو چطور در وبلاگم قرار بدم وبلاگم اینه
tagtak.blog.ir
۱۰:۲۳:۳۴ ۱۳۹۸/۰۸/۲۰

form حمید
در:
سلام. خسته نباشید. من میخاستم استایل فیلدهای فرمم رو تغییر بدم منتهی نمیدونم از چه کدهایی باید استفاده کنم. برای اینکه فرمی به شکل...
۱۰:۳۶:۱۹ ۱۳۹۸/۰۸/۱۹

form سمیه
در:
سلام ممنون بابت آموزش مفیدتون توی تگ ها هرچیزی که در تگ head قرار بگیره نمایش داده نمیشه، اما ممنون میشم...
۲۰:۴۹:۲۳ ۱۳۹۸/۰۸/۱۷

form استادمجازی
در:
سلام. از ادمین عزیز و همگی دعوت می کنم آموزش های خوبتون را بصورت آموزش ویدیویی یا صوتی و... در سایت ostadmajazi.com استادمجازی ...
۲۲:۱۲:۲۳ ۱۳۹۸/۰۸/۱۳

form mohamad
در:
سلام و خسته نباشید ، توی فرمی که ساختم چند تا drop down دارم که میخوام با php براشون شرط بذارم به طوری...
۱۳:۵۱:۳۴ ۱۳۹۸/۰۸/۱۰

form رضا
در:
خسته نباشید این جلسه آخر html بود؟؟؟؟
۰۱:۱۵:۰۷ ۱۳۹۸/۰۸/۱۰

form امیرمحمد
در:
سلام و خسته نباشید استاد بنده میخوام بین دو کد زیر که مشخص کردم رو به دست بیارم
// ---------------------set سلام...
۱۹:۳۰:۵۳ ۱۳۹۸/۰۸/۰۸

form حجت
در:
خیلی ممنونم از لطف شما. اوکی شد.
۱۰:۲۸:۳۵ ۱۳۹۸/۰۸/۰۶

form میلاد
در:
آشنایی نسبی با css, php و ajax دارم و نمیخام از library های موجود در نت استفاده کنم. خواستم با همین متد که انصافا روان...
۲۳:۲۲:۵۵ ۱۳۹۸/۰۸/۰۵

form عرفان
در:
با سلام. مدتی بود که بدلایل مشکلات زیاد نتونستم به وبلاگم رسیدگی کنم ولی وقتی برگشتم میبینم که هزاران بازدید داشتم و همشونم به زبان...
۲۲:۴۹:۴۴ ۱۳۹۸/۰۸/۰۵

form raha
در:
سلام وقتتون بخیر ببخشید علامت @ در کل به چه معناست ممنون میشم پاسخ دهید
۲۰:۱۲:۵۹ ۱۳۹۸/۰۸/۰۵

form میلاد
در:
باسلام تشکر از مطالب روان و پرکاربردتان. در خصوص آموزش مذکور، نحوه و ترفند نمایش محور عمودی در سمت چپ نمودار (مشابه...
۰۲:۳۸:۴۰ ۱۳۹۸/۰۸/۰۵