PDA

View Full Version : ثبت نام با نام کاربری یا ایمیل تکراری



هزاره سوم
دوشنبه 25 خرداد 1394, 20:31 عصر
سلام
میخواستم بدونم چطوری موقع ثبت نام باید بررسی بشه که نام کاربری وارد شده با نام کاربری از قبل ثبت شده برابر هست یا نه؟؟
یا زمانی که پسورد وارد میشه چطور بررسی میشه با تکرار پسور برابر است؟؟
پ ن : اطلاعات فرم من میره سمت کنترلر و اون بررسی مشه

Mohammadsgh
دوشنبه 25 خرداد 1394, 21:05 عصر
برای نام کاربری اون فیلدی که داره وارد میشه رو با فیلد username باهم select کنید.یه همچین چیزی.



$user=SELECT * FROM `users` WHERE `username`='$_POST['username']
if(count($user)>0) {
echo 'این نام کاربری وجود دارد';
}else {
.....
}



برای پاسخ دوم هم به این صورت کار کنید


if($_post['password']===$_POST['reapetpassword']) {
...
}

majidmajid0098
سه شنبه 26 خرداد 1394, 00:06 صبح
سلام ..

اگر اسپم نباشه این دوستمون یادش رفته تشکر کنه ما جاش زدیم :D

fatima-php
سه شنبه 26 خرداد 1394, 09:18 صبح
معمولاً توی دیتابیس پسورد رو خام ذخیره نمیکنن و هش میکنن. شما باید رمز ورودی کاربر رو با همون الگوریتم که پسورد توی دیتابیس هش شده، هش کنید و اگه همون چیزی تولید شد که توی دیتابیس هست، رمز درست وارد شده.

fatima-php
سه شنبه 26 خرداد 1394, 09:20 صبح
البته کدی که گذاشتن هم اشتباهه و اینطوری باید کار کنید:

$username = mysql_real_escape_string($_POST['username']);
$user = mysql_query("SELECT * FROM `users` WHERE (`username`='{$username}')");
if(mysql_num_rows($user) > 0) {
echo 'این نام کاربری وجود دارد';
}
else {
...
}

Mohammadsgh
سه شنبه 26 خرداد 1394, 15:46 عصر
کدی که گذاشتم اشتباه نیست.خواستم روش کار رو بهشون بگم...
امنیت و... رو باید خودشون به کار ببرن

fatima-php
سه شنبه 26 خرداد 1394, 18:48 عصر
دوست عزیز کدتون اشتباهه چرا بحث بی دلیل میکنید؟ شما اصلاً دستورات Query رو توی PHP صدا نزدین. یک متغیر رو برابر با یک رشته گذاشتین که تازه کوتیشن هم نداره و بعد هم ازش count گرفتین؟ کوتیشنی که توی کوئری قبل از POST_$ باز کردین رو نبستین. دستورتون سمی کالن نداره. رمز رو مستقیماً مقایسه کردین و تازه === هم گذاشتین که باعث میشه برخی جاها درست کار نکنه. اگه قراره راهنمایی کنیم، بهتره کامل باشه تا وقتی یک نفر تازه کار هم تاپیک رو میخونه، بدردش بخوره وگرنه خوب همه سؤالاشون رو توی پیام خصوص میپرسیدن!

Mohammadsgh
سه شنبه 26 خرداد 1394, 19:37 عصر
من راه کلی رو گفتم.اگه قرار باشه دونه دونه موارد رو رعایت کنیم.خوب همون بخش رو بدن ما انجام بدیم.شما انگار عادیت دارید با همه کل کل کنید دست خودتون نیست آخه فاتیما هستید دیگه.یک خانوم با شخصیت و خوب:لبخند:من از شما پوزش می خوام دیگه تو این بخش کسی رو راهنمایی نمیکنم.شما راهنماییشون کنید:چشمک:

fatima-php
سه شنبه 26 خرداد 1394, 19:40 عصر
کار خوبی میکنید. راهنمایی نکردن بهتر از اشتباه راهنمایی کردنه.

hamedarian2009
سه شنبه 26 خرداد 1394, 19:47 عصر
البته دیگه توابع mysql هم منسوخ شدن و بهتره تازه کارها با mysqli کار با دیتابیس رو انجام بدن


$conn = mysqli_connect('localhost', 'root', '', 'users');
$username = mysqli_real_escape_string($_POST['username']);
$result = mysqli_query($conn, "SELECT * FROM `users` WHERE (`username`='{$username}')");
if (mysqli_num_rows($result) > 0) {
echo 'این نام کاربری وجود دارد';
}

fatima-php
سه شنبه 26 خرداد 1394, 19:56 عصر
درسته من هم اولش با mysqli نوشتم ولی چون با PDO کار میکنم، حدس زدم سینتکسش اشتباه باشه که الان که کد شما رو دیدم متوجه شدم واقعاً اشتباه بوده و اتصال رو نگذاشته بودم که فکر میکنم شما هم توی خط 2 نگذاشتین. برای همین به همون mysql برگردوندم که مشکلی پیش نیاد.

hamedarian2009
سه شنبه 26 خرداد 1394, 21:29 عصر
بله من هم چون از PDO استفاده میکنم خط ۲ رو فراموش کردم به تابع mysqli_real_escape_string ابتدا متغیر conn$ رو بدهید و بعد داده دریافتی از فرم رو به عنوان پارامتر دوم بهش بدهید

fatima-php
سه شنبه 26 خرداد 1394, 23:55 عصر
البته اگه از MySQLi بصورت شئ گرا استفاده کنیم دیگه این مشکلات رو نداریم.

Mohammadsgh
چهارشنبه 27 خرداد 1394, 00:55 صبح
استارتر روش گرفتن کاربر تکراری رو پرسیدن.چرا الکی تایپیک رو کش میدید؟بیخیال...

هزاره سوم
شنبه 30 خرداد 1394, 00:00 صبح
ممنون از دوستان بابت توضیحاتشون
بله یه راهش اینه که بعد از زدن دکمه بر فرض ذخیره دیتا وارد شده بررسی شه ایا تکراری هست یا نه که اگر تکراری هست دوباره بر میگرده سمت لاگین پیج
میخواستم بدونم توی php کدی هست که به محض اینکه کاربر نام کاربری رو وارد کرد و خواست مثلا بره ایمیل رو پر کنه همون لحظه بگه نام کابری تکراری هست یا نه
اصولا توی .net چون event ها وجود دارن میشه همچین حرکتی زد ولی اینجا نمیدونم چطور میشه!!!

fatima-php
شنبه 30 خرداد 1394, 01:49 صبح
باید با AJAX کار کنید. توی رویداد onBlur (رفتن از یک کنترل به کنترل دیگه که باعث میشه کنترل قبلی غیرفعال بشه و نقطه مقابل onFocus هست)، باید محتوا رو با تابع val جاوا اسکریپت بگیرین و برای سرور بفرستین و تو سرور چک کنید و اگه تکراری بود یه متن مشخص بفرستین و اینطرف باز چک کنید اگه اون متن بود پیغام خطا رو نشون بدین.

barnamenevis2016
شنبه 30 خرداد 1394, 11:06 صبح
سلام....فکر کنم باید از جاوا کمک بگیرید
کد زیر..کد html...


<label> نام کاربری* <span class="usernameCS"></span></label>
<input type="text" id='username' name='username' onkeyup="usernameAnalizer()" placeholder='username' size=20 /></br>

که کاربر با زدن کلیدی در فیلد باعث اجرای تابع usernameAnalizer می شه...که این تابع کارتو راه می اندازه که می تونه به شکل زیر باشه..


function usernameAnalizer(){
if(address==undefined)var address = 'ajax/register.php';
val=$('#username').val();
if ( val.length<4 ){
$('.usernameCS').html('');
$('.usernameCS').css({"color":"rgb(200,22,22)" });
}


$.post(address,{ val:val}, function(data){
$('.usernameCS').html(data);
if (data==' &check;'){
$('.usernameCS').css({"color":"rgb(22,200,22)" });
}else{
$('.usernameCS').css({"color":"rgb(200,22,22)" });
}
});
}

حالا کد Php ای که باید در آدرس ajax/register.php نوشته بشه




$val = $_POST['val'];
$DBObject = new DB();
$DBObject->connect();
$DBObject->setTableName('users');
if ( $DBObject->emp( "(username=\"$val\")" ) ){
echo ' &check;';
}else{
echo $not;
echo '<small>کلمه عبوری تکراریست</small>';
}

البته من کدای بالا رو قبلا ها نوشته بودم که برای شما گذاشتم....و او کدهای php که برای آنالیز و چک کردن username رو با کلاسی که خودم نوشته بودم چک کردم که طبیعتا برای شما کار نمی کنه....عوضش از همون کدای دوستان استفاده کنید...خواستید بگید بنویسم...یعنی این کدای php آخری رو باید درست بنویسید
و خلاصه کدای بالا بررسی می کنه و اگر username صحیح نبود...پیغام و یا نمادی رو از برای تذکر در تگ برای کاربر نمایش می ده span class="usernameCS"></span>>
البت شاید بهتر باشه از این موارد با احتیاط استفاده کنید که شاید فشار روی سرور بیاد