PDA

View Full Version : سوال: چند سوال در مورد عضویت



farshad_persia
دوشنبه 11 شهریور 1387, 20:00 عصر
سلام دوستان گل و خسته نباشید
میخواستم چند سوال در مورد عضویت داشته باشم
من یک جدول در دیتا بیس دارم که مربوط به یوزر ها هستش که چند فیلد داره
id
username
pass
email
usertype
code
میخواستم جوری تنظیم کنم که فیلد های , code , username, email و id فقط در جدول یک بار وجود داشته باشه .یعنی مثلا 2 نفر نتونن با یه یوزر ثبت نام کنند
این query هم نوشتم اما موقع اضافه کردن رکورد بازهم رکورد تکراری وارد میکنه:اشتباه:


CREATE TABLE `users3` ( `id` INT( 20 ) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 30 ) NOT NULL ,
`password` VARCHAR( 30 ) NOT NULL ,
`type` VARCHAR( 20 ) NOT NULL ,
`code` INT( 10 ) NOT NULL ,
`email` VARCHAR( 30 ) NOT NULL ,
PRIMARY KEY ( `id` , `username` , `type` , `code` ) );


سوال دوم اینکه
میخوام در فیلد email یوزر حتما یک email address معتبر وارد کنه

ممنون میشم اگر راهنمایی نمایید:چشمک:

sama01
دوشنبه 11 شهریور 1387, 20:34 عصر
در مورد نام کاربری می‌تونید دو کار انجام بدید. یکی اینکه در جدول، فیلد مربوط به نام کاربری را به صورت منحصر به فرد (unique) تعریف کنید. بدین ترتیب اگر رکورد جدیدی بخواهید ثبت کنید که نام کاربری آن تکراری باشد، پیام خطا صادر می‌شود و عملا چیزی ثبت نمی‌شود.
راه دوم این است که خود شما قبل از ثبت‌نام بررسی کنید که کسی چنین نام کاربری‌ای را ثبت نکرده باشد.

در مورد ایمیل اگر هدف شما این است که مطمئن شوید که واقعا چنین ایمیلی وجود دارد، بهترین کار این است که مثل خیلی از سایت‌ها، بخش از عملیات ثبت‌نام، از طریق ارسال ایمیل به ایمیل کاربر انجام بشه.

aryaei2000
دوشنبه 11 شهریور 1387, 22:28 عصر
در فرم ثبت نام میتونید از کدهای جاوا استفاده کنید یا از If در PHP استفاده کنید

aghasina
دوشنبه 11 شهریور 1387, 23:08 عصر
َما باید بیای چک کنی ببینی اسمی که وارد شده توی دیتا بیس هست یا نه
اگر نبود ارور میده وباید شرط بذاری که اگر ارور داد وجود ندارد
اگر سورسش رو میخوای بذارم

farshad_persia
سه شنبه 12 شهریور 1387, 02:12 صبح
با تشکر از همه دوستان
اگه ممکنه سینا عزیز برام سورس رو بزار
ممنونم ازت

aghasina
سه شنبه 12 شهریور 1387, 12:15 عصر
اینم از سورس

$sql=@"insert into user
(username,password,email)
values ('$user','$pass','$mail')";


$result=mysql_query($sql);

if(!$result)
{
print('متاسفانه نام کاربری انتخابی شما قبلا ثبت شده است');
exit();
}
else
{
print("ثبت نام با موفقیت به پایان رسید");

sama01
سه شنبه 12 شهریور 1387, 13:25 عصر
دوست عزیز؛ این کد شما چه کار می‌کنه؟ همیشه داده‌ها رو ثبت می‌کنه که.
قبلش باید می‌گفتید که در تعریف db باید مثلا فیلد نام کاربری را منحصر به فرد تعریف کند.
مثلا چنین چیزی:


CREATE TABLE `users3` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 30 ) NOT NULL ,
`password` VARCHAR( 30 ) NOT NULL ,
`type` VARCHAR( 20 ) NOT NULL ,
`code` INT( 10 ) NOT NULL ,
`email` VARCHAR( 30 ) NOT NULL ,
PRIMARY KEY ( `id`)
UNIQUE (`username`)
);

حال اگر بخواهیم رکوردی را ثبت کنیم که نام کاربری آن تکراری باشد، چیزی ثبت نمی‌شود و می‌توان از کد شما برای اعلام نتیجه به کاربر استفاده کرد.

ولی خیلی بهتره که علاوه بر روش بالا، در زمان ثبت نام هم، با استفاده از ajax به محض ورود نام کاربری در textBox مربوطه، فورا فرد را نسبت به مجاز بودن نام کاربری مطلع کنیم.

farshad_persia
سه شنبه 12 شهریور 1387, 15:50 عصر
با تشکر فراوان از دوستان
مشکل تا حدودی حل شد
اما به یک مشکل تازه برخوردم
من جدول رو اینجوری ساختم


CREATE TABLE `user` ( `id` INT( 8 ) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 40 ) NOT NULL ,
`email` VARCHAR( 40 ) NOT NULL ,
`code` INT( 8 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE ( `username` ,
`email` ,
`code` ));

یعنی فیلدهای username, email و code رو به حالت unique کردم تا رکورد تکراری داخلش ثبت نشه
وقتی مثلا با این دستور


INSERT INTO `user` (`username`,`email`,`code`) VALUES ('aaa','bbb','1234')

یک رکورد رو ثبت میکنم برای بار اول ثبت میشه و بار دیگه به این دستور ارور میده
اما این دستور زمانی با ارور مواجه میشه که هر سه فیلد تکراری باشند
یعنی وقتی این رکورد با دستور زیر ثبت میشه


INSERT INTO `user` (`username`,`email`,`code`) VALUES ('aaa','ccc','1234')

براحتی ثبت میشه :متفکر:
امیدوارم منظورم رو رسونده باشم

sama01
سه شنبه 12 شهریور 1387, 15:58 عصر
این طوری تعریف کن ببین درست می‌شه یا نه:



CREATE TABLE `users3` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 30 ) NOT NULL UNIQUE ,
`password` VARCHAR( 30 ) NOT NULL ,
`type` VARCHAR( 20 ) NOT NULL ,
`code` INT( 10 ) NOT NULL UNIQUE ,
`email` VARCHAR( 30 ) NOT NULL UNIQUE ,
PRIMARY KEY ( `id`)
);

farshad_persia
سه شنبه 12 شهریور 1387, 19:35 عصر
سما جان واقعا ممنون ازت مشکل حل شد:تشویق:

حالا نمیدونی چجوری باید رشته رو بررسی کنم که اگر داخلش @ داشت رکورد رو ثبت کنه ؟؟؟

این کار برای اینکه حتما چیزی که تو قسمت ایمیل می نویسن یه آدرس ایمیل باشه حتما:چشمک:

mojdeh,k
سه شنبه 12 شهریور 1387, 21:14 عصر
میتونین از توابع validatiion ، جاوا اسکریپت استفاده کنین .

sama01
سه شنبه 12 شهریور 1387, 23:24 عصر
این هم برای چک کردن ایمیل (از نظر ساختار ایمیل):


ereg("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email);
که اگر ایمیل که در متغیر email ذخیره شده ساختاری استاندارد داشته باشه، مقدار true و در غیر این صورت مقدار false را برمی‌گرداند.

farshad_persia
چهارشنبه 13 شهریور 1387, 17:12 عصر
دوست نازنین سما عزیز
همچنین دیگر دوستان
محبت شما را فراموش نخواهم کرد:چشمک:

vahid4134
پنج شنبه 14 شهریور 1387, 12:06 عصر
فانکشن های کامل دیگه ای هم وجود داره که دوست خوب گوگل خیلی بهتر می تونه بهتون کمک کنه
http://www.tienhuis.nl/files/email_verify_source.php