PDA

View Full Version : جلوگيري از ثبت نام كاربراني كه قبلا عضو شدند



mohsen60
دوشنبه 13 اردیبهشت 1389, 15:25 عصر
با اين كد كاربران عضو مي شوند ولي مي خوام كاربراني كه قبلا تو سايت عضو شدند پيغام ''You register before'' رو ببينند ولي يه صفحه سفيد مياد واون پيغام نمياد.
ميشه اشكال كد منو بگيد؟






<?php



$lognaoo = $_POST['lognaoo'];
$passoo1 = $_POST['passoo1'];
$passoo2 = $_POST['passoo2'];
/////////////////////////////////////////////////////////////////////////
///////////////////////////////////////search//////////////////////////////////
$conn = mysql_connect('localhost', '.....', '....') or die(mysql_error());
mysql_select_db('dbname', $conn) or die(mysql_error());
$sql = "SELECT * FROM table where $lognaoo=zxcvbnsua.lognaoo";
$result = mysql_query($sql,$conn);

if ($result) {
echo 'You register before';
mysql_close($conn);
exit;

}
else
{
/////////////////////////////////////////////////////////////////////////////
$pattern = '/^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$/';
if(!preg_match($pattern,$lognaoo )) { //If email doesn't match the pattern.
echo '<b>You have entered an incorrect email!</b>';
exit;
}
///////////////////////////////////////search//////////////////////////////////////////////////////////////////////////
if (strlen($lognaoo) == 0 or strlen($passoo1) == 0 or strlen($passoo2) == 0 )
{
echo '<b><br> Please complete all !<b>';
exit;
}
////////////////////////////////////////////////////////////////////////
if ( $passoo1 != $passoo2 ){
echo "<b><br> The passwords don't match!<b>";
exit;
}
////////////////////////////////////////////////////////////////
$db = mysql_connect("localhost", "", "");
if(!$db)
{
echo " Error : cannot open connection.";
exit;
}
mysql_select_db('dbname');
$query = " insert into table
(lognaoo,passoo1, passoo2 ) values ('".$lognaoo."','". $passoo1."','".$passoo2."')";
$result = mysql_query($query);
if($result)
echo '<b> your registration is completed successfully. </font></b>';
mysql_close($db);
}

?>

rapidpich
دوشنبه 13 اردیبهشت 1389, 19:12 عصر
بجای


if ($result) {
بنویس
PHP]]
if (mysql_num_rows($result)) {
[/php]

آخر کدت بنویس:



echo 'everything OK' ;
?>
ببین بازم صفحه سفید میاد؟
کدت از نظر امنیتی افتضاحه ها....

mohsen60
چهارشنبه 15 اردیبهشت 1389, 08:06 صبح
mysql_num_rows(): supplied argument is not a valid MySQL result resource
ممنونم از راهنماييتون ؤ اين كد رو نوشتم ولي اين warning رو داد

Reza1607
چهارشنبه 15 اردیبهشت 1389, 10:03 صبح
mysql_num_rows(): supplied argument is not a valid MySQL result resource
ممنونم از راهنماييتون ؤ اين كد رو نوشتم ولي اين warning رو داد

این warning می گه که کوئری شما اشتباه هست یعنی این خط

$sql = "SELECT * FROM table where $lognaoo=zxcvbnsua.lognaoo";
حالا توی این خط برای چی جلوی where از متغییر $lognaoo استفاده کردید من فکر کنم مشکل شما همین جا هستش

mohsen60
چهارشنبه 15 اردیبهشت 1389, 10:56 صبح
با سلام
من اين كد رو نوشتم اشكالم اين بودكه ميخوام كاربراني كه قبلا عضو سايت هستند پيغام you registered befofre رو ببينند و دوست خوبمون rapidpich ميگن اشكال از

if ($result) {
echo 'You register before';
mysql_close($conn

هست ؟
اقاي reza1607 در مورد سوال شما من متغير $lognaoo رو براي اين گذاشتم تا ورودي كاربر تا يوزرهايي كه تو بانك هستند چك شن



$lognaoo = $_POST['lognaoo'];
$passoo1 = $_POST['passoo1'];
$passoo2 = $_POST['passoo2'];
/////////////////////////////////////////////////////////////////////////
///////////////////////////////////////search//////////////////////////////////
$conn = mysql_connect('localhost', '.....', '....') or die(mysql_error());
mysql_select_db('dbname', $conn) or die(mysql_error());
$sql = "SELECT * FROM table where $lognaoo=zxcvbnsua.lognaoo";
$result = mysql_query($sql,$conn);

if ($result) {
echo 'You register before';
mysql_close($conn);
exit;

}
else
{
/////////////////////////////////////////////////////////////////////////////
$pattern = '/^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$/';
if(!preg_match($pattern,$lognaoo )) { //If email doesn't match the pattern.
echo '<b>You have entered an incorrect email!</b>';
exit;
}
///////////////////////////////////////search//////////////////////////////////////////////////////////////////////////
if (strlen($lognaoo) == 0 or strlen($passoo1) == 0 or strlen($passoo2) == 0 )
{
echo '<b><br> Please complete all !<b>';
exit;
}
////////////////////////////////////////////////////////////////////////
if ( $passoo1 != $passoo2 ){
echo "<b><br> The passwords don't match!<b>";
exit;
}
////////////////////////////////////////////////////////////////
$db = mysql_connect("localhost", "", "");
if(!$db)
{
echo " Error : cannot open connection.";
exit;
}
mysql_select_db('dbname');
$query = " insert into table
(lognaoo,passoo1, passoo2 ) values ('".$lognaoo."','". $passoo1."','".$passoo2."')";
$result = mysql_query($query);
if($result)
echo '<b> your registration is completed successfully. </font></b>';
mysql_close($db);
}

?>

rapidpich
چهارشنبه 15 اردیبهشت 1389, 17:53 عصر
ببین query صحیح اینطور باید باشه:


SELECT * FROM `table` WHERE `column`='$data'

دوره table از ایناست که کناره کلید 1 هست زیر ~ دور column هم همینطور
دور $data کت هست از اینا که فارسیش گ هست!
دیگه نمیدونستم چطوری باید توضیح بدم
درضمن قبل اینکار باید $data رو escape کنی



$data = mysql_real_escape_string( $data);

وگرنه سایتت هک میشه راحت

rasoolgh1
پنج شنبه 16 اردیبهشت 1389, 00:19 صبح
با تشکر از rapidpich
اینو بلد نبودم منم یاد گرفتم.
راستی قسمتی هست که درباره امنیت بحث بشه تو انجمن؟؟
می شه لینک بدید؟

trade_mark
پنج شنبه 16 اردیبهشت 1389, 04:22 صبح
ادرس قسمت امنیت سایت
http://barnamenevis.org/forum/forumdisplay.php?f=128
یه سرچ میزدی پیدا می کردی
بخدا سرچ اسونه.............
با تشکــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــر

mohsen60
پنج شنبه 16 اردیبهشت 1389, 11:27 صبح
دوست عزيز همه مطالبي كه تو تاپيك گفتيد نوشتم ،ازاينكه احساس مسئوليت كردي و كد هكو به من گفتي خيلي ممنونم از، لطف كن يه بار ديگه كد منو نگاه كن هر كار مي كنم بازم وقتي كد خودم رو مينويسم
{) if( resultصفحه سفيد مياد ووقتيكه كد شما if (mysql_num_rows($result)) { رو مينوسيم warning زير مياد.'
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

كد من :
<?php
$lognaoo = $_POST['lognaoo'];
$passoo1 = $_POST['passoo1'];
/////////////////////////////////////////////////////////////////////////
///////////////////////////////////////search//////////////////////////////////
$conn = mysql_connect('localhost', '.......', '......') or die(mysql_error());
mysql_select_db('MYDBNAME', $conn) or die(mysql_error());
$lognaoo= mysql_real_escape_string($lognaoo);
$sql = "SELECT * FROM ~MYTABLENAME~ where ~lognaoo~='$lognaoo'";
$result = mysql_query($sql,$conn);
if ($result) {
echo "<b>This USERNAME has already been created, please choose another USERNAME !";
mysql_close($conn);
exit;
}
else
{

$pattern = '/^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$/';
if(!preg_match($pattern,$lognaoo )) { //If email doesn't match the pattern.
echo '<b>You have entered an incorrectly formatted email address!</b>';
exit;
}
if (strlen($lognaoo) == 0 or strlen($passoo1) == 0 )
{
echo "<b><br> Please complete all fields in the registration form!";
exit;
}
////////////////////////////////////////////////////////////////////////

if ( $passoo1 != $passoo2 ){
echo "<b><br> The passwords don't match!";
exit;
}
//////////////////////////////////////////
////////////////////////////////////////////////////////////////
$db = mysql_connect('localhost', '...', '......');
if(!$db)
{
echo " Error : cannot open connection.";
exit;
}
mysql_select_db('MYDBNAME');
$query = " insert into ............
(lognaoo,passoo1 ) values ('".$lognaoo."','". $passoo1."')";
$result = mysql_query($query);
if($result){
echo '<b><font=verdana>Dear participant,<br> your registration is completed successfully. </font></b>';
mysql_close($db);
}

}

?>



ببین query صحیح اینطور باید باشه:




SELECT * FROM `table` WHERE `column`='$data'

دوره table از ایناست که کناره کلید 1 هست زیر ~ دور column هم همینطور
دور $data کت هست از اینا که فارسیش گ هست!
دیگه نمیدونستم چطوری باید توضیح بدم
درضمن قبل اینکار باید $data رو escape کنی



$data = mysql_real_escape_string( $data);

وگرنه سایتت هک میشه راحت

rapidpich
پنج شنبه 16 اردیبهشت 1389, 13:08 عصر
ببین دور column و table ~ نباید بگذاری.` باید بگذاری!
همون دکمه بدون shift!




$sql = "SELECT * FROM `MYTABLENAME` where `lognaoo`='$lognaoo'";
$result = mysql_query($sql,$conn);
if(mysql_errno($conn)) echo mysql_error($conn);


این خط رو اضافه کن بعد بگو خروجی چیه

mohsen60
شنبه 18 اردیبهشت 1389, 14:19 عصر
سلام Rapidpich عزيز ، خيلي خيلي ممنونم از لطفتون.
ميخوام كاربر از حروف بزرگ براي ثبت يوزر( ايميل) استفاده نكنه.البته تو كدوم تو pattern از نوشتن حروف بزرگ تو ايميل توسط كاربر جلو گيري ميشه مثلا ِA-Z حذف كردم ،ولي فقط تو بخش پسوند دومين هست.ولي بايد كاري كنم كه قبل و بعد از @ از نوشتن حروف بزرگ توسط كاربر جلوگيري بشه.


$pattern = '/^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$/';



ببین دور column و table ~ نباید بگذاری.` باید بگذاری!
همون دکمه بدون shift!




$sql = "SELECT * FROM `MYTABLENAME` where `lognaoo`='$lognaoo'";
$result = mysql_query($sql,$conn);
if(mysql_errno($conn)) echo mysql_error($conn);


این خط رو اضافه کن بعد بگو خروجی چیه

rapidpich
یک شنبه 19 اردیبهشت 1389, 14:12 عصر
بزار وارد کنن
strtolower کن بعد پردازش کن

jalaladdin
چهارشنبه 26 خرداد 1389, 20:37 عصر
سلام
این کد را برای فرم ثبت نام ساختم
<?php
$username=$_POST['username'];
$email=$_POST['email'];
$con=mysql_pconnect("localhost","root","");
if(!$con)
{die('could not connect');}
mysql_select_db("register",$con);
mysql_query("SET NAMES UTF8");
mysql_set_charset("utf8");
// check kardan username AND email
$sql="SELECT `id` FROM `users` WHERE `username`='$username' OR `email`='$email'";
$result = mysql_query($sql);
if(mysql_num_rows($result)>='1') {
echo "<script>alert('نام کاربری و یا آدرس ایمیل تکراری می باشد')</script>";
echo "<meta http-equiv='refresh' content='0; URL=newuser.php'>"; exit();
} else {
$sql="insert into users(username,email,password,repassword)
values('$_POST[username]','$_POST[email]','$_POST[password]','$_POST[repassword]')";
$result = mysql_query($sql);
if($result)
{
echo mysql_affected_rows().'<b> Information Save Success </b>';
} }
mysql_close($con);
?>
من میخواهم یک از این پیامها نشان دهد نام کاربری یا ایمیل نه هر دو یعنی اگر نام تکراری بود این خطا را نشان دهد که نام کاربری تکراریاست ویا اگر ایمیل تکراری بود خطای ایمیل تکراری را نشان دهد
تشکر

hadiaj168
پنج شنبه 27 خرداد 1389, 09:03 صبح
کدت از نظر امنیتی افتضاحه ها....


میشه بگید چرا؟

jalaladdin
پنج شنبه 27 خرداد 1389, 11:06 صبح
لطفا بیشتر توضیح دهید برای امنیت این کد باید چه کار کرد؟