به روز رسانی ردیف ها در MySQL با UPDATE

یکی دیگر از دستورات مربوط به مدیریت اطلاعات در MySQL، دستور UPDATE است که پس از INSERT INTO و SELECT FROM می تواند بیشترین کاربرد را داشته باشد، فلسفه پیدایش و تعریف این دستور نیز به این جهت است که بتوانیم بدون حذف ردیف های موجود، اطلاعات آنها را به روز کنیم، به طور مثال فرض کنید اسامی افرادی را در یک جدول به همراه شماره تلفن آنها ذخیره کرده ایم و اکنون می خواهیم بدون اینکه ردیف مورد نظر حذف شود، تنها شماره تماس فرد را تغییر دهیم، یعنی اطلاعات قبلی مربوط به شماره تماس را حذف و اطلاعات جدید را جایگزین آن کنیم، در این گونه موارد است که دستور UPDATE کاربرد دارد، در ادامه به صورت جزئی تری با این دستور آشنا خواهیم شد.
شیوه نگارش (syntax) دستور UPDATE
شیوه نگارش (syntax) و نحوه استفاده از دستور UPDATE در MySQL بسیار ساده و کاربردی است، در واقع مانند سایر دستورهای مربوط به پایگاه داده، از جمله INSERT INTO و SELECT FROM، دستور UPDATE نیز از عناصر تعریف شده و خاص خود پیروی می کند که عبارتند از SET،UPDATE و WHERE، عنصر UPDATE بخش کلیدی پرس و جو، SET عملیات مورد نظر و WHERE ردیف هایی است که تحت تاثیر قرار می گیرند، به مثال زیر توجه کنید.
<?php
mysql_query("UPDATE tb_name SET tel_column='+98**********', age_column='33' WHERE user_column='ali'")
or die(mysql_error());
?>
در مثال بالا، از جدول فرضی tb_name، ستون های tel_column و age_column را به روز رسانی کردیم در جایی که ردیف یا ردیف های ستون user_column برابر مقدار فرضی ali باشد، به این ترتیب اطلاعات قبلی ذخیره شده در ردیف ها حذف و با مقادیر جدید به روز رسانی می گردند، بدون اینکه خود آن ردیف ها حذف شوند.نکته: برای به روز رسانی چندین ستون با یک دستور UPDATE و جداسازی آنها، از علامت , به صورتی که در مثال آمده است استفاده کنید.
یک مثال کاربردی با دستور UPDATE
برای آشنایی بیشتر با کاربرد دستور UPDATE در MySQL، این قسمت از آموزش را با یک مثال کاربردی به پایان می بریم؛ فرض کنید اسامی کاربران سایت خود را در جدولی به نام users ذخیره کرده ایم که این جدول دارای چند ستون با نام های username، password، status و ... است، حال می خواهیم این امکان را به کاربران بدهیم تا بتوانند کلمه عبور خود را تغییر دهند، در چنین شرایطی می توان با استفاده از دستور UPDATE این کار را به راحتی انجام داد که در زیر یک نمونه از آن را ملاحظه می کنید.
<?php
$con = mysql_connect("localhost","root","")
or die(mysql_error());
mysql_select_db("test")
or die(mysql_error());
$update = mysql_query("UPDATE users SET password='$new_pass' WHERE username='$user_name' AND status='online'")
or die(mysql_error());
mysql_close($con);
?>
توضیح:- دقت کنید، دستورات MySQL در اکثر مواقع، قبل از هر چیز باید توسط کدهای php کنترل شده و با هدف مشخصی استفاده گردند، به این معنی که هیچ زبان برنامه نویسی خود به خود نباید کاری انجام دهد بلکه تنها باید به عنوان یک ابزار در اختیار برنامه نویس باشد تا منظور او را به مفسر سیستم تفهیم کند، از این رو باید بدانید که کی و کجا از چه دستوری می توانید استفاده کنید، البته این موضوع تا حدود زیادی به تمرین و تجربه نیز بستگی دارد.
- پرس و جوی فرضی بالا اطلاعات کلمه عبور یک کاربر را به روز رسانی می کند، همان طور که ملاحظه می کنید از WHERE و AND برای اطمینان و محدودسازی ردیف های مورد نظرمان استفاده کرده ایم، همچنین از متغیرهایی برای مقادیر در دستور استفاده شده است که می توانند به فرض از یک فرم HTML و با متد POST دریافت شده باشند.
- همان طور که گفتیم، قبل از اجرای پرس و جوهای مربوط به دیتابیس، می توانید عملیات کاربر را با برنامه نویسی php کنترل و مدیریت کنید، به فرض از اعتبار سنجی با if و else یا isset استفاده کرده و سپس اجازه اجرای پرس و جو را بدهید، یا از دیگر قابلیت های php با توجه به هدف و برنامه خود استفاده کنید.
دسته بندی: آموزش مقدماتی » MySQL
برچسب ها: MySQL

اتصال PHP به MySQL با اکستنشن MySQLi
آموزش MySQL، سیستم مدیریت پایگاه داده
ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
حذف مقادیر از MySQL با دستور DELETE
انتخاب ردیف ها با دستور SELECT در MySQL
دیدگاه


mohsen
۲۲:۱۵ ۱۳۹۲/۰۹/۱۱
با سلام و تشکر از سایت خوبتون
من کلا تو یه زمینه ای ایراد دارم
میخوام با گذر مثلا یه ثانیه به یه متغیری یه مقدار خاص مثلا 10 تا اضافه بشه میشه کمکم کنین بگین چطوری میشه همیچین کدی نوشت؟ هر کار میکنم با این تابع Date بازم نمیشه من از برنامه نویسی سر در میارم ولی نمیدونم این کار هیچ جوری نمیشه! اگه بندازمش تو یه ساختار تکرار بازم نمیشه برنامه ارور میده! کمک کنین خواهشا
فقط سریع
بازم ممنون
من کلا تو یه زمینه ای ایراد دارم
میخوام با گذر مثلا یه ثانیه به یه متغیری یه مقدار خاص مثلا 10 تا اضافه بشه میشه کمکم کنین بگین چطوری میشه همیچین کدی نوشت؟ هر کار میکنم با این تابع Date بازم نمیشه من از برنامه نویسی سر در میارم ولی نمیدونم این کار هیچ جوری نمیشه! اگه بندازمش تو یه ساختار تکرار بازم نمیشه برنامه ارور میده! کمک کنین خواهشا
فقط سریع
بازم ممنون
سلام
لطفا سوالتان را دقیق تر مطرح کنید!
از تابع PHP استفاده می کنید یا JavaScript و یا MySQL؟ منظور از به روزرسانی متغیر مشخص نیست (متغیر در جاوا اسکریپت، PHP یا مقادیری در MySQL)؟
لطفا سوالتان را دقیق تر مطرح کنید!
از تابع PHP استفاده می کنید یا JavaScript و یا MySQL؟ منظور از به روزرسانی متغیر مشخص نیست (متغیر در جاوا اسکریپت، PHP یا مقادیری در MySQL)؟
مصطفی
۲۰:۱۶ ۱۳۹۲/۰۸/۳۰
متوجه مطلبتون شدم فقط چطور باید نتایج رویداد را در یک فیلد جدول قرار بدم
در قسمت event definition یا event body می توانید پرس و جوهای مد نظرتان را قرار دهید که قاعدتا می تواند شامل دستورات INSERT UPDATE SELECT و... باشد.
مصطفی
۰۰:۲۴ ۱۳۹۲/۰۸/۳۰
سلام و تشکر از سایتتون
من یه رویداد زمانی (event) داخل پایگاه طراحی کردم که 1 ساعت بعد از فرستادن درخواست آژاکسی به سرور انجام میشه ولی می خوام زمانی که باقی مونده تا رویداد اتفاق بیفته در مرورگر نمایش داده بشه البته می تونم با تابع setTimeout در جاوا اسریپت چنین کاری بکنم ولی مساله اینجاست که اگه کاربر مرورگر رو ببنده و دوباره باز کنه این تابع از دوباره شروع میشه. اگه کمکم کنید ممنون میشم
من یه رویداد زمانی (event) داخل پایگاه طراحی کردم که 1 ساعت بعد از فرستادن درخواست آژاکسی به سرور انجام میشه ولی می خوام زمانی که باقی مونده تا رویداد اتفاق بیفته در مرورگر نمایش داده بشه البته می تونم با تابع setTimeout در جاوا اسریپت چنین کاری بکنم ولی مساله اینجاست که اگه کاربر مرورگر رو ببنده و دوباره باز کنه این تابع از دوباره شروع میشه. اگه کمکم کنید ممنون میشم
سلام
راه حل این کار ثبت تاریخ اجرای رویداد در یک ستون دیتابیس است، سپس هر زمان که کاربر صفحه را بارگذاری می کند، به صورت آژاکسی یا حالت معمولی می توانید زمان فعلی را با زمان رویداد مقایسه و اختلاف را به دست آورید، اگر هم به صورت شمارنده معکوس بخواهید طراحی کنید، باید جاوا اسکریپت را نیز با این شیوه ترکیب نمائید.
راه حل این کار ثبت تاریخ اجرای رویداد در یک ستون دیتابیس است، سپس هر زمان که کاربر صفحه را بارگذاری می کند، به صورت آژاکسی یا حالت معمولی می توانید زمان فعلی را با زمان رویداد مقایسه و اختلاف را به دست آورید، اگر هم به صورت شمارنده معکوس بخواهید طراحی کنید، باید جاوا اسکریپت را نیز با این شیوه ترکیب نمائید.
مجید
۰۲:۰۳ ۱۳۹۲/۰۸/۱۹
سلام چطور میشه از دیتابیس ساخته شد نسخه ی پشتیبان تهیه کرد طوری که اطلاعاتی از دست نره
سلام
این کار هم از طریق برنامه phpMyAdmin و هم از طریق نرم افزار مدیریت هاست مانند cPanle امکانپذیر است.
این کار هم از طریق برنامه phpMyAdmin و هم از طریق نرم افزار مدیریت هاست مانند cPanle امکانپذیر است.
۱۵:۴۱ ۱۳۹۲/۰۷/۲۴
آقا مشکل حل شد .
۱۵:۲۸ ۱۳۹۲/۰۷/۲۴
سلامی دوباره .
ببخشید که من زیاد سوال میپرسم :|
مشکل قبلی به لطف شما حل شد .
الان یه مشکل دیگه پیش اومده .
وقتی که پسورد عوض میشه اول پسورد قبلی رو روی input نشون میده یا وقتی دوباره عوض میکنی یا صفحه رو رفرش میکنی بعد پسورد جدید رو نشون میده .
دلیلش چی میتونه باشه ؟
ببخشید که من زیاد سوال میپرسم :|
مشکل قبلی به لطف شما حل شد .
الان یه مشکل دیگه پیش اومده .
وقتی که پسورد عوض میشه اول پسورد قبلی رو روی input نشون میده یا وقتی دوباره عوض میکنی یا صفحه رو رفرش میکنی بعد پسورد جدید رو نشون میده .
دلیلش چی میتونه باشه ؟
سلام
باید معنی و نحوه کار دستوراتی که می نویسید را بدانید، چون مفسر PHP هیچ کاری را بی دلیل انجام نمی دهد! به نظر نیاز به مطالعه بیشتر مباحث مقدماتی دارید،
در مورد مشکل اخیر، چون دستور UPDATE بعد از SELECT اجرا می شود، لذا با ارسال فرم، ابتدا پسورد قبلی انتخاب شده (در متغیر ذخیره) و در ادامه مقادیر پسورد جدید در دیتابیس جایگزین می شود، به همین خاطر در فرم همان مقدار قبلی نمایش داده شده و با رفرش، مجددا پسورد آپدیت شده انتخاب می شود و...
باید معنی و نحوه کار دستوراتی که می نویسید را بدانید، چون مفسر PHP هیچ کاری را بی دلیل انجام نمی دهد! به نظر نیاز به مطالعه بیشتر مباحث مقدماتی دارید،
در مورد مشکل اخیر، چون دستور UPDATE بعد از SELECT اجرا می شود، لذا با ارسال فرم، ابتدا پسورد قبلی انتخاب شده (در متغیر ذخیره) و در ادامه مقادیر پسورد جدید در دیتابیس جایگزین می شود، به همین خاطر در فرم همان مقدار قبلی نمایش داده شده و با رفرش، مجددا پسورد آپدیت شده انتخاب می شود و...
۱۵:۰۴ ۱۳۹۲/۰۷/۲۴
خیلی ممنون از پاسخگویی خوب و سریعتون .
۱۲:۴۶ ۱۳۹۲/۰۷/۲۴
سلامی دوباره خدمت شما استاد گرامی
بنده کارهایی که شما گفتید رو انجام دادم .
کد :
اما نمیدونم چرا وقتی بر روی submit کلیک می کنم پسورد آپدیت نمیشه و همون پسورد قبلی دوباره به نمایش در میاد .
ممنون میشم کمکم کنید .
بنده کارهایی که شما گفتید رو انجام دادم .
کد :
<?php
mysql_connect("localhost", "et", "********")//اطلاعات اتصال
or die(mysql_error());
mysql_select_db("et")//نام دیتابیس
or die(mysql_error());
@$etchat_userpw = $_POST['etchat_userpw'];
$result = mysql_query("SELECT * FROM db1_etchat_user WHERE etchat_user_id = '3' ")
or die(mysql_error());// انتخاب از جدول
//گرفتن خروجی از اطلاعات فیلدها با mysql_fetch_array
while ($row = mysql_fetch_array($result)){
$etchat_userpw = $row['etchat_userpw'];
$etchat_user_id = $row['etchat_user_id'];
}
$update = mysql_query("UPDATE db1_etchat_user SET etchat_userpw='$etchat_userpw' WHERE etchat_user_id = '3' ")
or die(mysql_error());
mysql_close;//پایان ارتباط
?>
<form action="update.php" method="post">
<input name="etchat_userpw" type="password" value="<?php echo $etchat_userpw; ?>" type="text">
<input type="submit">
</form>
بنده در اینجا اومدم اطلاعات آی دی شماره 3 رو بیرون کشیدم و با دستور آپدیت پسورد این آیدی رو ویرایش می کنم.اما نمیدونم چرا وقتی بر روی submit کلیک می کنم پسورد آپدیت نمیشه و همون پسورد قبلی دوباره به نمایش در میاد .
ممنون میشم کمکم کنید .
سلام
مشکل کد شما این است که متغیر etchat_userpw که از طریق متد POST ست می شود با متغیری که از طریق SELECT و در حلقه while مقداردهی می شود، هم نام است، در نتیجه ابتدا قسمت POST اجرا و مقادیر از فرم گرفته می شود، اما در ادامه و قبل از به روزرسانی، مجدد متغیر با مقادیر دیتابیس جایگزین و سپس همان مقدار UPDATE می شود!
مشکل کد شما این است که متغیر etchat_userpw که از طریق متد POST ست می شود با متغیری که از طریق SELECT و در حلقه while مقداردهی می شود، هم نام است، در نتیجه ابتدا قسمت POST اجرا و مقادیر از فرم گرفته می شود، اما در ادامه و قبل از به روزرسانی، مجدد متغیر با مقادیر دیتابیس جایگزین و سپس همان مقدار UPDATE می شود!
۱۶:۵۸ ۱۳۹۲/۰۷/۲۲
با سلام خدمت شما استاد گرامی .
میتونید یه مثال از همین دستور UPDATE بزنید .
ببینید من میخوام اطلاعات رو به صورت تکست مشاهده کنم و بتونم اونها رو ویرایش کنم .
مثلا من اطلاعاتی مانند : نام , نام خانوادگی , و ... یک فرد رو بتونم بخونم و هم ویرایش کنم .
اگر میشه یه مثال خوب بزنید .
میتونید یه مثال از همین دستور UPDATE بزنید .
ببینید من میخوام اطلاعات رو به صورت تکست مشاهده کنم و بتونم اونها رو ویرایش کنم .
مثلا من اطلاعاتی مانند : نام , نام خانوادگی , و ... یک فرد رو بتونم بخونم و هم ویرایش کنم .
اگر میشه یه مثال خوب بزنید .
سلام
همان طور که در پاسخ یادداشت بالا اشاره شده، باید ابتدا موارد را SELECT کنید، آنها را به متغیرهایی در PHP نسبت دهید و در هنگام چاپ فرم HTML، در قسمت value فیلدها، مقادیر متغیرها را خروجی دهید، سپس بعد از ویرایش، می توانید مجددا فرم را به یک فایل دیگر (یا همان فایل) ارسال کرده و فرآیند UPDATE را انجام دهید (باید با نحوه کار SELECT و همچنین فرم های وب آشنا باشید).
همان طور که در پاسخ یادداشت بالا اشاره شده، باید ابتدا موارد را SELECT کنید، آنها را به متغیرهایی در PHP نسبت دهید و در هنگام چاپ فرم HTML، در قسمت value فیلدها، مقادیر متغیرها را خروجی دهید، سپس بعد از ویرایش، می توانید مجددا فرم را به یک فایل دیگر (یا همان فایل) ارسال کرده و فرآیند UPDATE را انجام دهید (باید با نحوه کار SELECT و همچنین فرم های وب آشنا باشید).
پارسا
۲۳:۲۰ ۱۳۹۲/۰۵/۰۲
سلام
میخوام فیلدهای موجود در دیتابیسم و نمایش بدم به صورت text که بتونم ویرایش کنم و اطلاعات ویرایش شده رو دوباره در دیتابیس ذخیره کنم؟؟؟
ممنون میشم کمکم کنید؟؟
میخوام فیلدهای موجود در دیتابیسم و نمایش بدم به صورت text که بتونم ویرایش کنم و اطلاعات ویرایش شده رو دوباره در دیتابیس ذخیره کنم؟؟؟
ممنون میشم کمکم کنید؟؟
سلام
اطلاعات را از دیتابیس SELECT و نتیجه را به متغیرها مقداردهی کنید، سپس در هنگام ایجاد خروجی، در قسمت value فیلدها جایگزین نمائید، در نهایت و پس از ویرایش موارد مد نظر، از UPDATE (در دستور MySQL) استفاده کرده و مقادیر ستون ها را به روز کنید.
اطلاعات را از دیتابیس SELECT و نتیجه را به متغیرها مقداردهی کنید، سپس در هنگام ایجاد خروجی، در قسمت value فیلدها جایگزین نمائید، در نهایت و پس از ویرایش موارد مد نظر، از UPDATE (در دستور MySQL) استفاده کرده و مقادیر ستون ها را به روز کنید.
امیر
۱۱:۰۰ ۱۳۹۲/۰۳/۰۲
ممنون از سایت خوبتون آموزش آژاکس تون همه چیز رو برام روشن کرد ممنون از سایت کاربردی و جالبتون
امیر
۱۰:۳۸ ۱۳۹۲/۰۳/۰۲
سلام
من مشکلی با آپدیت کردن ندارم اما برای مشاهده ی اطلاعات آپدیت شده من باید هر باز صفحه رو رفرش کنم
. که این خیلی برام آزار دهنده است با php هم کار می کنم . آیا راهی هست که بشه این مشکل رو حل کرد مثلا یه تایمر جاوا اسکریپتی باشه که فقط کد های php رو بروز کنه؟
من مشکلی با آپدیت کردن ندارم اما برای مشاهده ی اطلاعات آپدیت شده من باید هر باز صفحه رو رفرش کنم
. که این خیلی برام آزار دهنده است با php هم کار می کنم . آیا راهی هست که بشه این مشکل رو حل کرد مثلا یه تایمر جاوا اسکریپتی باشه که فقط کد های php رو بروز کنه؟
سلام
باید از آژاکس (Ajax) و ترکیب آن با PHP استفاده کنید که خود آموزش های جداگانه دارد.
باید از آژاکس (Ajax) و ترکیب آن با PHP استفاده کنید که خود آموزش های جداگانه دارد.
۱۵:۵۰ ۱۳۹۱/۰۸/۱۵
با سلام و خسته نباشید مثل همیشه مطالبتون عالی هست فقط یک سوال پیش اومده برام مثلا من می خواهم یک مقدار رو به اون ستون اضافه کنم یعنی table امتیاز 5 هست و بعد با آپدیت 1 امتیاز دیگر آن اضافه بشه مثلا بشه امتیاز + یک چگونه امکان پذیر است؟ پیشاپیش تشکر
سلام
اگر درست متوجه سوال شما شده باشیم، ابتدا باید مقدار فعلی ستون مورد نظر را با SELECT و تابع mysql_fetch_array فراخوانی کنید (به آموزش های گذشته مراجعه نمائید)، سپس مقدار ستون را با مقادیر یک جمع کرده و حاصل را با update در ستون به روزرسانی کنید.
اگر درست متوجه سوال شما شده باشیم، ابتدا باید مقدار فعلی ستون مورد نظر را با SELECT و تابع mysql_fetch_array فراخوانی کنید (به آموزش های گذشته مراجعه نمائید)، سپس مقدار ستون را با مقادیر یک جمع کرده و حاصل را با update در ستون به روزرسانی کنید.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.