parsgreen.com
article

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

mysql-insert

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

گفتیم که قبل از انجام هر کاری، ابتدا باید به پایگاه داده متصل شویم، برای این کار از کدی شبیه به مثال زیر استفاده می کنیم:
<?php 
mysql_connect("localhost", "user", "pass")//اطلاعات اتصال
or die(mysql_error());
echo "ارتباط برقرار شد!<br />";
mysql_select_db("db")//نام دیتابیس
or die(mysql_error());
echo "ارتباط با پایگاه داده برقرار شد!<br />";
mysql_close;//پایان ارتباط
?>
حال فرض کنید در پایگاه داده خود، جدولی داریم با نام cars که می خواهیم لیست چند خودرو و رنگ آنها را در ردیف های (ستون های) car و color ذخیره کنیم، ابتدا با دستور CREATE جدول و ردیف هایمان را ایجاد می کنیم:
<?php 
mysql_connect("localhost", "user", "pass")//اطلاعات اتصال
or die(mysql_error());
echo "ارتباط برقرار شد!<br />";
mysql_select_db("db")//نام دیتابیس
or die(mysql_error());
echo "ارتباط با پایگاه داده برقرار شد!<br />";

mysql_query("CREATE TABLE cars(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
car VARCHAR(255),
color VARCHAR(255))")
or die(mysql_error());
echo "جدول با موفقیت ایجاد شد!<br />";

mysql_close;//پایان ارتباط
?>
توضیح:
- اطلاعات اتصال را باید با توجه به نام کاربری و کلمه عبور پایگاه داده خود تعریف کنید.
- در مثال بالا جدولی با نام cars ساخته ایم و سه ردیف (ستون) در آن ایجاد کرده ایم (id,car,color).
- INT و VARCHAR نوع داده (Data Types) ای هستند که در ردیف ها ذخیره می شوند، این امکان در MySQL وجود دارد که از مقادیری مثل INT برای اعداد، VARCHAR و CHAR برای متن های کوتاه با مقادیر مشخص (که می توانند حاوی اعداد هم باشند)، یا TEXT، MEDIUMTEXT، LONGTEXT برای متن های طولانی و... استفاده کنید.
- مقادیر NOT NULL و AUTO_INCREMENT جزء ویژگی هایی هستند که هر نوع از داده (Data Types)، مقادیر بخصوص خود را می تواند داشته باشد، مثلا برای INT که یک مقدار عددی است خاصیت AUTO_INCREMENT به معنی افزایش خودکار است، یعنی با هر بار Insert اطلاعات در آن جدول، یک مقدار به id ما به طور خودکار اضافه خواهد شد (1، 2، 3 و...).

افزودن مقادیر با دستور INSERT INTO در دیتابیس


پس از ساختن جدول و ردیف، اکنون می خواهیم نام سه خودرو پیکان سفید رنگ، پژو مشکی و پراید نقره ای را به لیست خود اضافه کنیم، بدین منظور از کدی شبیه به مثال زیر استفاده می کنیم:
<?php 
mysql_connect("localhost", "user", "pass")//اطلاعات اتصال
or die(mysql_error());
echo "ارتباط برقرار شد!<br />";
mysql_select_db("db")//نام دیتابیس
or die(mysql_error());
echo "ارتباط با پایگاه داده برقرار شد!<br />";

mysql_query("CREATE TABLE cars(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
car VARCHAR(255),
color VARCHAR(255))")
or die(mysql_error());
echo "جدول با موفقیت ایجاد شد!<br />";

mysql_query("INSERT INTO cars (car, color) VALUES('Peykan', 'white')")
or die(mysql_error());
mysql_query("INSERT INTO cars (car, color) VALUES('Peugeot', 'black')")
or die(mysql_error());
mysql_query("INSERT INTO cars (car, color) VALUES('Pride', 'silver')")
or die(mysql_error());
echo "اطلاعات با موفقیت افزوده شد!<br />";

mysql_close;//پایان ارتباط
?>
توضیح:
- دستور INSERT INTO مقادیر را در ردیف های تعیین شده ذخیره می کند (به شیوه نگارش آن دقت کنید).
- در عمل، برنامه نویسان وب معمولا به جای نوشتن مجزای دستور INSERT INTO برای هر مقدار، آن را در حلقه های while یا for قرار می دهند و برای هر مقدار، مقادیر را جایگزین می کنند (درک این مطلب نیاز به دانستن نحوه عملکرد for و while در php است).
- در صورت بروز خطا، ادامه کد با die اجرا نخواهد شد و mysql_error علت خطا را نشان خواهد داد.
- فراموش نکنید که پس از پایان کار، حتما با تابع mysql_close، اتصال به پایگاه داده را خاتمه دهید.
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» به روز رسانی ردیف ها در MySQL با UPDATE
» آشنایی با mysql_query در php و دیتابیس
» نگاهی به MySQL، پرکاربردترین سیستم مدیریت پایگاه داده
» انتخاب ردیف ها با دستور SELECT FROM در MySQL
» توابع تجمعی (Aggregate Functions) در MySQL
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 لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

8 × 7
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...