پنجشنبه ۰۴ اردیبهشت ۱۴۰۴

Thursday, April 24, 2025 GMT +3:30

آموزش حذف گروهی اطلاعات از 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 رفتار مد نظر را بر اساس انتخاب کاربر اعمال می کنیم.
دسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
آموزش ساخت پنل ورود و خروج سایت با PHP و MySQL
هوشمند سازی پنل ورود و خروج سایت با PHP و MySQL
ساخت فید آر اس اس (RSS Feed) با استفاده از PHP و MySQL
تعویض کد امنیتی Captcha با Ajax و MySQL
ایجاد لینک دانلود مدت دار با PHP و MySQL
دیدگاه
more ۵۲ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
سمیه
۱۶:۳۳ ۱۳۹۲/۰۶/۲۱
سلام
اول بابت طراحی سایت حرفه ای شما و هم چنین مطالب بسیار آموزنده تشکر می کنم.
من به شخصه خیلی استفاده بردم.
دارم یک وب اپلیکیشن مینویسم با زبان php، تقریبا کامل شده چند تا سوال ازتون دارم .ممنون میشم جواب بدید.
1.من یک کلاس برای نمایش تقویم میخوام که تابعی داشته باشه که بتونم اطلاعاتی بسته به پایگاه داده ام در هر روز یا بعضی از روزها درون فیلد روز نمایش بده.
مثلا برای روز 12م متنی درون فیلد این روز همراه عدد روز بنویسه و برای روز 20م یک متن دیگر. شما همچین کلاسی سراغ دارید؟ یا راهکاری پیشنهاد می کنید؟
2. وقتی کاربر من رمز عبورش رو فراموش میکنه چون رمزها رو در پایگاه داده هش کردم میخوام یک لینک ریست پسورد به ایمیلش ارسال بشه .
کلیات انجام اینکار چطوریه؟ کلید در کجا ذخیره میشه و چطوری میشه این لینک رو مدت دار کرد؟
وقتتون بخیر
در مورد سوال اول:
کلاس آماده ای که همه ی کارهای مد نظرتان را انجام دهد سراغ نداریم، باید چنین سیستمی را خودتان تعریف کنید، اگر تاریخ ها به میلادی است، می توانید از تابع date در PHP استفاده کنید و مواردی که در روزها باید نمایش داده شوند را در دیتابیس همراه با تاریخ مورد نظر ثبت کنید، سپس برای تاریخ هر روز دیتابیس را جستجو کنید، اگر موردی متناسب با آن وجود داشت نمایش دهید، اما برای تاریخ فارسی تابع jdf توصیه می شود که آموزش آن چه در وب و چه در سایت وجود دارد (عبارت تاریخ را در قسمت جستجو وارد کنید).
در مورد سوال دوم:
ابتدا باید با نحوه ارسال ایمیل در PHP آشنا باشید (آموزش آن در وب و در سایت وجود دارد، عبارت ایمیل را در قسمت جستجو وارد کنید)، سپس می توانید برای کاربرانی که رمز عبورشان را فراموش کرده اند یک پیام حاوی لینک به یک فایل ارسال کنید، این لینک دارای یک پارامتر اختصاصی رمزی شده باشد که اصل آن در دیتابیس ذخیره شده است، با کلیک کاربر بر روی لینک، در فایل مربوطه مقادیر اختصاصی کاربر را از متد GET گرفته و با آنچه در دیتابیس ست شده تطبیق دهید، اگر برابر بود، پس کاربر به درستی روی لینک تغییر کلمه عبور کلیک کرده، رمز جدید را ایجاد، بازنشانی و به کاربر نمایش دهید.
برای ایجاد تاریخ انقضا نیز می توانید یک ستون از نوع DATETIME بسازید و تاریخ و زمان را با فرمت استاندارد MySQL ذخیره کنید، سپس به پرس و جوی خود معتبر بودن تاریخ را نیز اضافه کنید.
نکته: انجام درست هر کدام از مراحل بالا خود به یک آموزش مفصل نیاز دارد که باید از پیش آنها را گذرانده باشید.
۲۰:۲۵ ۱۳۹۲/۰۶/۱۲
دوست عزيز چطور ميشه براي اجراي اين كد اون رو مثل صفحات ديگر سايت از يك ديتابيس مشترك استفاده كرد يعني ديتابيس و تنظيماتش رو در داخل اين كد انجام نداد البته در صفحات ديگر ميشه از كد
<?php require_once('آدرس كانفيگ'); ?> 
استفاده كرد ولي نميدونم چطور بايد اين صفحه رو از ديتابيس مشترك استفاده كرد لطفا توضيح بديد اين كد رو بايد چه تغييراتي بدم!!!!
با تشكر اوس
سيد عباس زهراپناهي
متغیرهایی که در صفحات مختلف مشترک هستند باید در یک فایل قرار بگیرند و آن فایل به صورت درج تکه کد فرضی زیر در ابتدای هر صفحه include شود (از require هم می توانید استفاده کنید):
<?php
include('path/to/config.php');
?>
به طور مثال در اینجا قسمت زیر را می توان در یک فایل دیگر تعریف کرد و از آن در صفحات مختلف استفاده نمود:
$host = "localhost"; // نام هاست 
$username = "root"; // Mysql نام کاربری
$password = ""; // Mysql کلمه عبور
$db_name = "db_test_mysql"; // نام پایگاه داده
$tb_name = "tb_test_mysql"; // نام جدول
نکته مهم نحوه آدرس دهی فایل config است که باید متناسب با محل قرارگیری فایل و به صورت دقیق انجام شود.
۱۶:۳۸ ۱۳۹۲/۰۶/۱۱
دوست عزيز يه سوال ديگه چطوري ميتونيم كاري كنيم تا tetxarea عكس يا فيلم را همراه نوشته ارسال كند البته به غير از روش ارسال با كد از پيش آماده شده، يه راهي شبه به سرويس دهنده وبلاگ با تشكر اگه پاسخ بديد!!!
برای این موارد باید از ویرایشگرهایی به نام اختصاری WYSIWYG استفاده کنید، مانند TinyMCE، CKEditor و...
یک راه حل دیگر نوشتن ویرایشگر اختصاصی است که کاری کاملا حرفه ای و نیازمند تسلط کامل بر جاوا اسکریپت است.
۱۱:۵۵ ۱۳۹۲/۰۶/۱۱
با سلام دوست عزيز كد شما كارم رو راه انداخت ! فقط يه سوال داشتم امنيت طراحي صفحه لاگين و يا در كل سيشني كه كدش رو دريم ويور ميده چقدر است؟ البته در مورد ساخت سايت دايناميك؟
در مورد امنیت، آنچه مهم است میزان آشنایی و نحوه استفاده شما از سشن است، یعنی باید بدانید در حال انجام چه کاری هستید و چگونه از این امکان به درستی استفاده کنید، اینکه چه برنامه ای کدها را تولید کند اهمیت ندارد، چینش و تعریف دقیق کدهای برنامه است که مهم است (و این حالت معمولا نیاز به تمرین و تکرار و کسب تجربه دارد).
نازنین
۱۰:۵۹ ۱۳۹۲/۰۵/۲۷
با سلام مجدد. ممنون از اینکه وقت گذاشتین و پاسخ دادین.
ای کاش سایت یا نرم افزاری برای حمایت از این کارها وجود داشت.
به هر حال از راهنمایی و لطف شما ممنونم.
نازنین
۱۵:۵۶ ۱۳۹۲/۰۵/۲۶
سلام. از سایت خوبتون تشکر می کنم. دو تا سوال داشتم نمی دونستم کجا بنویسم اینجا نوشتم:
1- من برای سایتم یه سی ام اس اختصاصی بر اساس پی اچ پی و اس کیو ال نوشتم که دو سال طول کشیده فکر می کنم که تمامی باگ های امنیتی رو بستم. حالا دردسر ذهنی من اینکه که سرویس دهنده هاست من فایل ها رو که اوپن سورس هستن برای خودش نبره. آیا راهی هست که بشه یه جورایی کدها رو اینکد کرد که کسی نتونه دیکد کنه. چون الان نرم افزارهای زیادی هستن که اینکد می کنند اما دیکودرشون هم هست!
2- آیا توی اینترنت سایت مرجعی هست که از این کارها حمایت کنه و در مقابل کپی غیر مجاز دیگران بتونم شکایت کنم؟
پیشاپیش از پاسختون ممنونم.
در مورد سوال اول:
همان طور که خودتان اشاره کردید، راه صد در درصدی برای جلوگیری از کپی کدها توسط دیگران (کسانی که به هاست دسترسی دارند) وجود ندارد، برنامه هایی برای این کار وجود دارد که در مجموع چندان ساده و کاربردی نیستند و نیاز به نصب و فعال سازی امکاناتی در سرور دارند، آنچه ما در این زمینه به آن رسیدیم این است که قبل از هر چیز باید یک هاست مطمئن و ترجیحا با سابقه داشته باشید، البته دزدی اسکریپت خیلی کم دیده شده و معمولا بیش از 90 درصد شرکت ها و گروه ها دست به چنین حرکت های غیر حرفه ای و غیر قانونی نمی زنند، نکته دوم درج یادداشت های مربوط به شناسنامه برنامه در درون تمام فایل ها است، این اقدام به خیلی از افراد که ممکن است تصور کنند اسکریپت شما رایگان است، این تذکر را می دهد که اسکریپت به صورت خودنوشت و شخصی تهیه شده، نکته سوم ایجاد الگوریتم های شخصی برای به فرض درج عبارتی در هسته کدها به صورت کد شده و یا محدود کردن استفاده از کد به یک یا چند آدرس خاص است، البته هرچند ممکن است شکستن قفل این الگوریتم ها ممکن باشد، اما معمولا چنین افرادی کمتر وقتشان را صرف اینگونه کارها می کنند و در صورت قابل استفاده نبودن کدها در تلاش های اولیه، از خیر آن می گذرند!
نکته چهارم استفاده از برنامه هایی به نام obfuscator یا مخدوش کننده است که با آن می توانید به فرض نام متغیرها، توابع و... را غیر قابل فهم برای انسان کنید، یا فواصل خالی را از کدها حذف نمائید، به این ترتیب کدهای شما کمتر دستخوش تغییر خواهند شد.
در مورد سوال دوم:
متاسفانه سایت خاصی برای این کار وجود ندارد، شاید در موارد مهم مراجعه به پلیس فتا نتیجه بخش باشد که آن هم مسلما نیاز به داشتن مدارک و شواهد به اندازه کافی است.
۱۷:۵۲ ۱۳۹۲/۰۵/۱۸
با سلام دوست عزیز با عرض مزاحمت دوباره می خواستم می تونید لینکی رو معرفی کنید که بتونه اموزش دیریم ویور رو البته قسمت کار با ایجاد کار با رکورد و... رو به صورت پی دی اف یا دیگر موارد معرفی کنید.
عرض کردیم، دریم ویور صرفا یک محیط برنامه نویسی است و یک زبان یا سیستم جداگانه محسوب نمی شود! تنها آموزش های کلی در رابطه با رابط کاربری آن وجود دارد که باید در وب جستجو کنید، پس از فراگیری کار با رابط کاربری آن (که چندان هم پیچیده نیست)، باید در چارچوب اصول و مبانی وب + یک زبان سمت سرور (مانند PHP) کدهای خود را بنویسید و سایتتان را پیاده سازی کنید، البته خود دریم ویور این فرآیند را به صورت wizard در نظر گرفته که برای موارد حرفه ای چندان کاربردی ندارد و اکثر برنامه نویسان حرفه ای ترجیح می دهند صرفا کدها را در این نرم افزار نوشته و در لوکال هاست ذخیره و اجرا نمایند.
۰۲:۴۰ ۱۳۹۲/۰۵/۱۸
دوست عزیز سلام یه سوال داشتم من تمام قسمت های ساخت یک فرم ثبت نام رو بلدم البته با دریم ویور فقط تنها قسمتی رو که بلد نیستم با اون نرم افزار درست کنم بخش دیلیت است فقط یه خواهشی دارم لطف کردید من این آموزش رو خوندم و تست هم کردم خوب کار کرد اما می خواستم از شما استاد عزیز خواهش کنم همین بخش رو با نرم افزار ادوب دیریم ویور توضیح بدید که چطور درست میشه چون استفاده از کد های شما هم یک نوع کپی است شاید راضی نباشید ....
کوچیک شما عباس
وبسایت آموزشی تخصصی کیوکوشین کاراته ایران
www.kyokushins.ir
اوس
بخش کدنویسی PHP و اینکه از چه نرم افزاری برای نوشتن کدها یا مدیریت فایل ها استفاده کنید، دو مقوله جدا هستند، به عبارت دیگر مهم نیست که از دریم ویور برای نوشتن کدها استفاده می کنید یا از نرم افزاری دیگر، در نهایت کدها باید در قالب فایل های PHP در سرور یا در لوکال هاست ذخیره شوند، لذا با این تفاسیر آموزش جداگانه ای برای دریم ویور نمی توان ارائه کرد، کد را کپی کنید و در یک فایل PHP قرار دهید و در نهایت در سرور یا در لوکال هاست اجرا کنید!
از نظر کپی برداری، استفاده شخصی از کدها حتی اگر کپی مستقیم و بدون تغییر باشد هیچ اشکالی ندارد.
اوس
مریم
۰۸:۵۵ ۱۳۹۲/۰۵/۱۵
ممنون که پاسخ دادین.
مریم
۱۷:۳۸ ۱۳۹۲/۰۵/۱۴
سلام. یه سوال داشتم. فرضا ما یه جدول داریم که هر بار که یه صفحه خاص از سایت باز میشه. یک ردیف (سطر) از طریق دستور insert توش ایجاد می کنیم.
حالا چطور میشه کدی نوشت که فرضا داخل جدول بیشتر از 200 سطر نداشته باشیم. و با اضافه شدن سطر جدید ( سطر 201 ) اولین سطر ( سطر 1 ) به صورت خودکار حذف بشه؟
یا اینکه مثلا داخل جدول 1000 سطر داریم حالا چطور باید کدی رو نوشت که با اجرای اون فرضا 800 تای اول حذف بشه.
ممنون.
برای حالت اول می توانید با استفاده از ASC مقدار اولین id یا هر ستون یکتایی را به دست آورید و از آن در یک دستور DELETE استفاده نمائید:
$query = mysqli_query($conn, "SELECT id FROM tbl ORDER BY id ASC LIMIT 1");
while($row = mysqli_fetch_array($query)){
$id = $row['id'];
}
$delete = mysqli_query($conn, "DELETE FROM tbl WHERE id = '$id' LIMIT 1");
برای حالت دوم هم کافی است در DELETE با LIMIT محدودیت ایجاد کنید:
DELETE FROM tbl LIMIT 800
mahdi
۰۲:۳۱ ۱۳۹۲/۰۵/۰۷
ممنون از راهنماییتون مفید بود. میشه در این موردم کمکم کنید: وقتی رکورد ها از دیتابیس حذف میشن و من یه رکورد جدید ایجاد می کنم شمارشون نا مرتبه مثلا من 5 تا رکورد داشتم. پنجمی رو حذف کردم وقتی یکی دیگه ایجاد می کنم شماره ای دی اینجوری میشه:
1 2 3 4 6
راستی تو این آموزش اگه بخوایم از کاربر بپرسیم واسه حذف مطمئنه اسکریپتش رو چجوری بنویسم که بازم کد عمل کنه. ممنون از توجهتون
در مورد سوال اول:
این بستگی به نوع id جدول مورد نظر دارد، اگر شماره id به صورت افزایش خودکار (AUTO_INCREMENT) باشد، این حالت طبیعی است و نمی توانید تغییرش دهید، اگر نیاز به تغییر دارید، باید یک ستون عادی (AUTO_INCREMENT نباشد) بسازید و با کدهای خود مقادیر آنها را پس از فعل و انفعالات به صورت دلخواه به روزرسانی نمائید.
در مورد سوال دوم:
ساده ترین راه استفاده از تابع confirm در جاوا اسکریپت است، مثال:
<a href="#" onclick="confirm('آیا از حذف این اطلاعات مطمئن هستید؟');">حذف</a>
این تابع را مطابق الگو به لینک حذف خود اضافه کنید.
mahdi
۰۱:۴۶ ۱۳۹۲/۰۵/۰۶
سلام من کدتون رو توی سایتم گذاشتم و علیرغم اینکه گفتید اصلاح شده ولی فقط صفحه رفرش میشه و حذف نمیشه. ممنون میشم اگه راهنماییم کنید. از آموزشهای بسیار خوبتون هم ممنونم
اصلاح کد به جهت چند علامت \ بود که در هنگام انتشار مطلب جا افتاده بود (لذا کد خطای Syntax داشت)، در حال حاضر برنامه مشکلی ندارد، باید ببینید دلیل عمل نکردن دستورات داخل شرط if چیست، ممکن است پرس و جوی حذف شما صحیح تنظیم نشده باشد و در نتیجه چیزی از دیتابیس حذف نشود، یا مقادیر id به درستی در قسمت value فرم HTML برای input checkbox خروجی داده نشده باشد (در نتیجه شماره id صحیح به کد ارسال نمی شود و متعاقب آن چیزی هم حذف نمی شود)، برای اطمینان موارد پیش فرض همین آموزش را از ابتدا در لوکال هاست امتحان نمائید.
نکته: برای خطایابی ابتدا سورس قسمت HTML را بررسی و از پر بودن مقادیر value با شماره id اطمینان حاصل کنید، همچنین در کدهای PHP با استفاده از دستور print_r می توانید مقادیر موجود در متغیر checkbox را مشاهده کنید، مثال:
print_r($checkbox);
saeid
۲۱:۱۵ ۱۳۹۲/۰۴/۰۹
ببخشید بازم مزاحم شدم
من به گرافیک سایت خیلی اهمیت می دم و ...
فقط یه بار دیگه می خواستم این لطف را در حق بنده کنید که ...
برای حذف گروهی قاعدتاً یک دکمه ی submit باید گذاشت اما من از دکمه ی وب خوشم نمی یاد و می خوام از دکمه ی خودم استفاده کنم
منظورم دکمه ایه که با تگ a و داخلش هم یک تگ img خودتون بهتر می دونید
حالا می خوام مقادیر مثلاً textbox و بقیه رو توسط این دکمه ی گرافیکی خودم بفرستم به صفحه ی مورد نظر یا اصلاً می خوام فرم رو با تگ a به صفحه ی دیگری ارسال کنم می خواستم بدونم چه طور می شه با php این کار رو کرد؟
در مطلبی دیگر مشابه همین سوال را پیش تر مطرح کرده بودید که به آن پاسخ داده شد:
PHP یک زبان سمت سرور است و قادر به انجام چنین کاری نیست! یا باید از HTML به شیوه معمول استفاده کنید، یا از تکنیک های مبتنی بر جاوا اسکریپت، CSS و ...
مثال:
<a href="javascript:document.FormName.submit();">ارسال فرم</a>
استفاده از CSS برای مخفی کردن دکمه submit:
<input type="submit" style="position:absolute; left:-10000px; width:5px; height:5px;">
mory44
۱۰:۲۰ ۱۳۹۲/۰۳/۰۳
ممنون از راهنمایتون مشکل حل شد
یه سوال در مورد insert کردن اطلاعات داشتم
مثلا ما سبد خرید داریم و می خواهیم مثل مثال بالا که اطلاعات رو حذف می کردیم اینبار اطلاعات انتخاب شده توی جدول جدید کپی بشه
البته در مورد insert در جواب دوستون توضیح دادین اما من نمیدونم مثلا جدولمون کدومه و ...
با تشکر فراوان
سوال خیلی کلی است، وقتی برنامه ای می نویسید باید بدانید که جدول به فرض کالا ها کدام است و... وقتی شما نمی دانید چطور ما بدانیم!
توصیه ما این است که از مقدمات مباحث را دنبال کنید، نوشتن یک برنامه کاربردی نیازمند حداقل آشنایی مقدماتی است.
mory44
۱۸:۲۷ ۱۳۹۲/۰۳/۰۲
با سلام
سایت بسیار خوبی دارید
می خواستم ببینم کدتان مشکل ندارد چون قسمت if آخر اصلا اجرا نمی شود
و می خواستم بدونم علامت @ برای چه کاری است
بله کد کاملا تست شده (مجددا تست شد)، احتمالا مشکل شما انتقال بعد از حذف است، برای این کار باید توجه داشته باشید که فایل را با نام فرضی checkbox.php ذخیره کنید، در غیر این صورت باید این قسمت را در کد متناسب با نام و آدرس فایل تنظیم کنید،
در مورد علامت @، این علامت برای مواردی استفاده می شود که آگاهانه بخواهیم خطاهای یک متغیر (که معمولا از نوع Notice یا توجه بیشتر هستند) نادیده گرفته شود (نمایش داده نشود).
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
3 × 5
20 × 20
=