PDA

View Full Version : سوال: جلوگیری از ثبت نام با نام کاربری و ... یکسان



ab.ali
شنبه 14 تیر 1393, 22:24 عصر
با سلام، من کی کد برای ثبتنام نوشتم به این صورت:




<?php

$Username=$_POST['Username'];
$Password=$_POST['Password'];
$Company=$_POST['Company'];
$Phone=$_POST['Phone'];

$Con=mysql_connect("localhost","root","");
mysql_select_db('zikohesab');
$Query="INSERT INTO register (Username,Password,Company,Phone) VALUES('{$Username}','{$Password}','{$Company}','{ $Phone}');";
mysql_query($Query);
mysql_close($Con);

echo "<body bgcolor='#F39C12'></body>";
echo "<div style='color:#FFF;font-family:B Yekan,Arial;font-size:13px;direction:rtl;text-align:center;line-height:100px'>$Username عزیز، شما با موفقیت ثبت نام کرده اید، برای ورود تا 10 ثانیه دیگر وارد صفحه اصلی می شوید و از آن جا وارد حساب خود شوید !</div>";

header('Refresh: 10; Index.html');

?>



اما یک مشکلی دارم اونم اینه که دو نفر شبیه هم نیز می تونن ثبت نام کنن، می شه اگر فردی با نام کاربری و نام شرکت و شماره تلفن یکسان عضو شد بهش پیام اخطار بده؟

barnamenevisforme
شنبه 14 تیر 1393, 22:30 عصر
سلام
تصحیح خودتون رو در بخش طراحی پایگاه داده انجام بدید
username رو به عنوان primary key انتخاب کنید،
تمام

Mohammadsgh
شنبه 14 تیر 1393, 22:36 عصر
فیلد یوزر نیم رو unique کنید

[younes]
شنبه 14 تیر 1393, 22:37 عصر
هم میشه این که قبل از ثبت نام یکتا بودن نام کاربری را چک کنید

ab.ali
شنبه 14 تیر 1393, 22:46 عصر
;2055415']هم میشه این که قبل از ثبت نام یکتا بودن نام کاربری را چک کنید

ممنون چطوری می تونم چک کنم؟

vahidqara
شنبه 14 تیر 1393, 23:06 عصر
سلام و درود ... دوستان نظرات درستی میدن مخصوصا باید unique کنید نام کاربری ...
ولی شما که زحمت میکشید کاش کد نویسیتون شی گرایی باشه و به اون سمت برید .. تنها یک پیشنهاده :لبخندساده:

ab.ali
شنبه 14 تیر 1393, 23:17 عصر
سلام و درود ... دوستان نظرات درستی میدن مخصوصا باید unique کنید نام کاربری ...
ولی شما که زحمت میکشید کاش کد نویسیتون شی گرایی باشه و به اون سمت برید .. تنها یک پیشنهاده :لبخندساده:

ممنون از نظر خوبتون، چشم چند وقت دیگه انشاالله یاد می گیرمش!:لبخندساده:

ab.ali
شنبه 14 تیر 1393, 23:18 عصر
فیلد یوزر نیم رو unique کنید

ممنون، چطور باید unique کنمش؟

DR.HTML
شنبه 14 تیر 1393, 23:56 عصر
از قسمت Structurehttp://localhost/phpmyadmin/themes/dot.gif (http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Fref man%2F5.6%2Fen%2Fcreate-table.html&token=dcce1ffee43aa74370f73a18718c989d) و index
unique رو انتخاب کنید

ab.ali
یک شنبه 15 تیر 1393, 00:05 صبح
از قسمت Structurehttp://localhost/phpmyadmin/themes/dot.gif (http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Fref man%2F5.6%2Fen%2Fcreate-table.html&token=dcce1ffee43aa74370f73a18718c989d) و index
unique رو انتخاب کنید

ممنون کار کرد، یک سوال دیگه چطور می شه پیغام به کاربر نشون داد که چنین نام کاربری و ... وجود داره و باید از نام کاربری دیگه ای استفاده کند؟

alibehroozi
یک شنبه 15 تیر 1393, 01:05 صبح
بررسی کنید اگر query درست انجام نشده پیام بده




if(!mysql_query($Query)){
echo "نام کاربری موجود است";
}

H:Shojaei
یک شنبه 15 تیر 1393, 01:16 صبح
سلام به نظر من یونیکوئی کردن به تنهایی کاربردی نیست شما باید چک کنید قبلش که اگه اون کاربر قبلا مقادیرش وارد شده بود دیگه وارد نشه...تو یه تاپیک دیگه هم گفتم که یونیکوئی کردن فقط یه خطا وقتی که یه نام تکراری میخواد درج بشه برمیگردونه ولی کاربر هیچوقت نمیفهمه خطا چی بوده اگرم بشه سخته... پیشنهاد من چک کردن با کد:$q=select * from tbl where name=$name-------$query_res=mysql_query($q)-----if(mysql_num_r ows($query_res)>0)echo فیلد تکراری----امیدوارم منظورو رسونده باشم...

ab.ali
یک شنبه 15 تیر 1393, 01:51 صبح
سلام به نظر من یونیکوئی کردن به تنهایی کاربردی نیست شما باید چک کنید قبلش که اگه اون کاربر قبلا مقادیرش وارد شده بود دیگه وارد نشه...تو یه تاپیک دیگه هم گفتم که یونیکوئی کردن فقط یه خطا وقتی که یه نام تکراری میخواد درج بشه برمیگردونه ولی کاربر هیچوقت نمیفهمه خطا چی بوده اگرم بشه سخته... پیشنهاد من چک کردن با کد:$q=select * from tbl where name=$name-------$query_res=mysql_query($q)-----if(mysql_num_r ows($query_res)>0)echo فیلد تکراری----امیدوارم منظورو رسونده باشم...

ممنون، متوجه منظورتون شدم، ولی به نظرتون اضافه کاری نیستکه دوباره کوئری انجام بدیم و ببینیم که فردی از قبل ثبت نام کرده یا نه بعدش ثبت نام رو آغاز کنیم؟

H:Shojaei
یک شنبه 15 تیر 1393, 02:07 صبح
خوب شما فک کنید کاربر میاد که ثبت نام کنه بعد شما فیلد رو یونیکویی کردی کاربر نام کاربریشو میزنه و مثلا بوده از قبل میگه نام قبلا ثبت شده خوب حالا یه وقت هست که کوئری به هر دلیل دیگه یه خطا برمیگردونه (مثلا کاربر باید عدد میزده حرف زده به جاش)!! حالا بازم به کاربر میگه نام کاربری قبلا ثبت شده بعد کاربر چه گناهی کرده!! در کل یونیکویی تنها و چک این که کوئری درست اجرا میشه یا نه به هیچ عنوان منطقی نیست یا باید روشی که گفتم یا mysql_error() استفاده بشه...حالا شاید راه های بهتری هم باشه و اساتید بهتر راهنمایی کنن که مثلا نخواد 2تا کوئری بنویسیم یکی واسه چک و یکی واسه ثبت...

Mohammadsgh
یک شنبه 15 تیر 1393, 10:35 صبح
درسته,هر دو کار باید انجام بشه.:لبخندساده:

us1234
یک شنبه 15 تیر 1393, 11:40 صبح
با صحبت های H:Shojaei موافقم.
برای بیهنه تر شدن فقط تعداد نام کاربری های مشابه را پیدا کنید به این صورت :

select count(*) as c_user from tbl_user where username='".$userName."'

MRmoon
یک شنبه 15 تیر 1393, 12:11 عصر
با سلام، من کی کد برای ثبتنام نوشتم به این صورت:




<?php

$Username=$_POST['Username'];
$Password=$_POST['Password'];
$Company=$_POST['Company'];
$Phone=$_POST['Phone'];

$Con=mysql_connect("localhost","root","");
mysql_select_db('zikohesab');
$Query="INSERT INTO register (Username,Password,Company,Phone) VALUES('{$Username}','{$Password}','{$Company}','{ $Phone}');";
mysql_query($Query);
mysql_close($Con);

echo "<body bgcolor='#F39C12'></body>";
echo "<div style='color:#FFF;font-family:B Yekan,Arial;font-size:13px;direction:rtl;text-align:center;line-height:100px'>$Username عزیز، شما با موفقیت ثبت نام کرده اید، برای ورود تا 10 ثانیه دیگر وارد صفحه اصلی می شوید و از آن جا وارد حساب خود شوید !</div>";

header('Refresh: 10; Index.html');

?>



اما یک مشکلی دارم اونم اینه که دو نفر شبیه هم نیز می تونن ثبت نام کنن، می شه اگر فردی با نام کاربری و نام شرکت و شماره تلفن یکسان عضو شد بهش پیام اخطار بده؟

درود.

دوستان راه حل این مشکل رو گفتند.

فقط بگم کدتون باگ sql injection داره.

از همین ابتدای راه روش کار کند:چشمک:

بعدش هم بهتره از PDO یا mysqli استفاده کنید چون توابع mysql از PHP 5.5 به بعد (اگه اشتباه نکنم) حذف میشن.

محمد.

Mohammadsgh
یک شنبه 15 تیر 1393, 13:03 عصر
بذارید شی گرایی رو یاد بگیرن نوبت به pdo هم میرسه.pdo هم یاد میگیرن:لبخندساده:

ab.ali
یک شنبه 15 تیر 1393, 18:12 عصر
ممنون، چشم حتما روشون کار می کنم از پیشنهاداتتون متشکرم.:لبخندساده: