به جای ارسال یک کوئری اضافی قبل از کوئری اصلی بهتره که فیلد مورد نظر رو در دیتابیس unique کنید و بعد در php ارور ها رو چک کنید تا اگر ورودی تکراری بود به کاربر هشدار داده بشه. اینطوری یک کوئری کمتر به سرور فرستاده میشه
Printable View
به جای ارسال یک کوئری اضافی قبل از کوئری اصلی بهتره که فیلد مورد نظر رو در دیتابیس unique کنید و بعد در php ارور ها رو چک کنید تا اگر ورودی تکراری بود به کاربر هشدار داده بشه. اینطوری یک کوئری کمتر به سرور فرستاده میشه
اگه در دیتابیس فیلدی رو unique کنیم دیگه مقدار تکراری در اون قرار نمیگیره؟
همینطوره. وقتی که مقدار تکراری در یک فیلد unique وارد بشه همچین اروری میده:
کد ارور هم وقتی که با توابع mysql کار میکنید 1062 هست. اگر از رابط های دیگه مثل PDO استفاده کنید فکر میکنم کد ارور متفاوت باشه ولی متن ارور همین هستکد:Duplicate entry 'مقدار وارد شده' for key 'FIELD_NAME'
اگه فیلدی در جدول نوعش رو unique تعریف کنیم چطور باید چک کنیم که اگر تکراری بود فلان پیغام رو بده ؟! اگه نوعش unique نباشه که اول یک سلکت میگیریم از بانک بعد اگه mysql_num_rows !=0 باشه مثلا پیغام میده که تکراریه ولی یک کار طولانیه ! اگه بخوایم این کار رو انجان ندیم باید چطور چک کنیم که اگه فیلدی unique باشه و مقدار ورودیمون تکراری باشه پیغام خطا بده !
بر فرض اینکه فیلد email از نوع یونیک باشه:
[php]
if(!mysql_query("INSERT INTO users (username,email) VALUES ('user1', 'user1@domain.com');")) {
if(mysql_errno() == 1062)
die('this email is already taken!');
else
die(mysql_error());
}
[/php]
روش دقیقترش هم اینطوریه که با عبارات با قاعده نام و مقدار فیلدهای تکراری از ارور استخراج بشه:
[php]
if(!mysql_query("INSERT INTO users (username,email) VALUES ('user1', 'user1@domain.com');")) {
if(preg_match("#Duplicate entry '(.*?)' for key '(.*?)'#i", mysql_error(), $matches))
die("the value '{$matches[1]}' is already taken for the field '{$matches[2]}'!");
else
die(mysql_error());
}
[/php]
این کد ها رو بدون تست کردن نوشتم اما در کل روش کار همین هست
سلام . میشه با php کاری کرد که اگه یک اتفاق بیفته یک پیغامی بده و بعد از چند ثانیه بره . مثلا یک فیلدی در یک جدول رو مقدارش رو تغییر میدیم و میگیم اگر تغییر کرد نشون بده فیلد مورد نظر تغییر کرد و بعد از 3 ثانیه این نوشته بره !
نه این کار ارتباطی به php نداره. باید با جاوا اسکرپت انجام بدیدنقل قول:
سلام / من یک جدول دارم بشکل : [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
میخوام در جدول sub_category مقدار جدیدی درج کنم . میخوام چک کنه اگه با این نام و با این cat_id که cat_id خودش id جدول category میشه فیلدی نبود بعد درج کن در غیر اینصورت پیغام خطا بده . واقعا نمیدونم باید چیکار کنم . ممنون میشم کمک کنید.
در این جور مواقع فکر کنم توابع left join و right join و join (یکیشون :دی ) مای اس کیو ال به درد می خوره.
یا:
با یه کوئری همه ی نتایجی که در جدول موضوعات هستند و آی دیشون برابر sub_id اون زیر مجموعه هست رو ببینید و سپس با if و mysql_num_rows ببیند که مساوی نباشه با 0 (یعنی وجود داشته باشه چنین موضوعی!).
اونوقت.... {} :دی
مرسی از راهنماییتون . هر چند هیچی نفهمیدم :31:
من این کدو نوشتم ولی فقط یک بار کار میکنه :
[PHP]$res_cat=(mysql_fetch_assoc(mysql_query("SELECT * FROM `category`")));
$res=(mysql_fetch_assoc(mysql_query("SELECT * FROM `company` WHERE `name`='{$comp_name}' AND `cat_id`='{$res_cat["id"]}'")));
if($res)
{
echo "کمپانی موجود است";
}
else
{
echo "شرکت ثبت شد";
}[/PHP]
و اگه یک فیلد با نام مثلا علی در جدول sub_category باشه با cat_id=3 بخوایم یک علیه دیگه با cat_id=1 بسازیم میگه مقدار تو جدول موجوده ! همن کدو نمیشه جوری تغییرش داد که درست شه ؟! :11: