article

نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL

mysql-insert

پس از آشنایی با نحوه ساخت دیتابیس، جدول و ستون با دستور CREATE در پایگاه داده MySQL و به کمک اکستنشن MySQLi، اکنون نوبت فراگیری قابلیت متداول دیگری از این سیستم مدیریت پایگاه داده است، هدف از این آموزش آشنایی با نحوه درج اطلاعات از طریق کدهای PHP با دستور INSERT INTO در جداول و ستون های MySQL است، قاعدتا صرف ساخت پایگاه داده، جدول و ستون کاربرد عملی نخواهد داشت و همه ی این مقدمات برای فراهم کردن شرایطی است که بتوانیم اطلاعاتمان را پیش از هر کار دیگری ذخیره سازی و در مواقع لزوم از آنها استفاده نمائیم، در واقع می توان گفت ذخیره سازی اطلاعات اولین مرحله تعامل با داده ها در دیتابیس است.

ارتباط با پایگاه داده MySQL


در آموزش های قبل گفتیم که قبل از انجام هر کاری ابتدا باید به پایگاه داده MySQL متصل شویم، طبق روال آموزش ها برای این کار از اکستنشن MySQLi و کدی مشابه به مثال زیر استفاده می کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . $conn->errno() . ' - ' . $conn->error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
}
//پایان اتصال
$conn->close();
?>
در این نمونه کد فرض بر این است که از قبل دیتابیسی با نام dbname را ساخته ایم (برای آشنایی با نحوه ساخت دیتابیس لطفا به آموزش قبل مراجعه کنید)، برای تکمیل کد نیز پرس و جوی ایجاد جدول فرضی books و ستون های id، book و level را در ادامه اجرا می کنیم.

ساخت جدول و ستون ها


قبل از INSERT اطلاعات، در پایگاه داده dbname جدولی فرضی با نام books می سازیم تا لیست چند کتاب و سطح آنها را جهت تست و به عنوان نمونه در ستون های book و level ذخیره کنیم، برای این منظور ابتدا با دستور CREATE جدول و ستون ها را ایجاد می کنیم (گفتیم که علاوه بر دستورات PHP، ایجاد دیتابیس، جدول و ستون از طریق رابط کاربری برنامه phpMyAdmin نیز امکانپذیر است).
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //ساخت جدول و ستون ها
    $sql = "CREATE TABLE books(
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    book VARCHAR(255),
    level VARCHAR(255))
    ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci";
    $query = mysqli_query($conn, $sql);
    
    if(!$query) {
        echo "Creating Table books: Error! " . mysqli_error($conn);
    } else {
        echo "Creating Table books: OK!";
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . $conn->errno() . ' - ' . $conn->error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //ساخت جدول و ستون ها
    $sql = "CREATE TABLE books(
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    book VARCHAR(255),
    level VARCHAR(255))
    ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci";
    $conn->query($sql);
    if(!$conn) {
        echo "Creating Table books: Error! " . $conn->error();
    } else {
        echo "Creating Table books: OK!";
    }
}
//پایان اتصال
$conn->close();
?>
توضیح:
- اطلاعات اتصال را با توجه به نام کاربری، کلمه عبور و عنوان پایگاه داده خود در تابع mysqli_connect (برنامه نویسی رویه ای) یا کلاس mysqli (برنامه نویسی شی گرا) تعریف می کنیم (نام کاربری در localhost معمولا root و بدون کلمه عبور است).
- در مثال بالا جدولی فرضی با نام books ساخته و سه ستون در آن ایجاد کرده ایم (id, book, level)، ستون id به صورت INT عددی و افزایش خودکار (AUTO_INCREMENT) و ستون های book و level از نوع VARCHAR متنی هستند که برای ذخیره سازی متن های کوتاه (در اینجا تا 255 بایت) کاربرد دارند.
- INT و VARCHAR نوع داده (Data Types) ای هستند که در ردیف ها قابل ذخیره سازی است، این امکان در MySQL وجود دارد که از مقادیر INT برای اعداد، VARCHAR برای متن های کوتاه با مقادیر مشخص یا نوع داده TEXT، MEDIUMTEXT، LONGTEXT برای متن های طولانی استفاده کنیم (در این خصوص در آموزش های آینده مفصلا صحبت خواهیم کرد).
- مقادیر NOT NULL و AUTO_INCREMENT جزء ویژگی هایی هستند که هر نوع از داده ای مقادیر بخصوص خود را می تواند داشته باشد، به طور مثال برای INT که یک مقدار عددی است خاصیت AUTO_INCREMENT به معنی افزایش خودکار کاربرد دارد و افزایش خودکار یعنی با هر بار INSERT اطلاعات در جدول، یک مقدار به ستون مورد نظر (معمولا id) به صورت خودکار اضافه خواهد شد (شمارش پیش فرض از 1، 2، 3 و...) و نیازی به درج این مقدار به صورت دستی نیست، همچنین NOT NULL یعنی مقدار پیش فرض ستون ها NULL نیست و در صورتی که هنگام INSERT اطلاعات برای آن ستون مقداری در نظر نگیریم، مقدار خالی (به جای عبارت NULL) درج خواهد شد.

ذخیره مقادیر با دستور INSERT INTO در دیتابیس


پس از ساختن جدول و ستون، اکنون می خواهیم جهت نمونه نام سه کتاب فرضی آموزش HTML، آموزش PHP و آموزش MySQL را به لیست خود اضافه کنیم، بدین منظور از کدی مشابه مثال زیر استفاده می کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $query = mysqli_query($conn, $sql);
    
    //ساخت جدول و ستون ها
    $sql = "CREATE TABLE books(
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    book VARCHAR(255),
    level VARCHAR(255))
    ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci";
    $query = mysqli_query($conn, $sql);
    
    if(!$query) {
        echo "Creating Table books: Error! " . mysqli_error($conn) . '<br>';
    } else {
        echo "Creating Table books: OK!<br>";
        
        //ذخیره نمونه اطلاعات در جدول
        $sql = "INSERT INTO books(book, level) VALUES('آموزش HTML', 'مقدماتی')";
        $query = mysqli_query($conn, $sql);
        
         $sql = "INSERT INTO books(book, level) VALUES('آموزش PHP', 'مقدماتی')";
        $query = mysqli_query($conn, $sql);
        
        $sql = "INSERT INTO books(book, level) VALUES('آموزش MySQL', 'پیشرفته')";
        $query = mysqli_query($conn, $sql);
           
        if(!$query) {
            echo "Inserting Into Table books: Error! " . mysqli_error($conn);
        } else {
            echo "Inserting Into Table books: OK!";
        }
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . $conn->errno() . ' - ' . $conn->error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $conn->query($sql);
    
    //ساخت جدول و ستون ها
    $sql = "CREATE TABLE books(
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    book VARCHAR(255),
    level VARCHAR(255))
    ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci";
    $conn->query($sql);
    if(!$conn) {
        echo "Creating Table tblname: Error! " . $conn->error();
    } else {
        echo "Creating Table tblname: OK!<br>";
        
        //ذخیره نمونه اطلاعات در جدول
        $sql = "INSERT INTO books(book, level) VALUES('آموزش HTML', 'مقدماتی')";
        $conn->query($sql);
        
        $sql = "INSERT INTO books(book, level) VALUES('آموزش PHP', 'مقدماتی')";
        $conn->query($sql);
        
        $sql = "INSERT INTO books(book, level) VALUES('آموزش MySQL', 'پیشرفته')";
        $conn->query($sql);
           
        if(!$conn) {
            echo "Inserting Into Table books: Error! " . $conn->error();
        } else {
            echo "Inserting Into Table books: OK!";
        }        
    }
}
//پایان اتصال
$conn->close();
?>
توضیح:
- چنانچه پیش از این جدول books را ساخته باشیم با اجرای پرس و جوی بالا خطای
Creating Table books: Error! Table 'books' already exists
را دریافت خواهیم کرد، دلیل این خطا وجود جدول هم نام و تلاش برای ایجاد مجدد آن است، برای رفع این مشکل از طریق برنامه phpMyAdmin که معمولا در سرور مجازی با درج آدرس
http://localhost/phpmyadmin
در دسترس است، جدول موجود را Drop می کنیم (اصطلاح Drop در پایگاه داده معادل حذف و Delete است).
- هر دستور INSERT INTO مقادیر را در یک ردیف از ستون های تعیین شده ذخیره می کند، در این نمونه کد مقادیر به صورت مستقیم درج شده اند و از نظر امنیتی بررسی خاصی روی آنها صورت نگرفته است، در برنامه های کاربردی لازم است که هر نوع ورودی استفاده شده در پرس و جوهای دیتابیس قبل از هرچیز ایمن سازی شوند تا از نفوذ و خرابکاری احتمالی در پایگاه داده جلوگیری شود (در ادامه نکاتی که جهت حفظ امنیت دیتابیس باید رعایت کنیم را بررسی خواهیم کرد).
- در مواردی که اطلاعات به صورت مقادیر چندگانه و آرایه ای هستند بهتر است جهت مختصر نویسی و کدنویسی بهینه دستور INSERT را در حلقه ی while یا for قرار دهیم، در مثال بالا جهت جلوگیری از پیچیده شدن مبحث این کار صورت نگرفته است اما در برنامه نویسی حرفه ای تا حد امکان باید سعی کنیم مختصر و مفید کدنویسی کنیم!
- جهت سازگاری کامل جداول پایگاه داده با حروف زبان فارسی لازم است که علاوه بر تعیین utf8 به عنوان DEFAULT CHARACTER SET و utf8_persian_ci به عنوان COLLATE پیش فرض، پرس جوی زیر را هم پس از اتصال به دیتابیس اجرا کنیم:
SET NAMES 'utf8'
- فراموش نکنیم که پس از پایان اجرای پرس و جوها بهتر است از تابع mysqli_close استفاده کنیم تا از آزادسازی منابع سرور مطمئن شویم.

ایمن سازی مقادیر ورودی به دیتابیس در اکستنشن MySQLi


یکی از نکات کلیدی که برنامه نویسان وب در هنگام کار با سیستم های مدیریت پایگاه داده باید حتما به آن توجه داشته باشند حفظ امنیت کدها و جلوگیری از نفوذ به دیتابیس است، از جمله روش های متداول هکرها حملات موسوم به SQL Injection یا تزریق و اضافه کردن دستورات به مقادیری است که به عنوان ورودی از سمت کاربر دریافت و در پرس و جوهای سرور جایگزین می شوند، با توجه به مقدماتی بودن سطح این سری از آموزش ها از توضیح چگونگی این حملات خودداری می کنیم و در ادامه صرفا با نحوه مقابله با آنها در اکستنشن MySQLi آشنا خواهیم شد.
نخستین گام در جهت حفظ امنیت دیتابیس عدم درج مستقیم هرگونه مقادیری است که از سمت کاربر دریافت می شود، برای این منظور در روش برنامه نویسی رویه ای (Procedural) از تابع mysqli_real_escape_string و در برنامه نویسی شی گرا (Object-oriented) از Prepared Statement و Bind Param استفاده می کنیم.

ایمن سازی پارامترها با تابع mysqli_real_escape_string


یکی از روش های متداول ایمن سازی پارامترها در برنامه نویسی رویه ای (Procedural) استفاده از تابع mysqli_real_escape_string است، با این تابع می توانیم مقادیر ورودی از سمت کاربر را قبل از استفاده در پرس و جوی دیتابیس به لحاظ وجود کاراکترهای زیر ایمن سازی کنیم:
NUL (ASCII 0) 
\n
\r
\
'
"
Control-Z
این دسته از کاراکترها نباید به عنوان ورودی خام و به صورت پارامتر مستقیم در پرس و جوها استفاده شوند، به طور مثال اگر دستور INSERT در پرس و جوی ما به شکل زیر باشد:
//ذخیره نمونه اطلاعات در جدول
$book = 'PHP';
$level = 'pro';
$sql = "INSERT INTO books(book, level) VALUES('$book', '$level')";
و به فرض هکر مقدار متغیر level را از فرمی در صفحه HTML به این صورت ارسال کند:
$level = 'pro\'';
پرس و جویی نهایی به شکل زیر (با کاراکتر ' اضافه) خواهد بود:
INSERT INTO books(book, level) VALUES('PHP', 'pro'')
کمترین اتفاقی که در این حالت ممکن است رخ دهد از کار افتادن برنامه و دریافت خطای زیر است:
Inserting Into Table books: Error! You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''pro'')' at line 1
بروز خطا این پیام را به هکر می دهد که ایمن سازی پارامترها در پرس و جوهای دیتابیس به درستی صورت نگرفته و کدها قابل نفوذ هستند، به همین جهت برای در امان بودن از این نوع خطرات باید قبل از استفاده از پارامترها در پرس و جو آنها را از تابع mysqli_real_escape_string عبور دهیم:
//ذخیره نمونه اطلاعات در جدول
$book = mysqli_real_escape_string($conn, 'PHP');
$level = mysqli_real_escape_string($conn, 'pro\'');
$sql = "INSERT INTO books(book, level) VALUES('$book', '$level')";
این تابع دو آرگیومنت دارد، آرگیومنت اول متغیر (آبجکت) اتصال است و آرگیومنت دوم مقادیری است که می خواهیم به عنوان پارامتر در پرس و جو جایگزین کنیم، برای آشنایی بیشتر با این تابع و دیدن نمونه مثال ها می توانیم به آدرس زیر در سایت php.net رجوع کنیم.
php.net/manual/en/mysqli.real-escape-string.php

ایمن سازی پارامترها با Prepared Statement و Bind Param


 در برنامه نویسی شی گرا (Object-oriented) علاوه بر متد mysqli_real_escape_string روش توصیه شده دیگری برای ایمن سازی پارامترها تحت عنوان Prepared Statement وجود دارد، در شیوه Prepared Statement ابتدا پرس و جو بدون ارسال پارامترهای ورودی به دیتابیس ارسال می شود (به جای پارامترها علامت ? درج می کنیم) و سپس مقادیر پارامترهای مورد نظر به صورت Bind Param به دیتابیس ارسال شده و در نهایت پرس و جوی نهایی تکمیل و اجرا می شود، با این شیوه بخش دستورات از بخش مقادیر جدا شده و بدین نحو می توانیم حملات SQL Injection را خنثی کنیم، در مثال زیر نمونه کد شی گرائی که در آموزش بررسی کردیم را در قسمت دستور INSERT به شکل زیر ویرایش می کنیم:
//ذخیره نمونه اطلاعات در جدول
$book = 'PHP';
$level = 'pro';
$sql = "INSERT INTO books(book, level) VALUES(?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $book, $level);
$stmt->execute();
همان طور که مشخص است به جای متد query از سه متد prepare، bind_param و execute استفاده کرده ایم، در متد prepare دستور پرس و جو بدون ارسال پارامترها درج شده است (در قسمت VALUES به جای هر پارامتر یک علامت ? جایگزین شده است)، در متد bind_param در آرگیومنت اول به ازای نوع داده (Data Type) هر پارامتر یک حرف s قرار داده ایم، s به معنی String (رشته) است، در اکستنشن MySQLi در کل چهار نوع داده به شرح زیر در قسمت Bind قابل تعریف است:
i - Integer
s - String
d - Double
b - Blob
از این چهار نوع معمولا i به معنی Integer (عدد) و s به معنی String (رشته) بیشترین کاربرد را در پرس و جوها دارند.
در نهایت با فراخوانی متد execute پرس و جو به نحو کامل اجرا شده و دستور INSERT اعمال می شود.
نکته: در برنامه های کاربردی معمولا مقادیر ورودی با متدهای GET یا POST از سمت کاربر دریافت شده و سپس به متغیرها نسبت داده می شوند، به طور مثال:
$book = $_POST['book'];
$level = $_POST['level'];
در صورت عدم آشنایی با نحوه دریافت پارامترها از سمت کاربر می توانیم به مبحث فرم های وب در HTML و متد GET و POST در PHP مراجعه کنیم.
مطالب گفته شده در این آموزش جهت شروع آشنایی با بحث ایمن سازی پارامترها در اکستنشن MySQLi کفایت می کند، در آموزش های پیش رو با توضیحات و مثال های بیشتری از مبحث ایمن سازی پارامترها در برنامه نویسی PHP و MySQL آشنا خواهیم شد.
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» آموزش MySQL، سیستم مدیریت پایگاه داده
» به روز رسانی ردیف ها در MySQL با UPDATE
» استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
» ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
» انتخاب ردیف ها با دستور SELECT در MySQL
commentنظرات (۴۸ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: ناصر
زمان: ۲۱:۲۲:۰۸ - تاریخ: ۱۳۹۱/۱۱/۱۸
دستتون درد نکنه وب سایتتون عالیه یعنی خیلی عالیه .
خسته نباشید.
نویسنده: مهدی
زمان: ۱۹:۵۰:۴۴ - تاریخ: ۱۳۹۲/۰۳/۱۶
با سلام
چطور میشه یه لینکی باشه (مثل عکس یا نوشته مانند "افزایش") که وقتی روش کلیک میکنیم از دیتابیس مانند
mysqli_query($conn, "select id from user where name='mahdi'")
آی دی رو که یه عدد هست بگیره علاوه یک بکنه بعد همونجا دخیره کنه باز همون صفحه رو بیاره؟
پاسخ: 
سلام
اینکه لینک شما چه چیزی را فراخوانی یا نمایش دهد بستگی به مقصد آن و برنامه شما دارد، اما قسمت دوم سوال یعنی افزودن یک مقدار به یک ردیف در یک پرس و جو را می توان به روش نمونه زیر انجام داد:
mysqli_query($conn, "UPDATE user SET id = id + 1 WHERE name = 'mahdi' LIMIT 1");
البته باید به دو مورد توجه داشته باشید:
- ستون مورد نظر (در اینجا id) را ترجیحا از نوع INT و بدون قابلیت افزایش خودکار (AUTO INCREMENT) ایجاد کنید.
- مقادیر ستون نباید NULL باشد، حداقل مقادیر صفر را به عنوان پیش فرض تنظیم کنید.
نویسنده: آنا
زمان: ۰۱:۱۵:۲۹ - تاریخ: ۱۳۹۲/۰۴/۰۸
سلام
یه search box دارم که وقتی یه اسمی سرچ می کنم میره از دیتابیس ردیفی که مربوط به اون هست رو میاره.
حالا می خوام همزمان از سرچ اولی که انجام شده مقادیری که برابر با id در دیتابیس هست رو هم بیاره.
مثلا آنا رو سرچ کردم، میاره
ردیف - نام - نام مرتبط 1 - نام مرتبط 2
3 ----- آنا ------- 1 -------------- 5
حالا اول برود و 1=id را نشان دهد چون در نام مرتبط 1 ، مقدار 1 قرار دارد و 5=id را نشان دهد چون در نام مرتبط 2 ، مقدار 5 قرار دارد.
لطفا راهنمایی کنید.
من فقط برای قسمت اول دستور این را نوشته ام :
select * from t1 where name='$nameSearch'
اما برای قسمت دوم نمی دانم.
با تشکر
پاسخ: 
هرچند پاسخ دقیق به سوال شما نیازمند تست های بیشتر و مشاهده ساختار جداول دیتابیس است، اما با توجه به اطلاعات مطرح شده، الگوی نمونه زیر می تواند این کار را انجام دهد.
<?php
$query_1 = mysqli_query($conn, "select * from t1 where name='$nameSearch'")
or die(mysqli_error($conn));
while($row = mysqli_fetch_array($conn, $query_1)){
$id_1 = $row['col_name_1'];
$id_2 = $row['col_name_2'];

$query_2 = mysqli_query($conn, "select * from t1 where id='$id_1' or id='$id_2'")
or die(mysql_error());
while($row = mysqli_fetch_array($conn, $query_2)){
//استخراج اطلاعات
$id = $row['id'];
//تفکیک اطلاعات در حلقه while
if($id == $id_1){
//نام مرتبط 1
}
elseif($id == $id_2){
//نام مرتبط 2
}
}
}
?>
نویسنده: امیرحسین
زمان: ۱۶:۱۴:۳۷ - تاریخ: ۱۳۹۲/۰۶/۱۰
سلام عزیز خسته نباشی
یه سوال در مورد پایگاه داده
میخوام یک اینپوت درست کنم که توش هر چی تایپ کنی از پایگاه داده تو جدول ها تغییر کنه
مثلا دیتابیس من patoghba_aaaa هست
داخلش یه جدولی به نام test هست
داخل جدول test یه ستون به نام shahr هست
میخوام درون اینپوت هرچی وارد کنم تو ستون شهر ثبت بشه در پایگاه داده این کار چگونه هست اینم کد هام ولی درست عمل نکرد لطفا تصحیح کنید بی صبرانه منتظر جوابتون هستم
<form method="post">
<p><input class="btn" type="submit" value="پاک کردن تمامی مهمان های چت روم" name="login_1" /></p>
<input type="submit" value="submit" />
</form>
<?php
@ $con = mysqli_connect("localhost", "patoghba_aaaa", "***********", "patoghba_aaaa") or die('ارتباط با پایگاه داده برقرار نشد');
if(isset($_POST['login_1'])){mysqli_query($con, "edit from test where shahr");}
mysqli_close($con);
?>
پاسخ: 
کدهای شما کامل نیست، باید از INSERT در MySQL برای ورود اطلاعات و UPDATE برای به روزرسانی آنها استفاده کنید، مثال:
<form method="post">
<p><input class="btn" type="text" value="پاک کردن تمامی مهمان های چت روم" name="login_1" /></p>
<input type="submit" value="submit" />
</form>
<?php
@$con = mysqli_connect("localhost", "patoghba_aaaa", "***********", "patoghba_aaaa")
or die('ارتباط با پایگاه داده برقرار نشد');
mysqli_select_db($con, "patoghba_aaaa");
if(isset($_POST['login_1'])){
$login_1 = $_POST['login_1'];
mysqli_query($con, "INSERT INTO test VALUES('$login_1')");
}
mysqli_close($con);
?>
نکته: چند ایراد دیگر نیز در کدهای شما وجود دارد که با مقایسه دو کد متوجه خواهید شد.
نویسنده: امیرحسین
زمان: ۲۲:۵۴:۵۶ - تاریخ: ۱۳۹۲/۰۶/۱۰
سلام
ببخشید من چیزی نفهمیدم اگه ممکنه این صفحه رو ببینید
http://patoghbaz.ir/top.php
میخوام این امکان رو بهش اضافه کنم
دو تا input با یه دکمه سابمیت و درون تگ form باشه
در فایل اینپوت اولی ای دی کاربر رو وارد کنی بعد در کادر دومی امتیاز رو وقتی دکمه رو زدی امتیازش ویرایش بشه
این کار رو از تو هاست پی اچ پی مای ادمین میشه انجام داد ولی میخوام با برنامه نویسیش کار راحت تر بشه
تو پی اچ پی مای ادمین
یه table هست به نام db1_etchat_user
درون اون یه ستون هست به نام user_id که کد کاربری کاربر او نوشته و یه ستون دیگه هم هست به نام emtiyaz که امتیازای کاربرها رو ویرایش می کنی میخوام این امکان رو با کد نویسی کار رو راحت تر کنید که نیازی به هاست نباشه دیگه از همونجا داخل دو تا کادرها یکی ای دی رو وارد کردی و امتیاز و امتیاز کاربر به اونی که وارد کردی تغییر کنه برای وارد کردن ای دی واسه ی شناختن تغییر امتیاز کدوم کاربر کاربرد داشته باشه لطفا منتظرم
پاسخ: 
دوست گرامی، باید تا حدودی خودتان با مباحث دیتابیس و PHP آشنا باشید تا ما هم در قسمتی کمکتان کنیم، اگر از پیش این آشنایی را داشتید، راهنمایی قبلی ما (استفاده از UPDATE) می توانست مشکلتان را حل کند، لطفا توجه داشته باشید که فرصت ما به اندازه ای نیست که برای همه کاربران کدنویسی کنیم و موارد مقدماتی را توضیح دهیم، به هر صورت، می توانید برای به روزرسانی ردیف ها از نمونه پرس و جوی زیر استفاده کنید:
mysqli_query($con, "UPDATE db1_etchat_user SET emtiyaz = '$new_point' WHERE user_id = '$user_id' LIMIT 1");
مشخص است که امتیاز جدید باید از فیلد input دریافت و به متغیر فرضی new_point نسب داده شود، همچنین شماره id هر کاربر باید به نحوی به کد ارسال شود (به فرض از طریق یک input از نوع hidden) و سپس به متغیر user_id نسبت داده شده و در پرس و جو استفاده شود.
نویسنده: امیرحسین
زمان: ۱۴:۳۱:۲۵ - تاریخ: ۱۳۹۲/۰۶/۱۱
ممنون از لطفی که نسبت به من دارید همینطور که گفتید من عمل کردم نتیجه ای نداد
<form method="post">
<p><input type="text" name="user_id" />آی دی کاربر مورد نظر</p>
<p><input type="text" name="new_point" />امتیاز کاربر</p>
<p><input type="submit" value="ویرایش کن" /></p>
</form>
<?php
$user_id = $_POST['user_id'];
$new_point = $_POST['new_point'];
@ $con = mysqli_connect("localhost", "patoghba_room7", "**********", "patoghba_room7") or die('ارتباط با پایگاه داده برقرار نشد');
@ mysqli_query($con, "UPDATE db1_etchat_user SET emtiyaz = '$new_point' WHERE etchat_user_id = '$user_id' LIMIT 1");
mysqli_close($con);
?>
پاسخ: 
باید ببینید عیب کار از کجا است، به طور مثال در قسمت die می توانید خطای رخ داده را چاپ کنید:
$query = mysqli_query($con, "UPDATE db1_etchat_user SET emtiyaz = '$new_point' WHERE etchat_user_id = '$user_id' LIMIT 1") or die(mysqli_error($con, $query));
این موارد جزء نکات مقدماتی هستند که باید از قبل آشنا باشید، در غیر این صورت در هر مرحله از کار با مشکل جدیدی روبرو می شوید.
نویسنده: مصطفی
زمان: ۱۷:۴۳:۲۵ - تاریخ: ۱۳۹۲/۰۸/۱۴
چطور میشه مقدار یه فیلد رو از پایگاه داده بگیریم و در php چاپ کنیم و یه سوال دیگه ایا میشه با یک ارتباط چندین درخواست رو به پایگاه بفرستیم؟
پاسخ: 
در مورد سوال اول: آموزش فعلی و مطالب منتشر شده در ادامه آن در همین خصوص است!
در مورد سوال دوم: بله، این کاری متداول محسوب می شود.
نویسنده: مصطفی
زمان: ۱۲:۱۰:۱۱ - تاریخ: ۱۳۹۲/۰۸/۲۰
میشه درباره ی تابع mysql_fetch_feild توضیح بدید که چطور میشه مقدار یه فیلد رو باهاش به php بفرستی. ممنون
پاسخ: 
این تابع برای برگرداندن مشخصات (name، table، max_length و...) ستون ها است، برای دریافت مقادیر فیلدها در PHP باید از توابعی مانند mysqli_fetch_array استفاده کنید.
نویسنده: مصطفی
زمان: ۱۴:۲۳:۵۱ - تاریخ: ۱۳۹۲/۰۸/۲۰
من مقادیر فیلدها رو با mysql_fetch_object می گیرم ایا اشکالی در این روش هست؟ و اینکه من مقدار یک فیلد رو میخوام نه یه سطر اگه از ارایه استفاده کنم کل سطر بر می گرده
پاسخ: 
استفاده از شیوه object یا array بستگی به سلیقه شما و نوع برنامه نویسی دارد، در عمل نتیجه نهایی خیلی متفاوت نیست، برای محدود کردن نتایج به یک ستون، باید در قسمت SELECT FROM نام ستون مورد نظر را قرار دهید (جداسازی با ,)، مثال:
SELECT id, name FROM tbl
نویسنده: hadi
زمان: ۱۰:۲۳:۳۲ - تاریخ: ۱۳۹۲/۱۰/۱۰
سلام.
من میخوام کار زیر انجام بشه منتهی ارور میده.
DELETE FROM `db`.`posts` WHERE `posts`.`user` = jok limit 3;
دلیلشم به خاطر اینه که user به صورت text هست. وقتی از این کوئری برای id که ورودی اون int هست استفاده میشه به سادگی پاک میکنه.
لطفا راهنمایی کنید من اطلاعات زیادی از کوئری ندارم
پاسخ: 
در صورتی که خطا از مورد دیگری نباشد، با تغییر عبارت jok به صورت 'jok' مشکل رفع خواهد شد.
نویسنده: سارا
زمان: ۱۱:۲۹:۱۸ - تاریخ: ۱۳۹۲/۱۱/۱۷
سلام
من اطلاعات را از دیتابیس دریافت می کنم ولی به صورت کد شده هستند باید چی کار کنم که کد شده نباشه ؟ و چطوری اطلاعات را در قسمت body نشان بدهم ، چون اطلاعات را در اول صفحه یعنی قبل از header نشان می دهد؟ با تشکر از مطالب خوبتون
پاسخ: 
در مورد کد شده بودن اطلاعات، نیاز به بررسی بیشتر دارد، احتمالا به درستی از یونیکد UTF-8 در هنگام ذخیره یا بازسازی اطلاعات و یا ساخت جداول و ستون های دیتابیس و یا حتی ارتباط با دیتابیس استفاده نکرده اید، اما در مورد نحوه خروجی گرفتن، این یک مبحث مقدماتی ساده است، اما باید به آموزش های مقدماتی PHP مراجعه کنید (توضیح خاصی نمی توان در این قسمت ارائه کرد، باید به صورت کلی این موارد را از ابتدا مطالعه کنید).
نویسنده: مجید
زمان: ۱۱:۴۰:۵۲ - تاریخ: ۱۳۹۲/۱۱/۲۵
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table' at line 1

مثال شما را اجرا کردم این خطا میده
پاسخ: 
در هنگام تست باید اطلاعات اتصال را تعریف و به جای table عنوان جدول مورد نظرتان را قرار دهید، در صورتی که با انجام این کار باز خطا دریافت کردید، لطفا یک نمونه از کدهایتان را درج کنید تا بررسی کنیم.
نویسنده: مصطفی
زمان: ۱۹:۰۳:۲۱ - تاریخ: ۱۳۹۳/۰۲/۰۱
سلام ببخشید اگه درخواستی که ما به پایگاه داده میفرستیم چندین سطر رو برگردونه چطور باید این سطرها رو echo کنیم
پاسخ: 
لطفا آموزش بعدی از این قسمت را مطالعه کنید، با استفاده از حلقه while می توان در نتایج دریافتی که به صورت آرایه است به اصطلاح دور زد.
نویسنده: ehsan
زمان: ۱۸:۵۲:۳۰ - تاریخ: ۱۳۹۳/۰۲/۱۰
عالییییییی بود
نویسنده: مصطفی
زمان: ۱۷:۵۶:۱۷ - تاریخ: ۱۳۹۳/۰۲/۳۰
سلام من میخواستم فیلد پیام درست کنم که هم بشه توش فارسی تایپ کرد هم انگلیسی فرمت فیلد رو باید چی بزارم؟ یه سوال دیگه اینکه میخوام برای این فیلدها از عبارات با قائده استفاده کنم تا بعضی کلمات سانسور بشه ایا بهتره با php این کار رو بکنم یا با خود mysql؟
با تشکر
پاسخ: 
نوع فیلد دیتابیس بستگی به تعداد کاراکتری دارد که باید در آن وارد شود، برای پیام معمولا نوع TEXT کافی خواهد بود، اما برای پشتیبانی فارسی باید از Collation utf8_persian_ci استفاده کنید (در این مورد در وب جستجو کنید)، در مورد استفاده از عبارات با قاعده، همان طور که در سوال دیگر شما (در مطلبی دیگر) گفتیم، بهتر است این نوع کارها در کدنویسی PHP انجام شوند.
paged صفحه 1 از 4
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




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

form behzad
در:
مرسی خوب بود
۱۲:۱۵:۱۴ ۱۳۹۸/۰۶/۰۲

form zeynab
در:
سلام یه سوال دارم برای اینکه بتونم رنگ رو ذخیره کنم تو جدولم در قسمت پایگاه داده چیکار باید کنم ؟؟ من...
۱۷:۰۶:۳۵ ۱۳۹۸/۰۵/۲۸

form علی
در:
سلام من میخوام تو صفحه html همچین طرحی رو بندازم میشه راهنماییم کنید (به صورت جداگانه یعنی هر کدوم توی یه صفحه) ***** ...
۱۶:۴۶:۳۶ ۱۳۹۸/۰۵/۲۷

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

form bahman
در:
عالی
۲۲:۱۵:۵۰ ۱۳۹۸/۰۵/۲۳

form Abbas rahmati
در:
سلام همه چی توی قسمت اینکه اس اس ال چطور کار میکنه درست بود فقط اخرشو درست نگفتید
۱۴:۱۶:۴۰ ۱۳۹۸/۰۵/۲۳

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

form احسایدر
در:
شما از چه روشی برای لینک دادن به قسمت‌های نوشته استفاده کردید که با کلیک کردن چیزی به آدرس نوشته اضافه نمیشه؟
۱۸:۵۷:۰۵ ۱۳۹۸/۰۵/۲۲

form Mahyar
در:
سلام خسته نباشید اگه بخواهیم که یک pop up با کلیک به خارج از کادر pop up یا کلیک به روی دکمه esc...
۱۱:۴۸:۵۶ ۱۳۹۸/۰۵/۱۹

form بینهایت
در:
سلام. میخواستم بپرسم اگر به اینترنت جایی وصل باشیم کسی که ادرس IP رو میدونه ایا امکان داره از طریق همین اتصال به سیستم ما...
۱۰:۲۶:۱۵ ۱۳۹۸/۰۵/۱۵

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

form مجتبی
در:
هر وقت این سایت رو می بینم سریع ازش رد میشم حالم از این سایت بهم میخوره هیچ طراحی جذابی نداره مطالبش هم بدرد نخوره
۰۹:۵۳:۴۹ ۱۳۹۸/۰۵/۱۴

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

form امیر
در:
مرسی مقاله بسیار عالی بود . فوق العاده این.
۱۰:۵۰:۳۵ ۱۳۹۸/۰۵/۰۹
49 . 1 %
در حال برنامه نویسی و آماده سازی نسخه جدید «وبگو» هستیم، در این نسخه قابلیت ها و ظاهر سایت متفاوت و کاملتر خواهد بود، این فرآیند زمانبر است و روند پیشرفت پروژه در این قسمت به صورت درصدی نمایش و به تناوب به روزرسانی می شود. Webgoo.ir