درج اطلاعات در PHP
درج کردن اطلاعات در MySQL با استفاده از MySQLi و PDO
بعد از اینکه پایگاه داده و جداول را ایجاد کردیم، حالا نوبت به درج اطلاعات می رسد.
دستور INSERT INTO برای درج کردن یک رکورد جدید در جدول استفاده می شود.
در اینجا چند قانون ساختاری وجود دارد که باید پیروی کنید:
- کوئری های SQL در PHP باید با علامت کوتیشن محصور شوند.
- مقادیر رشته ای استفاده شده در کوئری ها باید با علامت کوتیشن محصور شوند.
- اعداد را نباید با کوتیشن محصور کنید.
- کلمه NULL نباید با کوتیشن محصور شود.
به دو صورت می توان از دستور INSERT INTO استفاده کرد:
1- در این روش نیازی نیست که نام ستونها ذکر شود:
INSERT INTO table_name
VALUES (value1, value2, value3,...)
2- در این روش باید نام ستون ها و مقادیر متناظرشان ذکر شود:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
برای کسب اطلاعات بیشتر در مورد SQL، به لینک روبرو مراجعه فرمایید: آموزش SQL-مقدمه
در مطلب قبل، یک جدول با نام "MyGuests" با 5 فیلد "id" و "firstname" و "lastname" و "email" و "reg_date" ایجاد کردیم، حالا اجازه دهید تا جدول را با اطلاعات پر کنیم.
توجه: اگر هنگام تعریف جدول، برای یک ستون، گزینه AUTO_INCREMENT را تنظیم کرده باشیم (مانند فیلد id) و یا فیلد مورد نظر از نوع TIMESTAMP باشد (مانند فیلد reg_date) هنگام درج اطلاعات نیازی به مشخص کردن مقدار نیست و MySQL بصورت اتوماتیک آنها را پر خواهد کرد. |
مثال های زیر یک رکورد جدید به جدول "MyGuests" اضافه خواهند کرد:
مثال (MySQLi Object-oriented)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
مثال(MySQLi Procedural)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
توجه: همانطور که قبلاً گفته شد در روش MySQLi Procedural برای اجرای کوئری ها، باید از تابع ()mysqli_query استفاده کرد، این تابع توسط Connectionی که برقرار شده برای ارسال کوئری به MySQL استفاده می شود.
مثال(PDO)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید')";
// use exec() because no results are returned
$conn->exec($sql);
echo "New record created successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 27060
دیدگاهها
سلام واقعا شرمندم ببخشید من کدم را از قسمت values اینجوری ادیت کردم به من تعیید ساخت رکورد را داد values ({name},{email} ,{website},{gen der}) فقط 2تا سؤال داشتم 1. این کد پایگاه داده را کجا باید بزارم میشه تو همون کدی که برای کنترل فرمم نوشتم بزارم 2. از کجا بفهمم که یک رکورد اضافه شده است. از پاسخگوییتان بسیار ممنونم انشا الله هرچه از خدا میخواهید بهتون بده
با سلام و تشکر.
والا این که کد رو دقیقا کجا بذارید رو باید خودتون مشخص کنید. چون شما برنامه رو نوشتید. من نمیدونم منطقش چیه که بگم کجا باید گذاشته بشه.
هر جا مقادیر رو گرفتید، همونجا آنالیزش کنید و بعد از اعتبارسنجی رکورد رو بسازید.
اما برای اینکه متوجه بشید رکوردی ساخته شده یا نه، بعد از اجرای کوئری و ایجاد رکورد، دستور ;()mysql_affect ed_rows رو اجرا کنید. این دستور به شما تعداد رکوردهایی که دستخوش تغییرات بودند رو بر میگردونه. در اینجا چون یک رکورد دستخوش تغییر (ایجاد) شده به شما مقدار یک رو خواهد داد.
مقدار صفر در اجرای این دستور یعنی اینکه عملیاتی در دیتابیس روی رکوردها انجام نشده.
عزیزم این فایلی را که فرستادم حاوی ارور هایی هست که مرورگر بهم داده و کد هام نیستش چون کد ها زیاد هست توی این فایل قرار دادم خیلی ببخشید
فایل دانلود نمیشه.
http://up.persianscript.ir/uploads2/2e54-فرمت-فایل-txt-هستش.zip
خودم امتحان کردم شد چون ارور ها زیاده این کار را میکنم و بهتون زحمت میدم چون اینجا پیست میکنم ارسال نمیشه
( ! ) Warning: mysqli_connect( ): (HY000/2002): No connection could be made because the target machine actively refused it. in C:\wamp64\www\p erson.php on line 2
Call Stack
#
Time
Memory
Function
Location
1
0.0006
238112
{main}( )
...\person.php:0
2
0.0007
238496
mysqli_connect ( )
...\person.php:2
Failed to connect to MySQL: No connection could be made because the target machine actively refused it.
( ! ) Notice: Undefined index: NAME in C:\wamp64\www\p erson.php on line 7
Call Stack
این یک بخشش هست ولی تمامی ارور ها همینه
مشکل کانکت شدن دیتابیس هست. عبارت NAME رو نمیتونه پیدا کنه. دقت کنید این عبارت درست تعریف شده باشه!!!
شرمنده مدیر عزیز انقدر مزاحم میشم من کد شما را به کدم افزودم اما یک ارور هم که برای شما ارسال میکنم اضافه شد که اولین و آخرین ارور هستند که قبلا نبودن ممنون میشم یک نگاه بندازید اگر امکان داره یک برام بنویسید و به ایمیلم بفرستید خیلی خیلی گلید از پاسخگوییتتان ممنونم http://up.persianscript.ir/uploads2/2e54-فرمت-فایل-txt-هستش.zip
خواهش میکنم.
متأسفانه من امکان اجرای کدهای شما رو ندارم. برای راهنمایی بهتره، متن خطا رو بفرستید. متن خطا رو ببینم، متوجه میشم مشکل از کجاست.
سلام قربان من یک بار کد هایم را کپی پیست کردم اما نیومد حالا آپلود کردم فقط یک لطف کنید پسوند فایل را به php تغییر دهید فقط یک مورد هم من توی کدم وقتی که جدولم ساخته شد دیگه کد مربوط به ساخت جدول را پاک کردم خیلی ممنون میشم جوابمو بدید
http://up.persianscript.ir/uploads2/e419-person.zip
سلام.
کوئری رو یه مقدار بد نوشتید. بهتره عبارت رو داخل کوتیشن و فیلدهای رو داخل ` بذارید.
این رو امتحان کنید:
$sql="INSERT INTO incom (`Name`, `email`, `website`, `gender`) VALUES ('{$_POST['NAME ']}','{$_POST[' email']}','{$_P OST['website']} ','{$_POST['gen der']}')";
سلام مدیر عزیز من یک فرم شبیه کدی که در قسمت فرم های php آموزش دادید را کاملا همانجور ساختم حالا میخواهم آن ها را در mysql درج کنم که یک جدول هم ساخته ام اما وقتی اینسرت میکنم کار نمیکند خواستم ببینم اشکال کدم از کجاست این هم کدم
با سلام و تشکر.
کدی در اینجا نیومده!
همینطور برای راهنمایی بهتر در صورت امکان متن خطایی که به شما میده رو هم بذارید. زمانی که یک کوئری به هر دلیل با موفقیت اجرا نیشه، یه خطا بر میگردونه. این خطا رو میتونید با دستور ()mysql_error نمایش بدید.
وقتی به مقدار هام متغییر میدم
$sql = "INSERT INTO MyGuests ('username', 'password')
VALUES ('$username', '$password_md5')";
مشکل پیدا می کنم
با سلام به شما دوست عزیز و گرامی
دقیقا چه اروری رو میبینید بعد مقدار دادن
در ضمن کمی کد ها تون رو کامل تر بذارید تا بتونم راهنماییتون کنم
با تشکر
اگر بخواهیم اطلاعاتی از یک فرم ارسال شود در جدول نگه داری شود باید چه کنیم؟
با سلام خدمت شما دوست عزیز.
سؤال شما مشابه سؤال قبلی دوست عزیزمون هست که جواب دادم.
جواب سؤال قبلی، جواب شما هم هست.
اگر ابهامی بود، بفرمایید تا خدمتتون توضیح بدم.
سلام ببخشید شما الان خودتون اطلاعات رو اضافه کردین
الان من بخام داخل یک فرم این دستور رو بزارم باید چکار کنم؟جدول ایجاد کردیم و ارتباط هم ایجاد کردیم
بخام یک فرم ایجاد کردم از INSERT INTO چطوری باید استفاده کنم که مستقیم خودش ارسال کنه به پایگاه داده؟
با سلام.
زمانی که فرم ارسال میشه، با توجه به متد ارسال فرم مقادیر داخل یکی از آرایههای POST_$ یا GET_$ ریخته میشه. شما میتونید مقادیر مربوطه رو از داخل این ارایه گرفته و بعد از validate و پاکسازی مقادیر، اون رو داخل دیتابیس بریزید.
کد زیر یک مثال خیلی ساده است و فقط جاهایی که نیاز به توضیح شفاف داره به صورت کد هست. برخی از جاها فقط کامنت گذاشته شده است که گویاست باید چی کار کنید.
<?php
if(count($_POST) > 0 && isset($_POST['btnSend'])){
$name = isset($_POST['t xtName']) ? $_POST['txtName '] : '';
$family = isset($_POST['t xtFamily']) ? $_POST['txtFami ly'] : '';
$age = isset($_POST['t xtAge']) ? $_POST['txtAge' ] : '';
// validate inputs
// ...
if($name && $family && $age){
// connection to database
// ...
// select database
// ..
$query = "INSERT INTO tblUser (`name`, `family`, `age`) VALUES ('{$name}', '{$family}', '{$age}')";
$result = mysql_query($query);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<link rel="style sheet " href="styl e.css " type="text /css" />
<meta http-equiv=&quo t;Con tent-Type" content="t ext/h tml; charset=iso-885 9-1" />
<title>Untitled Document</title>
</head>
<body>
<form method="po st" action="">
<input type="text " name="txtN ame" />
<input type="text " name="txtF amily" />
<input type="text " name="txtA ge" />
<input type="subm it" name="btnS end" value="Sen d" />
</form>
</body>
</html>
جدول فرضی tblUser هست که دارای 3 فیلد نام، نام خانوادگی و سن هست. دقت کنید مقادیر حتما باید قبل ریختن داخل دیتابیس اعتبارسنجی بشن، تا از تزریق کدهای خطرناک داخل دیتابیس جلوگیری بشه. من این کار رو تو کامنت مطرح کردم، با این دید که شما حتما انجامش خواهید داد.
ببخشید میشه تمام این دستورات رو با متغیر $sql ایجاد کرد ؟ یعنی از یه متغیر برای ایجاد پایگاه داده ، جدول و insert کردن استفاده کرد یا باید با هم فرق کنه :)
از پاسخ "سریع" شما واقعا ممنون :) :D
بله مشکی وجود ندارد.