PDA

View Full Version : سوال: یک سوال در مورد حلقه و if ...



thacker
سه شنبه 05 فروردین 1393, 17:46 عصر
سلام.
در قسمت ثبت نام سایت من برای هر کاربر یک کد اختصاصی رندوم تولید میشه و توی ستون مربوط به آن کاربر ذخیره میشه.
چطور میتونم کاری کنم که اگه این کد اختصاصی قبلا تولید شده بود و به کاربر دیگه ای اختصاص داده شده بود ، یک بار دیگه کد رندوم جدید تولید بشه و دوباره چک بشه که آیا قبلا این کد ثبت شده یا نه...
با تشکر

saeedvir
سه شنبه 05 فروردین 1393, 18:10 عصر
میتونید فیلد تون را توی mysql به صورت unique تعریف کنید یا اینکه قبل از insert کردن یک Select بگیرید و چک کنید که قبلا وجود داره یا نه

MMSHFE
سه شنبه 05 فروردین 1393, 20:01 عصر
دو راه دارین که هر دو با کمک حلقه do انجام میشه. برای هرکدوم یک مثال میزنم.
راه اول:

do {
$code = rand();
$count = mysql_result(mysql_query("SELECT COUNT(*) AS `total` FROM `table` WHERE (`code`='{$code}')"), 0, 0);
} while($count > 0);
راه دوم:

do {
$code = rand();
mysql_query("INSERT INTO `table` VALUES ('{$id}','{$name}','{$code}')");
} while(mysql_affected_rows() == 0);
مزیت روش دوم سرعت بیشترشه (اگه تکراری نباشه درج میشه و نیاز به جستجو توی جدول نیست) و عیبش یکی اینه که ممکنه علت درج نشدن، یک خطای دیگه باشه (مثلاً id تکراری باشه) که باید حواستون به این مسئله باشه و مقادیر بقیه فیلدها و خود کوئری مشکلی نداشته باشه و مطمئن باشین که تنها دلیل درج نشدن، همین فیلد میتونه باشه و عیب دیگه اینه که باید فیلد code رو Unique کنید و این مسئله خودش سربار روی دیتابیس ایجاد میکنه که خیلی زیاد نیست ولی بهرحال یکسری چک کردنها و جدول Index اضافه و... به دیتابیس تحمیل میشه.