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 مطالب بیشتر:
» جستجو در مطالب سایت با استفاده از MySQL Full-Text
» ایجاد لینک دانلود مدت دار با PHP و MySQL
» تعویض کد امنیتی Captcha با Ajax و MySQL
» آموزش ساخت پنل ورود و خروج سایت با PHP و MySQL
» آموزش ساخت فرم عضویت در سایت با PHP و MySQL
commentنظرات (۵۲ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: abbas
۱۷:۵۲ ۱۳۹۲/۰۵/۱۸
با سلام دوست عزیز با عرض مزاحمت دوباره می خواستم می تونید لینکی رو معرفی کنید که بتونه اموزش دیریم ویور رو البته قسمت کار با ایجاد کار با رکورد و... رو به صورت پی دی اف یا دیگر موارد معرفی کنید.
پاسخ: 
عرض کردیم، دریم ویور صرفا یک محیط برنامه نویسی است و یک زبان یا سیستم جداگانه محسوب نمی شود! تنها آموزش های کلی در رابطه با رابط کاربری آن وجود دارد که باید در وب جستجو کنید، پس از فراگیری کار با رابط کاربری آن (که چندان هم پیچیده نیست)، باید در چارچوب اصول و مبانی وب + یک زبان سمت سرور (مانند PHP) کدهای خود را بنویسید و سایتتان را پیاده سازی کنید، البته خود دریم ویور این فرآیند را به صورت wizard در نظر گرفته که برای موارد حرفه ای چندان کاربردی ندارد و اکثر برنامه نویسان حرفه ای ترجیح می دهند صرفا کدها را در این نرم افزار نوشته و در لوکال هاست ذخیره و اجرا نمایند.
نویسنده: نازنین
۱۵:۵۶ ۱۳۹۲/۰۵/۲۶
سلام. از سایت خوبتون تشکر می کنم. دو تا سوال داشتم نمی دونستم کجا بنویسم اینجا نوشتم:
1- من برای سایتم یه سی ام اس اختصاصی بر اساس پی اچ پی و اس کیو ال نوشتم که دو سال طول کشیده فکر می کنم که تمامی باگ های امنیتی رو بستم. حالا دردسر ذهنی من اینکه که سرویس دهنده هاست من فایل ها رو که اوپن سورس هستن برای خودش نبره. آیا راهی هست که بشه یه جورایی کدها رو اینکد کرد که کسی نتونه دیکد کنه. چون الان نرم افزارهای زیادی هستن که اینکد می کنند اما دیکودرشون هم هست!
2- آیا توی اینترنت سایت مرجعی هست که از این کارها حمایت کنه و در مقابل کپی غیر مجاز دیگران بتونم شکایت کنم؟
پیشاپیش از پاسختون ممنونم.
پاسخ: 
در مورد سوال اول:
همان طور که خودتان اشاره کردید، راه صد در درصدی برای جلوگیری از کپی کدها توسط دیگران (کسانی که به هاست دسترسی دارند) وجود ندارد، برنامه هایی برای این کار وجود دارد که در مجموع چندان ساده و کاربردی نیستند و نیاز به نصب و فعال سازی امکاناتی در سرور دارند، آنچه ما در این زمینه به آن رسیدیم این است که قبل از هر چیز باید یک هاست مطمئن و ترجیحا با سابقه داشته باشید، البته دزدی اسکریپت خیلی کم دیده شده و معمولا بیش از 90 درصد شرکت ها و گروه ها دست به چنین حرکت های غیر حرفه ای و غیر قانونی نمی زنند، نکته دوم درج یادداشت های مربوط به شناسنامه برنامه در درون تمام فایل ها است، این اقدام به خیلی از افراد که ممکن است تصور کنند اسکریپت شما رایگان است، این تذکر را می دهد که اسکریپت به صورت خودنوشت و شخصی تهیه شده، نکته سوم ایجاد الگوریتم های شخصی برای به فرض درج عبارتی در هسته کدها به صورت کد شده و یا محدود کردن استفاده از کد به یک یا چند آدرس خاص است، البته هرچند ممکن است شکستن قفل این الگوریتم ها ممکن باشد، اما معمولا چنین افرادی کمتر وقتشان را صرف اینگونه کارها می کنند و در صورت قابل استفاده نبودن کدها در تلاش های اولیه، از خیر آن می گذرند!
نکته چهارم استفاده از برنامه هایی به نام obfuscator یا مخدوش کننده است که با آن می توانید به فرض نام متغیرها، توابع و... را غیر قابل فهم برای انسان کنید، یا فواصل خالی را از کدها حذف نمائید، به این ترتیب کدهای شما کمتر دستخوش تغییر خواهند شد.
در مورد سوال دوم:
متاسفانه سایت خاصی برای این کار وجود ندارد، شاید در موارد مهم مراجعه به پلیس فتا نتیجه بخش باشد که آن هم مسلما نیاز به داشتن مدارک و شواهد به اندازه کافی است.
نویسنده: نازنین
۱۰:۵۹ ۱۳۹۲/۰۵/۲۷
با سلام مجدد. ممنون از اینکه وقت گذاشتین و پاسخ دادین.
ای کاش سایت یا نرم افزاری برای حمایت از این کارها وجود داشت.
به هر حال از راهنمایی و لطف شما ممنونم.
۱۱:۵۵ ۱۳۹۲/۰۶/۱۱
با سلام دوست عزيز كد شما كارم رو راه انداخت ! فقط يه سوال داشتم امنيت طراحي صفحه لاگين و يا در كل سيشني كه كدش رو دريم ويور ميده چقدر است؟ البته در مورد ساخت سايت دايناميك؟
پاسخ: 
در مورد امنیت، آنچه مهم است میزان آشنایی و نحوه استفاده شما از سشن است، یعنی باید بدانید در حال انجام چه کاری هستید و چگونه از این امکان به درستی استفاده کنید، اینکه چه برنامه ای کدها را تولید کند اهمیت ندارد، چینش و تعریف دقیق کدهای برنامه است که مهم است (و این حالت معمولا نیاز به تمرین و تکرار و کسب تجربه دارد).
نویسنده: سيد عباس
۱۶:۳۸ ۱۳۹۲/۰۶/۱۱
دوست عزيز يه سوال ديگه چطوري ميتونيم كاري كنيم تا tetxarea عكس يا فيلم را همراه نوشته ارسال كند البته به غير از روش ارسال با كد از پيش آماده شده، يه راهي شبه به سرويس دهنده وبلاگ با تشكر اگه پاسخ بديد!!!
پاسخ: 
برای این موارد باید از ویرایشگرهایی به نام اختصاری WYSIWYG استفاده کنید، مانند TinyMCE، CKEditor و...
یک راه حل دیگر نوشتن ویرایشگر اختصاصی است که کاری کاملا حرفه ای و نیازمند تسلط کامل بر جاوا اسکریپت است.
۲۰:۲۵ ۱۳۹۲/۰۶/۱۲
دوست عزيز چطور ميشه براي اجراي اين كد اون رو مثل صفحات ديگر سايت از يك ديتابيس مشترك استفاده كرد يعني ديتابيس و تنظيماتش رو در داخل اين كد انجام نداد البته در صفحات ديگر ميشه از كد
<?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 است که باید متناسب با محل قرارگیری فایل و به صورت دقیق انجام شود.
نویسنده: سمیه
۱۶:۳۳ ۱۳۹۲/۰۶/۲۱
سلام
اول بابت طراحی سایت حرفه ای شما و هم چنین مطالب بسیار آموزنده تشکر می کنم.
من به شخصه خیلی استفاده بردم.
دارم یک وب اپلیکیشن مینویسم با زبان php، تقریبا کامل شده چند تا سوال ازتون دارم .ممنون میشم جواب بدید.
1.من یک کلاس برای نمایش تقویم میخوام که تابعی داشته باشه که بتونم اطلاعاتی بسته به پایگاه داده ام در هر روز یا بعضی از روزها درون فیلد روز نمایش بده.
مثلا برای روز 12م متنی درون فیلد این روز همراه عدد روز بنویسه و برای روز 20م یک متن دیگر. شما همچین کلاسی سراغ دارید؟ یا راهکاری پیشنهاد می کنید؟
2. وقتی کاربر من رمز عبورش رو فراموش میکنه چون رمزها رو در پایگاه داده هش کردم میخوام یک لینک ریست پسورد به ایمیلش ارسال بشه .
کلیات انجام اینکار چطوریه؟ کلید در کجا ذخیره میشه و چطوری میشه این لینک رو مدت دار کرد؟
وقتتون بخیر
پاسخ: 
در مورد سوال اول:
کلاس آماده ای که همه ی کارهای مد نظرتان را انجام دهد سراغ نداریم، باید چنین سیستمی را خودتان تعریف کنید، اگر تاریخ ها به میلادی است، می توانید از تابع date در PHP استفاده کنید و مواردی که در روزها باید نمایش داده شوند را در دیتابیس همراه با تاریخ مورد نظر ثبت کنید، سپس برای تاریخ هر روز دیتابیس را جستجو کنید، اگر موردی متناسب با آن وجود داشت نمایش دهید، اما برای تاریخ فارسی تابع jdf توصیه می شود که آموزش آن چه در وب و چه در سایت وجود دارد (عبارت تاریخ را در قسمت جستجو وارد کنید).
در مورد سوال دوم:
ابتدا باید با نحوه ارسال ایمیل در PHP آشنا باشید (آموزش آن در وب و در سایت وجود دارد، عبارت ایمیل را در قسمت جستجو وارد کنید)، سپس می توانید برای کاربرانی که رمز عبورشان را فراموش کرده اند یک پیام حاوی لینک به یک فایل ارسال کنید، این لینک دارای یک پارامتر اختصاصی رمزی شده باشد که اصل آن در دیتابیس ذخیره شده است، با کلیک کاربر بر روی لینک، در فایل مربوطه مقادیر اختصاصی کاربر را از متد GET گرفته و با آنچه در دیتابیس ست شده تطبیق دهید، اگر برابر بود، پس کاربر به درستی روی لینک تغییر کلمه عبور کلیک کرده، رمز جدید را ایجاد، بازنشانی و به کاربر نمایش دهید.
برای ایجاد تاریخ انقضا نیز می توانید یک ستون از نوع DATETIME بسازید و تاریخ و زمان را با فرمت استاندارد MySQL ذخیره کنید، سپس به پرس و جوی خود معتبر بودن تاریخ را نیز اضافه کنید.
نکته: انجام درست هر کدام از مراحل بالا خود به یک آموزش مفصل نیاز دارد که باید از پیش آنها را گذرانده باشید.
نویسنده: سمیه
۱۴:۰۱ ۱۳۹۲/۰۶/۲۲
مرسی از پاسخگویی سریع شما.
مورد دوم رو درست کردم. ولی کلیدی که برای کاربر میفرستم یک کلید رندوم 90 کاراکتری هست. لزوم هش کردن کلید چیه؟ نظرتون راجع به کلید من چیه؟
		private function getRandomString($length) 
{
$validCharacters = "ABCDEFGHIJKLMNPQRSTUXYVWZ123456789";
$validCharNumber = strlen($validCharacters);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
return $result;
}
سایت من یک مدیریت وظایف هست، میخوام تقویم ماهانه داشته باشه. و برای هر روز نشون بده کاری هست یا نه. اگر متوجه منظور شما شده باشم. باید بعد از طراحی هر فیلد تقویم، یک کوئری از جدول داشته باشم که این روز رو چک کنه، بعد در همون فیلد پیام مناسب رو بنویسه. این روش بار زیادی به سرور نمیده و باعث کاهش سرعت نمیشه؟ چون برای صفحه تقویم حدود 30 تا کوئری انجام میده!
پاسخ: 
ایجاد کد رندم تنها شیوه ای است که کاربران متفاوت از هم شناسایی شوند، اهمیتی ندارد که از چه روشی برای تولید کاراکترهای اتفاقی استفاده کنید، منتها هر چه طول کاراکترها بیشتر باشد (به فرض حداقل 20 کاراکتر)، امنیت آنها بیشتر و احتمال استفاده از کاراکترهای اتفاقی کمتر و نزدیک به صفر می شود.
در مورد نحوه پرس وجو، این مورد نیاز به تجربه قبلی دارد، یعنی باید در مباحثی مانند آرایه، حلقه ها و... به اندازه ای تجربه داشته باشید که با حداقل کدنویسی و استفاده از دیتابیس به نتیجه نهایی برسید، به فرض در اینجا می توان اتفاقات بازه 30 روز را با یک پرس و جو فراخوانی و در حلقه while به صورت یک آرایه با کلید و مقدار موارد را نگهداری کرد، سپس در فیلدهای مورد نیاز استفاده نمود.
نویسنده: سمیه
۱۵:۴۱ ۱۳۹۲/۰۶/۲۳
بخشید که اینقدر سوال میپرسم. واقعا ممنون که وقت میذارید و جواب میدید.
کمی مطالعه ام رو بالا بردم. ظاهرا این تابع mt_rand خیلی ضعیفه.
شما یک تابع مناسب و امن CPRNG که منبع آنتروپی خوبی داشته باشه، برای تولید کلید سراغ دارید؟
پاسخ: 
می توانید از تابع زیر استفاده کنید:
<?php
function randomChar($len){
$return = NULL;
for($i=0;$i<$len;++$i){
if(!isset($urandom)){
if($i % 2 == 0) mt_srand(time() % 2147 * 1000000 + (double)microtime() * 1000000);
$rand = 48 + mt_rand() % 64;
}
else{
$rand = 48 + ord($urandom[$i]) % 64;
}

if($rand > 57){
$rand += 7;
}
if($rand > 90){
$rand += 6;
}

if($rand == 123){
$rand = 45;
}
if($rand == 124){
$rand = 46;
}
$return .= chr($rand);
}
return $return;
}
echo randomChar(20);
?>
البته در مواردی اینچنین که کلمه رمز صرفا یک عبارت رندم است و به فرض هش شده کلمه عبور و... نیست که قابل بازیابی باشد، اینکه از چه روشی استفاده کنید چندان اهمیتی ندارد، چون در نهایت یک عبارت رندم خواهید داشت، مهم سلب امکان حدس زدن اتفاقی عبارت است.
نویسنده: جعفر
۱۶:۵۱ ۱۳۹۲/۰۸/۳۰
سلام. من می خوام تمامی اطلاعاتی رو که توی دیتابیسم هستند رو تا قبل از 2 ساعت زمانی فعلی حذف کنم و کد زیر رو نوشتم اما کد کار نمی کنه و اطاعات رو یکی یکی حذف می کنه ! خوشحال میشم اگه کمکم کنید:
$ti = time() - 7200;
$query = mysql_query("SELECT id FROM counter WHERE time < $ti ");
while($row = mysql_fetch_array($query)){
$id = $row['id'];
}
$delete = mysql_query("DELETE FROM counter WHERE id = '$id' ");
پاسخ: 
دستور delete را داخل حلقه while قرار دهید.
نویسنده: جعفر
۲۰:۰۹ ۱۳۹۲/۰۹/۰۱
سلام. خیلی خیلی ممنونم. مشکلم حل شد. سایت وبگو تکه .......
نویسنده: میثم
۱۲:۴۰ ۱۳۹۲/۰۹/۰۸
سلام. من یه مشکلی دارم که تقریبا شبیه این مطلب حدف گروهی هست.
من دیتابیسم دو جدول داره و می خوام یه سری اطلاعات از جدول اول گرفته بشه و داخل جدول دوم بیاد به همراه یه سری اطلاعات جدید دیگه. من کد ساخت تکی ردیف ها رو می دونم. اما توی ارسال مثلا 20 تا ردیف به صورت هم زمان مشکل دارم.
مثلا:
من یه فرم HTML طراحی کردم به صورت زیر:
نام           عدد
علی فیلد
حسین فیلد
عباس فیلد
دکمه ارسال فرم
که ستون نام رو از جدول اول میگیره و ستون عدد به صورت فیلد طراحی شده که داخل هم کدام یه عدد (یا تکراری یا غیر تکراری) نوشته میشه.
من کد php که نوشتم و به صورت زیر هست:
if($_REQUEST['link']){
$res = mysql_query("select * from t1 where a = '1'");
while($row = mysql_fetch_array($res)){
$name = strip_tags($row['name']);
$adad = strip_tags($_POST['adad']);
$querypost="INSERT INTO t2(name,adad)
Values('$name','$adad')";
if(mysql_query($querypost) or die(mysql_error())){
$error = '<div id="result">درخواست شما با موفقیت ثبت شد !</div>';
}else $error = '<div id="bresult">خطا در ارسال اطلاعات - لطفا مجددا تلاش کنید !</div>';
}
}
توی جدول html (کدش رو قرار ندادم) اطلاعات کامل نشون داده میشه مثل فرم بالا. بعد که برای هر کدام عدد رو داخل فیلد می نویسم و روی ارسال کلیک می کنم توی جدول جدید اطلاعات درست ذخیره میشن یعنی توی ردیف اول اسم علی میاد و توی ردیف دوم اسم حسین میاد و ... اما مشکل اینجاست که عدد وارد شده برای همه تکرار میشه مثلا همه رو 2 مینویسه که اشتباه است.
به عبارت دیگه چطور میشه اطلاعات یک ستون رو تغییر بدیم!!!
ببخشید سوال خیلی طولانی بود و ممنون میشم کمکم کنید.
پاسخ: 
دوست گرامی سوالتان خیلی مفهوم نیست، کمی پراکنده توضیح دادید، به نظر باید فیلد ها را به صورت یک آرایه ارسال کنید (یعنی نام فیلد شما علامت [] را در انتهای خود داشته باشد)، سپس در سمت سرور با یک حلقه foreach در بین کلید و مقدار آرایه دور تکرار داشته باشید و برای هر دور، دستور INSERT را داخل حلقه اجرا و مقادیر value را در دیتابیس ذخیره کنید.
قاعدتا باید با بحث فرم ها و همچنین کار با آرایه ها در PHP آشنا باشید، در غیر این صورت درک این مسئله کمی پیچیده به نظر می رسد.
نویسنده: میثم
۱۸:۴۷ ۱۳۹۲/۰۹/۰۸
سلام. از پاسختون ممنونم. ببخشید من سوال رو واضح مطرح نکردم.
ولی فکر کنم شما دقیقا منظور منو متوجه شدین.
من می خوام یه فرم برای ویرایش یا ایجاد هم زمان چند رکورد از پایگاه داده درست کنم که هر رکورد مقدار فیلد خودش رو داشته باشه.
توی اینترنت خیلی گشتم و تابع foreach رو بهم گفتن ولی من نحوه نوشتن تابع رو بلد نیستم. ممنون میشم کمکم کنید. کارم خیلی گیره.
پاسخ: 
در اصل شما باید این موارد را از مقدمات فرا بگیرید، چون مباحث به هم مرتبط و پیوسته هستند، به هر صورت نمونه کد زیر یک حالت ساده را نشان می دهد.
فرم HTML:
<form action="index.php" method="post">
<input name="name[]" type="text"><br>
<input name="name[]" type="text"><br>
<input name="name[]" type="text"><br>
<input name="check" type="hidden" value="1">
<input type="submit" value="ارسال">
</form>
نمونه کد سمت سرور:
@$name = $_POST['name'];
@$check = $_POST['check'];

if(isset($check) && $check == '1'){
foreach($name as $key => $value){
mysqli_query($conn, "INSERT INTO t2 (name) VALUES ('$value')")
or die(mysqli_error($conn));
}
}
نویسنده: میثم
۲۰:۳۶ ۱۳۹۲/۰۹/۰۸
از راهنمایی تون ممنونم.
ولی ارور
Invalid argument supplied for foreach()
میده.
بازم روی کد نویسی کار می کنم. نمی دونم کجا دارم اشتباه می کنم.
دوباره از سایت خوب و مفیدتون ممنونم.
نویسنده: یلدا
۱۱:۰۳ ۱۳۹۲/۰۹/۲۴
سلام و عرض تشکر بابت آموزش های کاربردی و گویاتون!
اگر لطف بفرمائید ، نحوه ی ارسال مقادیر تگ select به پایگاه و mysql را هم توضیحی بفرمائید.
مثلا چطور مقداری که کاربر از کشوی تگ سلکت انتخاب مبکند در mysql ذخیره کنیم و بعد ازش استفاده کنیم.
ممنون
پاسخ: 
ارسال پارامتر از تگ select با تگ input و... خیلی متفاوت نیست، تنها در اینجا عنصر دیگری به نام option وجود دارد که در واقع همان مقادیر انتخاب شده است.
<select name="test">
<option value="1">1</option>
<option value="2">2</option>
</select>
سپس با ارسال فرم، مقادیر تگ select بر اساس پارامتر name آن، قابل دریافت با PHP و به تبع ذخیره سازی در MySQL است.
$name = $_POST['test'];
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





7 × 8
 refresh

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

form مبینا
در:
سلام من برنامه ای میخواستم که داخل ارایه 5 رنگ قرار گرفته باشه. و با استفاده از حلقه for این یک متنو به اون پنج...
۱۳۹۹/۰۸/۰۱

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 جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.