i
در حال برنامه نویسی و آماده سازی نسخه جدید «وبگو» هستیم، در این نسخه قابلیت ها و ظاهر سایت به کلی متفاوت و کاملتر خواهد بود، این فرآیند زمانبر و از مدتی پیش شروع شده و همچنان ادامه دارد، روند پیشرفت پروژه در این قسمت به صورت درصدی مشخص است و به تناوب به روزرسانی می شود.
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشند که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
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");
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 tblname: Error! " . $conn->error();
    } else {
        echo "Creating Table tblname: 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");
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 استفاده کنیم تا از آزادسازی منابع سرور مطمئن شویم.

نکته مهم: لطفا توجه داشته باشید ادامه سری آموزش های حاضر قدیمی و در حال ویرایش است و به مرور از MySQL به MySQLi به روز خواهد شد، برای برنامه های جدید بهتر است از MySQLi یا PDO استفاده کنیم.

sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» استفاده از ORDER و GROUP در MySQL
» توابع تجمعی (Aggregate Functions) در MySQL
» آموزش MySQL، سیستم مدیریت پایگاه داده
» ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
» حذف مقادیر از MySQL با دستور DELETE
commentنظرات (۶۵ یادداشت برای این مطلب ارسال شده است)
نویسنده: پگاه
زمان: ۱۶:۵۰:۳۳ - تاریخ: ۱۳۹۱/۰۶/۰۶
با سلام و تشکر از توضیحات مفیدتان
البته سوال من به نحوه ذخیره سازی در php برمی گرده اما در قسمت php چنین تاپیکی پیدا نکردم نزدیکترین تاپیک بهش همین بود
وقتی می خواهیم دکمه ذخیره سازی رو بسازیم باید از نوع submit بسازیم یا button؟
اگر از نوع submit یسازیم باید حتما فیلدها داخل form باشن و دیتاها به یک صفحه دیگه فرستاده بشن و دستور insert رو در اون صفحه بنویسیم؟
یا میشه فیلدها داخل form نباشن ودستور insert رو در همون صفحه بنویسیم؟و دراین صورت دکمه save نمی تونه از نوع سابمیت باشه ؟ و باید حتما button باشه؟
با تشکر منتظر پاسختون هستم
پاسخ: 
سلام
برای ذخیره اطلاعات یک فرم، شما می توانید فایل مقصد را هر طور که تمایل دارید در قسمت action فرم، آدرس دهی کنید، چه همان فایل و چه فایل دیگری، منتها فایل مقصد باید برای پردازش اطلاعات ارسالی آماده شده باشد، یعنی متغیرها را دریافت، اعتبار سنجی، ایمن سازی و سپس در mysql ذخیره کند.
برای ارسال فرم، دکمه submit روش استانداردتری است، چون بدون نیاز به جاوا اسکریپت کار می کند، اما button باید حتما با جاوا اسکریپت باشد تا عمل کند، به طور مثال:
<form action="index.php" method="post">
<input type="button" value="ارسال" onclick="submit();" />
<input type="submit" value="ارسال" />
</form>
هر دوی این دکمه ها باید داخل فرم باشند و فرقی نمی کند اطلاعات فرم به چه فایلی ارسال می شود، مهم آدرس قسمت action فرم است.
نویسنده: مهدی کاظم پور
زمان: ۲۱:۱۶:۱۶ - تاریخ: ۱۳۹۱/۰۷/۲۵
با سلام
من یک جدول جدید در دیتام ساختم و ردیف هم اضافه کردم حال اطلاعات به این جدول جدید ارسال نمیشه اما وقتی نام جدولم را عوض میکنم با توجه به یکسان بودن ردیف ها اطلاعات ذخیره میشه علت چیست خیلی خیلی فوری ممنون میشم کمکم کنید.
پاسخ: 
سلام
لطفا پرسش های خود را دقیق تر و همراه جزئیات یا نمونه کد مطرح کنید، صرف بیان مشکل به این شکل کافی نیست، در حد توضیحی که دادید پاسخ این است: نام جدول خود را با نامی که در هنگام پرس و جو در query قرار می دهید تطابق دهید، در واقع php به طور خودکار کاری انجام نمی دهد مگر اینکه دستور آن را نوشته باشید، پس باید ببینید دستور وارد کردن اطلاعات در چه جدولی را نوشته اید.
نویسنده: محمد مهدی احمدی
زمان: ۲۰:۲۲:۲۵ - تاریخ: ۱۳۹۲/۰۲/۲۵
سلام دوست عزیز
من از طریق اموزش های شما یک صفحه تماس با ما درست کردم
و وقتی اطلاعات ارسال میشه برای صحت برخی موضوعات مثل وارد کردن نام پیامی رو میخوام چاپ کنه!
اگر از دستور die استفاده کنم این دستور اجازه نمیده سایر دستورات سایت اجرا بشه و یعنی نصف سایت دیگه لود نمیشه وقتی به اون شرط میرسه
اگر از echo استفاده کنم همه echo های شرط ها رو اجرا میکنه حتی اگه اون شرط اصلا انجام نشده باشه
و از همه بد تر اینه اگر مقادیر در همون صفحه بخواد اضافه بشه وقتی صفحه باز میشه متون echo و یا die اجرا میشه!
لطفا راهنمایی کنید
<table>
<form action="" method="post">
<tr><td>نام : </td><td> <input name="name" type="text" placeholder="اختیاری" size=40 /> </td></tr><br>
<tr><td>ایمیل : *</td><td> <input name="email" type="text" placeholder="اجباری" size=40 /></td></tr><br>
<tr><td>وب : *</td><td> <input name="web" type="text" placeholder="اجباری" size=40 /></td></tr><br>
<tr><td>متن پیام : *</td>
<td colspan=2 align=center> <textarea name="context" placeholder="اجباری" type="textarea" rows=8 cols=40 /></textarea></td></tr><br><br>
<tr><td><input name="send" type="submit" value="ارسال" /></td></tr>
<B><font face="tahoma" color="#ff0000">
<?php
$name=$_POST['name'];
$mail=$_POST['email'];
$web=$_POST['web'];
$context=$_POST['context'];

if(!$context)
{

die('اخطار : متن را وارد کنید !');

}
if(!$web)
{

die('اخطار : آدرس وب خود را وارد کنید !');

}
if(!$mail)
{

die('اخطار : ایمیل خود را وارد کنید !');
}
if(!preg_match("/[a-zA-Z0-9._-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z\.]+/",$mail))
{

die('اخطار : ایمیل معتبر نیست !');

}

$query= mysql_query ("insert into contact (name,email,web,context)
values('$name','$mail','$web','$context');
");

if(mysql_affected_rows()>0)
{

die ('.:: پیام شما با موفقیت برای مدیر سایت ارسال شد ، به زودی پاسخی دریافت خواهید کرد ::.');

}
else
{

die('اخطار : به علت نا معلومی پیام ارسال نشد ، لطفا مجدد تلاش کنید !!!');

}
?>
</B></font>
</form>
</table>
پاسخ: 
سلام
به نظر باید بخش استفاده از if و else را در PHP یک بار مرور کنید! نحوه به کار بردن دستورات شرطی در کدهای شما صحیح نیست، ضمن اینکه برای بررسی خالی نبودن یک متغیر از علامت ! استفاده نمی شود، این علامت یک مقدار boolean یا همان TRUE FALSE را بررسی می کند، برای برررسی خالی نبودن از isset و empty استفاده کنید، مثال از نحوه استفاده درست دستورات شرطی:
$error_status = FALSE;
if(!isset($context) || empty($context)){
echo 'اخطار : متن را وارد کنید !';
$error_status = TRUE;
}
elseif($error_status == FALSE && (!isset($web) || empty($web))){
echo 'اخطار : آدرس وب خود را وارد کنید !';
}
از die زمانی استفاده می شود که یک امکان اصلی برنامه به دلیلی در دسترس نباشد یا از کار بیفتد.
نویسنده: محمد مهدی احمدی
زمان: ۰۳:۳۳:۳۶ - تاریخ: ۱۳۹۲/۰۲/۲۶
دوست عزیز این کدها عینا همون کدهایی که خودتون استفاده کردید فقط با کمی تغییر در فیلد ها و اضافه کردن فیلد ها شما سورس هاتون رو نگاه کردم دیدم بیشترش رو عوض کردین!
من که از خودم زبان پی اچ پی بلد نیستم از نحوه آموزش شما استفاده کردم این کدی هم که شما دادین نتونستم ازش استفاده کنم
من انتظار راهنمایی کاملتری داشتم
با تشکر
پاسخ: 
هر زبان برنامه نویسی قواعدی دارد که برای نوشتن برنامه ای کاربردی و قابل اجرا توسط سیستم، باید از آن پیروی کرد، آشنایی با این قواعد نیز مستلزم کار از مقدمات و تمرین و تکرار زیاد است، بدون آن و صرفا با الگوبرداری دلخواه نمی توان کدنویسی کرد، به طور مثال علامت ! با توجه به شرایط ممکن است معانی متفاوت داشته باشد، قدر مسلم در هیچ یک از کدهای سایت چنین اشتباه فاحشی صورت نگرفته و این گفته شما صحیح نیست!
برای بررسی بیشتر لطفا عنوان آموزش مورد نظر را ذکر کنید.
نویسنده: NegR
زمان: ۱۰:۰۲:۵۱ - تاریخ: ۱۳۹۲/۰۳/۰۴
سلام
من برای پروژه ی دانشگام دقیقا به همین صـورت کدها رو نوشتـم، موقع اجرا هـم هیـچ اروری نمیده اما تو سرورم هیـچی ثبت نمیـشه مشکلـم
چیـه یـنی؟ این هـم کـدم :
if(isset($_POST['submit']))
{
$titr = $_POST['titr'];
$date= $_POST['date'];
$detail=$_POST['detail'];
$khabargozari=$_POST['khabargozari'];
$cat=$_POST['cat'];
$sql="INSERT INTO news( titr, date, detail, khabargozari, cat) VALUES ('$titr,'$date','detail','khabargozari','cat')";
mysql_query($sql);
}
پاسخ: 
سلام
ممکن است مکشل از دو مورد باشد که باید بررسی کنید:
- در شرط if ارسال شدن فیلد submit با متد POST بررسی شده، معمولا از submit به صورت type استفاده می شود و type به سرور ارسال نمی شود! تنها مقادیر فیلدهایی به سرور ارسال می شوند که یک پارامتر value بپذیرند، لذا بررسی ست شدن این متغیر همیشه FALSE خواهد بود و کد داخل شرط هیچ گاه اجرا نمی شود.
- مورد دوم این است که در پرس وجو در قسمت VALUES باید برای مقادیر، متغیرها را با علامت $ در ابتدا درج کنید.
نویسنده: صادق
زمان: ۱۶:۵۳:۳۰ - تاریخ: ۱۳۹۲/۰۳/۱۶
سلام من از دستور insert برای وارد کردن اطلاعات از فرم به جدول استفاده کردم اما با این پیغام روبرو میشم به نظرتون مشکل از چیه؟
Column count doesn't match value count at row 1
تمام متغیرها و جدولم و دیتابیسم رو چک کردم و مشکلی ندیدم؟
پاسخ: 
سلام
بر طبق خطای دریافتی تعداد موارد قسمت اول (نام ستون ها) با تعداد موارد قسمت VALUES در پرس و جوی MySQL همخوانی ندارد، تعداد هر دو باید به یک اندازه باشد.
نویسنده: امیر
زمان: ۱۸:۳۷:۵۶ - تاریخ: ۱۳۹۲/۰۳/۲۵
با سلام
من میخوام یه قالب وبلاگ رو تو دیتابیس ذخیره کنه ولی نمیشه. چطور میشه این کار و کرد؟ بدون تبدیل به بیس 64؟
پاسخ: 
سلام
کد قالب وبلاگ یک رشته متنی است و در صورتی که به درستی ایمن سازی شود، به راحتی در دیتابیس قابل درج است، به نظر می رسد ار توابع مربوط به ایمن سازی داده ها پیش از ذخیره در دیتابیس استفاده نمی کنید؟ توابعی مانند:
mysql_real_escape_string();
نویسنده: امیر
زمان: ۲۰:۳۲:۰۶ - تاریخ: ۱۳۹۲/۰۳/۲۵
با تشکر از سایت خوبتان و خیلی تشکر
نویسنده: خاتمی
زمان: ۱۶:۳۹:۴۸ - تاریخ: ۱۳۹۲/۰۳/۲۸
سلام
چطوری میشه یه اطلاعاتی رو تو دیتابیس اینسرت کرد به صورتی که بعد از یه مدت مثلا یک هفته به صورت اتوماتیک حذف بشن؟
پاسخ: 
سلام
امکان مستقیم MySQL در این مورد trigger است که البته استفاده از آن چندان مرسوم نیست، اما به طور معمول اطلاعات ذخیره شده در دیتابیس باید یک ستون به نام تاریخ (و زمان) داشته باشند که بتوان موارد را با توجه به زمان فعلی انتخاب و سپس اطلاعات قدیمی را حذف کرد، در واقع اطلاعات به همراه یک تاریخ ثبت می شوند، سپس در کدهای PHP، دستور DELETE طوری نوشته می شود که با هر بار اجرای کد، ابتدا اطلاعات قدیمی را حذف کند، برای اجرای کد نیز می توانید از Cron job یا روش های دیگر (مانند اجرا توسط کاربر) استفاده کرد.
نویسنده: maryam
زمان: ۲۲:۴۳:۴۷ - تاریخ: ۱۳۹۲/۰۳/۲۹
سلام
یه سوال از خدمتتون داشتم
اگر لطف کنید راهنماییم کنید ممنون میشم
ببینید من یه فرم با php طراحی کردم که اطلاعاتش پس از سابمیت کردن کاربر, رو بانک سرور ذخیره میشه (از mysql استفاده کردم)
این کار با اتصال دائمی به سرور انجام میشه. حالا سوال من اینجاست که در صورت قطع شدن شبکه, کاربر میتونه همچنان به وارد کردن اطلاعات ادامه بده و اطلاعات رو جایی ذخیره کنه و بعد از اتصال به سرور اطلاعات به صورت خودکار در جدول اصلی انتقال داده بشن؟
پاسخ: 
سلام
چنین چیزی نیارمند یک سرور واسط یا وجود برنامه ای در سیستم کاربر است که به طور مثال مانند برنامه Outlook عمل کند، یعنی در صورت عدم برقراری ارتباط با سرور اصلی، اطلاعات را در خود نگهداری کرده و هر زمان اتصال مقدور بود، ارسال کند، باید برنامه نویسی زبان های دسکتاپ (مانند C++، Java و...) بلد باشید.
نویسنده: اکبر
زمان: ۰۰:۲۱:۴۴ - تاریخ: ۱۳۹۲/۰۴/۲۹
سلام و خسته نباشید
یه سوال در مورد ذخیره کردن اطلاعات دارم من در صفحه اول یکسری مقادیر که در دیتابیسم هستن رو همراه با چک باکس به کاربر نمایش میدم که کاربر
یکی رو تیک زده و به صفحه بعد رفته و مشخصات خودش مثل اسم و فامیل وارد می کنه و در جدول ذخیره میشن
حالا مشکل اینجاست که این اطلاعات در یک ردیف جدول ذخیره نمیشن
از تابع impload استفاده کردم ولی نشد
این کد صفحه اول
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<style>

</style>
</head>
<body>
<?php
$con=mysql_connect("localhost","root","usbw","azmoon");

mysql_select_db("azmoon",$con);
mysql_query('set names utf8');
?>
<form method="POST" action="index5.php">
<table border="5">
<?php

$sql="SELECT * FROM test where 1";
$t=mysql_query($sql);

while($row=mysql_fetch_assoc($t))
{
?>

<tr>
<td><input type="checkbox" name="idtest[]" value="<?php echo $row['idtest'];?>" > </td>
<td><?php echo $row["day"] ;?></td>
<td><?php echo $row["time"] ;?></td>
<td><?php echo $row["date"] ;?></td>
</tr>

<?php

}

?>
<tr>
<td><input type="submit" name="submit" value="submit" class="del"/></td>
</tr>
</form>
</table>
<?php

?>
</form>
</body>
</html>
و این کد صفحه دوم
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<style>

</style>
</head>
<body>

<?php
$con=mysql_connect("localhost","root","usbw","azmoon");

mysql_select_db("azmoon",$con);
mysql_query('set names utf8');

echo '<form method="POST" action="index5.php">';
echo '<tr>';

echo '<td> <input type="text" name="idb"> </td>';
echo ' <td><input type="text" name="name"></td>';
echo '<td><input type="text" name="tel"></td>';
echo '<td><input type="text" name="bime"></td>';
echo '<td><input type="hidden" name="idtest" value="'. implode("+",$_POST['idtest']).'"><td>';
echo '<td><input type="submit" name="submit" value="submit"/></td>';
echo '</tr>';
echo '</form>';

$a=$_POST['idb'];
$b=$_POST['name'];
$c=$_POST['tel'];
$d=$_POST['bime'];

$e=implode("+",$_POST['idtest']);

$www="insert into it(idb,name,tel,bime,idtest) VALUES ('".$a."','".$b."','".$c."','".$d."','".$e."')";

$rp=mysql_query($www);

mysql_close($con);

?>

</body>
</html>
پاسخ: 
سلام
کدنویسی شما دارای اشکال است، ابتدا در صفحه اول مقادیر فرم باید به صورت نمونه زیر باشد:
     <td><input type="checkbox" name="user_info[]" value="<?php echo $row['idtest'];?>" > </td>
<td><input type="checkbox" name="user_info[]" value="<?php echo $row["day"] ;?>" ></td>
<td><input type="checkbox" name="user_info[]" value="<?php echo $row["time"] ;?>" ></td>
<td><input type="checkbox" name="user_info[]" value="<?php echo $row["date"] ;?>" ></td>
سپس در صفحه دوم، اطلاعات به صورت آرایه از پارامتر فرضی user_info با متد POST دریافت می شوند:
$user_info = $_POST['user_info'];
چون این اطلاعات به شکل آرایه هستند، لذا باید مقادیر value کلیدها را استخراج کنیم:
$a = $user_info[0];
$b = $user_info[1];
$c = $user_info[2];
$d = $user_info[3];
سپس می توانیم این مقادیر را در دیتابیس ذخیره کنیم.
نویسنده: اکبر
زمان: ۱۴:۰۵:۵۴ - تاریخ: ۱۳۹۲/۰۴/۲۹
من در صفحه اول فقط برای id یک سطر چک باکس گذاشتم . الان میخوام اون گزینه که کاربر تیک میزنه value ان با مشخصات کاربر که در صفحه بعد وارد میکنه در یک ردیف جدول برام ذخیره بشن که با این کد در دو ردیف ذخیره میشن نمیدونم اشکالش کجاست؟؟
پاسخ: 
به نظر کدهای شما از این لحاظ مشکلی ندارند، مشکل از جای دیگری است، به طور مثال ممکن است کدی در صفحه استفاده کنید که باعث بارگذاری چند باره آن شود، یا افزونه ای در مرورگر فعال باشد که صفحه را مجددا (به صورت پنهانی) فراخوانی کند، برای اطمینان در صفحه دوم دستور ساده زیر را قرار دهید:
<?php
echo 'PHP<br>';
?>
ببینید چند بار عبارت PHP چاپ می شود، اگر دو بار بود، پس ایراد از کدها نیست، باید در سایر موارد جستجو کنید.
نکته 1: برای اطمینان از اینکه مشکل از مرورگر نیست، همین فرآیند را در مرورگر دیگری امتحان نمائید.
نکته 2: احتمال دارد ایراد از رعایت نکردن استاندارد کدنویسی HTML متناسب با DOCTYPE های توصیه شده W3C نیز باشد.
نویسنده: اکبر
زمان: ۲۳:۱۷:۴۱ - تاریخ: ۱۳۹۲/۰۴/۳۱
سلام
یه فرم دارم که اطلاعات را در ان وارد می کنم و ارسال میزنم اطلاعات در دیتابیس برام ذخیره میشن
ولی اشکال اینجاست که دوباره صفحه رو refresh می کنم همان اطلاعات قبلی رو دوباره برام ارسال می کند یا وقتی که بدون وارد کردن اطلاعات ارسال را می زنم مقادیر خالی را insert می کند
می خوام زمانی که کاربر تایید و میزنه و زمانی که فرم دارای مقادیر است ارسال شود در غیر این صورت پیغام خطا بدهد
این هم کدش ممنون میشم کمکم کنید؟؟؟
<form action="insert.php" method="POST">
<tr>
<th class="t2">کد شناسایی</th>
<th class="t2">روز </th>
<th class="t2">زمان</th>
<th class="t2">تاریخ</th>
</tr>

<tr>
<td><input type="text" name="idtest"/></td>

<td><select name="day">

<option value="شنبه">شنبه</option>
<option value="یکشنبه">یکشنبه</option>
<option value="دوشنبه">دوشنبه</option>
<option value="سه شنبه">سه شنبه</option>
<option value="چهارشنبه">چهارشنبه</option>
<option value="پنجشنبه">پنجشنبه</option>
<option value="جمعه">جمعه</option>

</select></td>

<td><input type="text" name="time"/></td>

<td><input type="text" name="date"/></td>

</tr>

<tr><td><input type="submit" name="submit"/></td></tr>
</form>

</table>

<?php
$con=mysql_connect("localhost","root","usbw","azmoon");

mysql_query('set names utf8');

if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("azmoon",$con);

if(!empty($_POST['submit']))
{


$sql="INSERT INTO test(idtest,day,time,date)

VALUES

('$_POST[idtest]','$_POST[day]','$_POST[time]','$_POST[date]')";

}

mysql_query($sql);

mysql_close($con);
?>
پاسخ: 
سلام
باید معنی دستوراتی که می نویسید را بدانید، در واقع اگر از مقدمات یک زبان را یاد گرفته باشید، این نوع مشکلات پیش نمی آید، در اینجا قسمت
if(!empty($_POST['submit']))
خالی نبودن متغیر submit را بررسی می کند، لذا برای اطمینان از خالی نبودن فیلدهای دیگر، باید شرط دیگری به آن اضافه کنید:
if(!empty($_POST['submit']) && !empty($_POST['idtest']))
بدین ترتیب فیلد idtest نیز پیش از ذخیره اطلاعات بررسی می شود، برای نمایش پیغام خطا، بعد از if یک elseif به شکل نمونه زیر قرار دهید:
if(!empty($_POST['submit']) && !empty($_POST['idtest'])){
$sql = "INSERT INTO test(idtest,day,time,date) VALUES ('$_POST[idtest]','$_POST[day]','$_POST[time]','$_POST[date]')";
}
elseif(!empty($_POST['submit']) && empty($_POST['idtest'])){
echo 'Error!';
}
نکته 1: استفاده از توابعی مانند
mysql_real_escape_string
برای حفظ امنیت دیتابیس اکیدا توصیه می شود.
نکته 2: تفسیر برنامه ها و نوشتن کدهای کاربردی نیازمند گذراندن آموزش های مقدماتی و داشتن تمرین و تکرار به اندازه کافی است، بدون این مراحل گام نهادن در قسمت کاربردی کار منطقی نیست و در ادامه ممکن است با مشکلات متعدد دیگری روبرو شوید.
نویسنده: یحیی
زمان: ۲۳:۴۵:۴۹ - تاریخ: ۱۳۹۲/۰۶/۰۴
با سلام اطلاعات یک فرم را با آجاکس جی کوئری به یک صفحه php ارسال کرده و بعد از پردازش در پایگاه داده ذخیره می کنم. مشکل اینجاست که اطلاعات دو بار در mysql ذخیره می شود. لطفا راهنمایی کنید.
پاسخ: 
سلام
حل مشکل شما نیاز به بررسی و تست کدها دارد، ممکن است مشکل از موارد متعددی باشد.
نویسنده: یحیی
زمان: ۰۰:۲۲:۱۰ - تاریخ: ۱۳۹۲/۰۶/۰۶
کد آجاکس
	$.ajax({
url: 'result.php',
type:'POST',
data:{chclass:chclass, kod:kod, typetest:typetest, final:final, chapter:chapter, nu_qu:nu_qu, negetive:negetive, time:time, duration:duration, question_kod:question_kod, answer:answer },
success: function(res) {
$('#exam_result').html(res);
}
});
صفحه php رو به ساده ترین حالت تغییرش دادم ولی باز هم دو بار ذخیره میشه
php:
<?PHP
include_once("server.inc");
$server=mysql_connect($servername,$username,$password) or die(mysql_error());
mysql_select_db("results",$server)or die(mysql_error());
$insert = mysql_query("INSERT INTO yahyaro (qu, re) VALUES('12' , '34')")or die(mysql_error());
mysql_close($server);
پاسخ: 
باید ببینید مشکل از کدهای سمت کاربر است یا سمت سرور، برای این کار می توانید به فرض یک دستور فرضی alert در قسمت جاوا اسکریپت قرار دهید و ببینید که چند بار اجرا می شود، یا در سمت سرور از دستور echo خروجی فرضی بگیرید و تعداد تکرار را بررسی کنید. با مواردی که درج کردید مشکل را نمی توان پیدا کرد، باید تست های کد به صورت عملی انجام شود، ممکن است مشکل از یونیکد صفحات (عدم استفاده از utf-8) و موارد اینچنینی نیز باشد.
paged صفحه 1 از 5




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

3 × 5
 refresh
آگهی
سامانه استخدام ایران
Iran-karyab.com

اطلاع رسانی استخدام های معتبر دانلود رایگان نمونه سئوالات