PDA

نسخه کامل مشاهده نسخه کامل : جلوگیری از درج داده های تکراری



Manager_66
04-11-2011, 23:16
سلام دوستان /

من یک سیستم مدیریت برای سایتم میخوام بنویسم که مدیر بره کالاهای فروشگاهشو به اونجا اضافه کنه . حالا وقتی مدیر مثلا یک کالایی با نامی که قبلا در جدول بوده رو وارد میکنه دو باره در جدول درج میشه . از چه دستوری استفاده کنم که اگه یک کالایی در جدول وجود داشته باشه دیگه نیاد کالا رو بهش اضافه کنه و به مدیر پیغام بده . متشکرم/

اینم کدمه :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


پ-ن : موارد نامربوط به سوال رو از این کد پاک کردم . کدهای html ممکنه مشکل داشته باشد .

milad_gta
04-11-2011, 23:31
قبلش یک query بفرست که چک کنه name ارسالی وجود داره اگه داشت پیغام بده .

Manager_66
04-11-2011, 23:42
قسمت php رو به این شکل تغییر دادم ولی همش میگه مقدار تکراری است و else که insert انجام نمیشه !

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

m.m.m5651
05-11-2011, 00:00
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Manager_66
05-11-2011, 00:14
مرسی عزیزم . فقط
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید باید بشه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
واسه کسایی که بخوان استفاده کنن .

راستی چرا بعضی مطالبی که در جدول درج میشن یک شکل نامفهومی میگیرن . مثلا اگه یک جدول داشته باشیم با یک id و name :



id=1
name= علی

id=2
name= بخاری

id=3
name= d85d58d54d54d85d4

همین مورد آخر چرا اینطور در جدول نمایش داده میشه . چون با نمایش فارسی که مشکلی ندارم دو تای اول رو درست نشون میده . این مورد مشکلی در جستجو و ... ایجاد نمیکنه ؟!

milad_gta
05-11-2011, 00:20
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدشرمنده صفحه رو باز کرده بودم رفتم یه دوری زدم اومدم جواب دادم اینجوری شد .

سومی چی هست که به این صورت نمایش داده میشه ؟

Manager_66
05-11-2011, 00:24
خواهش میکنم . لطف کردین .

اسامی زیادی رو تست کردم . مثلا با پاناسونیک / جواد / سعید /سونی و ... این حروف رو میاره .

ولی وقتی کوئری میگیرم که فقط اونهایی که اسمشون سعید هست رو نمایش بده درست کار میکنه . سوال اینه که چرا php myadmin اینطوری نشونون میده؟ :|

Manager_66
05-11-2011, 14:15
سلام . در ادامه سوال قبلیم واسه مدیریت سایت به یک مشکل جدید برخوردم . من اومدم واسه مدیر امکان اضافه و ویرایش نام محصولات رو گذاشتم . حالا وقتی مدیر روی لینک حذف یک محصول کلیک میکنه بار اول محصول پاک نمیشه و بار دومی که کلیک میکنه نام محصول از جدول حذف میشه . در واقع با کلیک اول محصول از جدول واقع در دیتابیس پاک میشه ولی در سایت هنوز نشون داده میشه و با کلیک دوم محصول از جدول سایت پاک میشه . برای ویرایش هم همینطور . من برای ویرایش یک تکست باکس گذاشتم که وقتی روی محصول کلیک کرد نام محصول رو در اون تکست باکس نمایش بده . وقتی نام محصول جدید رو وارد میکنه و دکمه اکی رو میزنه باز هم نام محوصل قبلی در تکست باکس میمونه و باید صفحه رفرش بشه . میشه سریع با php کاری کرد که احتیاج به رفرش نداشته باشه .

در ادامه کد رو هم قرار میدم :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

m.m.m5651
05-11-2011, 14:59
میشه آخر کوئری با تابع header کاربر رو به همین صفحه انتقال بدید یا در واقع به صورت خودکار وقتی کاربر روی دکمه حذف کلیک کرد یا سابمیت ویرایش، یه دور ریفرش کنید.
به این صورت که پس از کوئری کد رو بندازید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شایدم با ست کردن action فرم درست شد! :دی

Manager_66
05-11-2011, 15:39
مرسی . این قسمت رو بالای صفحه گذاشتم درست شد
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

neopersia
05-11-2011, 20:34
به جای ارسال یک کوئری اضافی قبل از کوئری اصلی بهتره که فیلد مورد نظر رو در دیتابیس unique کنید و بعد در php ارور ها رو چک کنید تا اگر ورودی تکراری بود به کاربر هشدار داده بشه. اینطوری یک کوئری کمتر به سرور فرستاده میشه

Manager_66
05-11-2011, 20:53
اگه در دیتابیس فیلدی رو unique کنیم دیگه مقدار تکراری در اون قرار نمیگیره؟

neopersia
06-11-2011, 01:34
همینطوره. وقتی که مقدار تکراری در یک فیلد unique وارد بشه همچین اروری میده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد ارور هم وقتی که با توابع mysql کار میکنید 1062 هست. اگر از رابط های دیگه مثل PDO استفاده کنید فکر میکنم کد ارور متفاوت باشه ولی متن ارور همین هست

Manager_66
07-11-2011, 23:52
اگه فیلدی در جدول نوعش رو unique تعریف کنیم چطور باید چک کنیم که اگر تکراری بود فلان پیغام رو بده ؟! اگه نوعش unique نباشه که اول یک سلکت میگیریم از بانک بعد اگه mysql_num_rows !=0 باشه مثلا پیغام میده که تکراریه ولی یک کار طولانیه ! اگه بخوایم این کار رو انجان ندیم باید چطور چک کنیم که اگه فیلدی unique باشه و مقدار ورودیمون تکراری باشه پیغام خطا بده !

neopersia
08-11-2011, 02:01
بر فرض اینکه فیلد email از نوع یونیک باشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

روش دقیقترش هم اینطوریه که با عبارات با قاعده نام و مقدار فیلدهای تکراری از ارور استخراج بشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این کد ها رو بدون تست کردن نوشتم اما در کل روش کار همین هست

Manager_66
11-11-2011, 18:11
سلام . میشه با php کاری کرد که اگه یک اتفاق بیفته یک پیغامی بده و بعد از چند ثانیه بره . مثلا یک فیلدی در یک جدول رو مقدارش رو تغییر میدیم و میگیم اگر تغییر کرد نشون بده فیلد مورد نظر تغییر کرد و بعد از 3 ثانیه این نوشته بره !

neopersia
13-11-2011, 07:39
سلام . میشه با php کاری کرد که اگه یک اتفاق بیفته یک پیغامی بده و بعد از چند ثانیه بره . مثلا یک فیلدی در یک جدول رو مقدارش رو تغییر میدیم و میگیم اگر تغییر کرد نشون بده فیلد مورد نظر تغییر کرد و بعد از 3 ثانیه این نوشته بره !
نه این کار ارتباطی به php نداره. باید با جاوا اسکرپت انجام بدید

Manager_66
16-11-2011, 00:29
سلام / من یک جدول دارم بشکل : [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

میخوام در جدول sub_category مقدار جدیدی درج کنم . میخوام چک کنه اگه با این نام و با این cat_id که cat_id خودش id جدول category میشه فیلدی نبود بعد درج کن در غیر اینصورت پیغام خطا بده . واقعا نمیدونم باید چیکار کنم . ممنون میشم کمک کنید.

m.m.m5651
16-11-2011, 00:55
در این جور مواقع فکر کنم توابع left join و right join و join (یکیشون :دی ) مای اس کیو ال به درد می خوره.
یا:
با یه کوئری همه ی نتایجی که در جدول موضوعات هستند و آی دیشون برابر sub_id اون زیر مجموعه هست رو ببینید و سپس با if و mysql_num_rows ببیند که مساوی نباشه با 0 (یعنی وجود داشته باشه چنین موضوعی!).
اونوقت.... {} :دی

Manager_66
16-11-2011, 01:00
مرسی از راهنماییتون . هر چند هیچی نفهمیدم :31:

من این کدو نوشتم ولی فقط یک بار کار میکنه :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و اگه یک فیلد با نام مثلا علی در جدول sub_category باشه با cat_id=3 بخوایم یک علیه دیگه با cat_id=1 بسازیم میگه مقدار تو جدول موجوده ! همن کدو نمیشه جوری تغییرش داد که درست شه ؟! :11:

neopersia
17-11-2011, 20:20
ارتباطی با join نداره. باید دو فیلد NAME و Cat_ID رو با هم در یک کلید unique قرار بدید. بقیه کار مثل مورد قبلی هست که گفتم