article

ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL

mysql-create-table

شیوه دستی ایجاد پایگاه داده در برنامه phpMyAdmin به خودی خود روش مناسبی است اما برنامه نویسان وب عموما با کدنویسی و دنیای کدها سر و کار دارند و تمرکز آموزش های پیش رو نیز در همین چارچوب است، برای ساخت دیتابیس، جدول و ستون در برنامه نویسی PHP باید از دستور CREATE استفاده کنیم، CREATE یکی از دستورات آشنا در زبان SQL است که به کمک آن می توانیم دیتابیس، جدول و ستون های مورد نظر را با اجرای کدهای برنامه نویسی در MySQL و به کمک اکستنشن های متداول ایجاد کنیم، دقت کنیم همانطور که قبلا گفتیم پایگاه داده MySQL با اکستنشن MySQL دو مفهوم جداگانه هستند، عبارت اول اشاره به سیستم مدریت پایگاه داده MySQL دارد اما عبارت دوم یک برنامه کوچک نرم افزای در مفسر PHP است که به این زبان قابلیت ارتباط با پایگاه داده را می دهد، اکستنشن MySQL اولین اکستنشن PHP برای این منظور بوده و در حال حاضر منسوخ و قدیمی شده است، لذا بهتر است از اکستنشن های جدید مانند MySQLi یا PDO استفاده کنیم.

ساخت دیتابیس با دستور CREATE DATABASE در MySQL


علاوه بر شیوه دستی ساخت دیتابیس از طریق برنامه phpMyAdmin، کدهای PHP نیز چنین قابلیتی دارند که با برنامه نویسی بتوانیم دیتابیس مورد نیازمان را بسازیم، این کار با دستور CREATE DATABASE صورت می گیرد که در زیر دیتابیس فرضی dbname را به این روش ساخته ایم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //ساخت دیتابیس
    $sql = "CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci";
    $query = mysqli_query($conn, $sql);
    if(!$query) {
        echo "Creating Database dbname: Error! " . mysqli_error($conn);
    } else {
        echo "Creating Database dbname: 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 DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci";
    $conn->query($sql);
    if(!$conn) {
        echo "Creating Database dbname: Error! " . $conn->error();
    } else {
        echo "Creating Database dbname: OK!";
    }
}
//پایان اتصال
$conn->close();
?>
همان طور که در نمونه کد بالا ملاحظه می کنید دستور CREATE به تنهایی کاربردی ندارد و در کنار پارامترهای دیگر کامل می شود، برای ساخت دیتابیس باید در کنار CREATE از دستور DATABASE استفاده کنیم، همچنین برای اعمال تنظیمات دلخواه پارامترهای دیگری مانند DEFAULT CHARACTER SET و COLLATE استفاده شده که کارکرد مشابهی با حالت دستی در برنامه phpMyAdmin دارند، این دستورات یونیکد پیش فرض دیتابیس را تعیین می کنند که برای سازگاری با زبان فارسی باید مقدار utf8 و utf8_persian_ci برای آنها در نظر گرفته شود، ci در عبارت utf8_persian_ci مخفف case-insensitive و به معنی غیرحساس به حروف بزرگ و کوچک است.
نکته 1: قبل از اجرای دستورات باید اطلاعات مورد نیاز را در قسمت username و password مطابق با حساب کاربری پایگاه داده در کد جایگزین کنیم، در لوکال هاست نام کاربری معمولا root و بدون کلمه عبور است، همچنین در قسمت dbname می توانیم نام دیگری برای پایگاه داده در نظر بگیریم.
نکته 2: تابع mysqli_query و متد query در اکستنشن MySQLi جهت اجرای فرآیند پرس و جو بین کدهای PHP و دیتابیس MySQL کاربرد دارند.

ساخت جدول و ستون با دستور CREATE TABLE


پس از ساختن دیتابیس با دستور CREATE DATABASE نوبت به ایجاد جداول و ستون ها است که این کار با دستور CREATE TABLE انجام می شود، در نمونه کد زیر با استفاده از این دستور جدول فرضی tblname را با چند ستون id، name و status ساخته ایم.
برنامه نویسی رویه ای (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 tblname(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    status TINYINT(1) DEFAULT 0)
    ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci";
    $query = mysqli_query($conn, $sql);
    if(!$query){
        echo "Creating Table tblname: Error! " . mysqli_error($conn);
    } else{
        echo "Creating Table tblname: 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 tblname(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    status TINYINT(1) DEFAULT 0)
    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();
?>
در کد بالا پرس و جوی ساخت یک جدول با سه ستون id، name و status را اجرا کرده ایم و به هر ستون ویژگی هایی را متناسب با نوع و کارکرد آن نسبت داده ایم که در این مرحله از آموزش صرفا جهت آشنایی اولیه به توضیح مختصر آنها می پردازیم، مواردی مانند INT، VARCHAR و TINYINT نشان دهنده نوع داده ای است که در آن ستون ذخیره می شوند، در خصوص انواع داده در MySQL در آموزش های بعدی به طور خاص صحبت خواهیم کرد، پارامتر NOT NULL به این معنی است که ردیف های اطلاعاتی به صورت پیش فرض NULL یا خالی نیستند، AUTO_INCREMENT نیز به این معنی است که مقدار این ستون با هر INSERT اطلاعات به صورت پیش فرض افزایش پیدا می کند و نیازی به مقداردهی آن در هنگام اجرای پرس و جو نیست، پارامتر PRIMARY KEY نیز یک سیستم در MySQL است که کلید اصلی را مشخص می کند، منظور از این عبارت ایجاد کلیدهای منحصر به فرد جهت دسته بندی بهتر و جستجوی سریع تر در بین ردیف های اطلاعاتی است، در این سیستم هر ردیف در هر جدول یک کلید منحصر به فرد خواهد داشت که در هنگام بازیابی اطلاعات کار جستجو بسیار سریع تر خواهد شد، از پارامتر DEFAULT برای درج یک مقدار پیش فرض به صورت خودکار استفاده می شود، در این نمونه کد عدد 0 به عنوان مقدار پیش فرض برای ستون status در نظر گرفته شده است، پارامتر ENGINE=MyISAM برای تنظیم موتور MyISAM به عنوان موتور پیش فرض برای جدولی است که قصد ایجاد آن را داریم (Syntax آن در برخی نسخه ها به صورت TYPE=MyISAM است، در MySQL به طور معمول دو موتور MyISAM و INNODB استفاده می شوند).
نکته 1: تابع mysqli_connect در دستور CREATE TABLE چهار آرگیومنت دارد که مورد آخر نام دیتابیسی است که می خواهیم در آن جدول ساخته شود، در اینجا دیتابیسی که قبلا با دستور CREATE DATABASE ساخته بودیم (dbname) را به عنوان آرگیومنت چهارم درج کرده ایم.
نکته 2: هر درخواستی که از دیتابیس انجام می شود را در اصطلاح پرس و جو یا Query می نامند، MySQL در پرس و جوهای خود از زبانی به نام SQL استفاده می کند که مخفف Structured Query Language است.
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» حذف مقادیر از MySQL با دستور DELETE
» نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
» آموزش MySQL، سیستم مدیریت پایگاه داده
» به روز رسانی ردیف ها در MySQL با UPDATE
» استفاده از WHERE در پرس و جوی MySQL
commentنظرات (۷۴ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: پگاه
زمان: ۱۶:۵۰:۳۳ - تاریخ: ۱۳۹۱/۰۶/۰۶
با سلام و تشکر از توضیحات مفیدتان
البته سوال من به نحوه ذخیره سازی در 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؟
پاسخ: 
کد قالب وبلاگ یک رشته متنی است و در صورتی که به درستی ایمن سازی شود، به راحتی در دیتابیس قابل درج است، به نظر می رسد ار توابع مربوط به ایمن سازی داده ها پیش از ذخیره در دیتابیس استفاده نمی کنید؟ توابعی مانند:
mysqli_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: استفاده از توابعی مانند
mysqli_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
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 لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




7 × 3
 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