ورود

View Full Version : تغییر رمز عبور



jalaladdin
دوشنبه 22 شهریور 1389, 06:55 صبح
برای تغییر رمز عبور این کد را نوشتم
<?php

$con=mysql_connect("localhost","root"," ");
$db=mysql_select_db("register",$con);
$username = addslashes($_POST['username']);
$password = md5($_POST['password']);
$result = mysql_query("SELECT COUNT(*) FROM `users` WHERE `username`='$username' AND `password`='$password';");
if(!$result)
{
echo "این نام کاربری وجود ندارد";
}
else
if($_POST['password']!= mysql_result($result, 0))
{
echo "شما پسورد فعلی را صحیح وارد کنید";
}
else if($_POST['newpassword']!=$_POST['confirmnewpasssword'])
{
echo "پسورد جدید با تکرار پسورد جدید با هم برابر نیستند";
}
else
$sql=mysql_query("UPDATE users SET password='{$_POST[newpassword]}' where username='{$_POST[username]}' & password='{$_POST[password]}'");
if($sql)
{
echo " رمز فعلی شما به رمز جدید تغییر یافت ";
}
?> اما با این پیغامها مواجه میشم لطفا راهنمای کنید
Warning: mysql_connect() [function.mysql-connect (http://www.barnamenevis.org/forum/function.mysql-connect)]: Access denied for user 'root'@'localhost' (using password: YES) in C:\wamp\www\4\change password.php on line 64

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\4\change password.php on line 65

Warning: mysql_query() [function.mysql-query (http://www.barnamenevis.org/forum/function.mysql-query)]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\4\change password.php on line 68

Warning: mysql_query() [function.mysql-query (http://www.barnamenevis.org/forum/function.mysql-query)]: A link to the server could not be established in C:\wamp\www\4\change password.php on line 68
این نام کاربری وجود ندارد

sama01
دوشنبه 22 شهریور 1389, 08:02 صبح
بررسی کنید ببینید آیا user و pass درستی برای اتصال به db وارد می‌کنید یا نه.
آیا رمز root خالی است یا یک فاصله دارد؟ شما الان رمزی که زده‌اید به صورت " "‌ است. یعنی یک فاصله.

jalaladdin
دوشنبه 22 شهریور 1389, 09:07 صبح
برای تغییر دادن رمز عبور :نام کاربری و کلمه عبور را صحیح وارد میکنم اما این خطا را می دهد
شما پسوردفعلی را صحیح وارد کنید

jalaladdin
دوشنبه 22 شهریور 1389, 09:44 صبح
دو فیلد دیگری با نام newpasswordو confirmnewpasswordبه جدول یوزر دیتابیس اضافه کردم وکد را بدین صورت تغییر دادم

<?php

$con=mysql_connect("localhost","root","");
$db=mysql_select_db("register",$con);
$username = addslashes($_POST['username']);
$password = md5($_POST['password']);
$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password';");
if(!$result)
{
echo "این نام کاربری وجود ندارد";
}
else
if($_POST['password']!= mysql_result($result, 0))
{
echo "رمزعبور فعلی وارد شده صحیح نمیباشد";
}
else if($_POST['newpassword']!=$_POST['confirmnewpasssword'])
{
echo "رمز عبور جدید با تکرار رمز عبور جدید یکسان نیستند";
}
else
$sql=mysql_query("UPDATE users SET password='{$_POST[newpassword]}' where username='{$_POST[username]}' & password='{$_POST[password]}'");
if($sql)
{
echo " رمز فعلی شما به رمز جدید تغییر یافت ";
}
?>اما این خطا را میدهد مشکل کجاست؟

Warning: mysql_result() [function.mysql-result (http://www.barnamenevis.org/forum/function.mysql-result)]: Unable to jump to row 0 on MySQL result index 3 in C:\wamp\www\4\change password.php on line 74
رمزعبور فعلی وارد شده صحیح نمیباشد

xoogle.ir
دوشنبه 22 شهریور 1389, 10:42 صبح
$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password';");


فکر میکنم اون ; که توی کوئری گذاشتید اضافه است یعنی بعد از 'password$'

sama01
دوشنبه 22 شهریور 1389, 11:03 صبح
دوست عزیز
1.
در مورد پست اول منظور من از رمز، رمز اتصال به پایگاه داده است. نه رمز شما. یعنی در کد زیر:
$con=mysql_connect("localhost","root"," ");

آخرین رشته مربوط به رمز اتصال به پایگاه است. آیا درست است؟ به نظرم باید "" باشه. نه " ".

2.
شما در این خط، رمز را با چه چیزی دارید مقایسه می‌کنید؟ یه بررسی کنید ضرر نداره.

if($_POST['password']!= mysql_result($result, 0))

funpatogh
دوشنبه 22 شهریور 1389, 23:47 عصر
SELECT * FROM `
آیا توی این کوئری که همه رو سلکت کردی بعد اینجا


mysql_result($result, 0);
کلمه رمز اولین فیلد هست که


$result, 0
کوئریت رو به این تغییر بده ببین درست میشه


$result = mysql_query("SELECT `password` FROM `users` WHERE `username`='$username' AND `password`='$password'");

jalaladdin
سه شنبه 23 شهریور 1389, 23:26 عصر
متاسفانه مشکل وجود دارد مرورگر این خطا را میدهد
Warning: mysql_result() [function.mysql-result (http://www.barnamenevis.org/forum/function.mysql-result)]: Unable to jump to row 0 on MySQL result index 3 in C:\wamp\www\4\change password.php on line 74
رمزعبور فعلی وارد شده صحیح نمیباشد

funpatogh
سه شنبه 23 شهریور 1389, 23:52 عصر
وقتی کوئریت نتونه خروجی مناسب بده بیرون تابع mysql_result خطا می دهد
مشکل در کوئری شماست که معلوم نیست چی رو بیرون می کشی و با رمز عبور مقایسه میکنید

jalaladdin
چهارشنبه 24 شهریور 1389, 10:27 صبح
من میخوام رمزعبور ازدیتا بیس با رمز عبور فعلی که کاربر وارد میکنه را باهم مقایسه کنه حالا نمدانم چطورمیشه این کوئری را تغییر داد

funpatogh
چهارشنبه 24 شهریور 1389, 21:30 عصر
ایراد اول
مگه رمزت رو توی db به صورت md5 ذخیره نکردی پس چرا اینجا نوشتی


$_POST['password']!= mysql_result($result, 0)
باید پست شده رمز عبور رو هم md5 کنی بعد مقایسه کنی


md5($_POST['password'])!= mysql_result($result, 0)
ایراد دوم


$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password';");
به این تغییر بده


$result = mysql_query("SELECT `password` FROM `users` WHERE `username`='$username' AND `password`='$password';");


البته اگه کل فرمت رو میزاشتی باز بهتر بود چون الگوریتمت یکم ایراد داره
حالا این کار هارو بکن ببین حل میشه نشد کل فرم + دستورات php رو بزار

jalaladdin
پنج شنبه 25 شهریور 1389, 10:00 صبح
ممنون از راهنماییتان باز مرورگر این خطا را میدهد
رمزعبور فعلی وارد شده صحیح نمیباشد

واین کد htmlکه برای تغییر رمز عبور نوشتم

<form action="change password.php" method="post" name="signup" id="signup" > <table summary="Demonstration form"> <tbody> <tr> <td><label for="username">نام کاربری:</label></td> <td><input type="text" name="username" size="35" maxlength="50" class="required textbox " id="name" title="لطفا نام کاربری خود را وارد کنید" /></td> </tr> <tr> <td><label for="password">رمز عبور فعلی:</label></td> <td><input type="password" name="password" size="35" maxlength="30" type="password" id="password" class="textbox"></td> </tr> <tr> <td><label for="newpassword">رمز عبورجدید:</label></td> <td><input name="newpassword" size="35" maxlength="30" type="password" id="newpassword" class="textbox"></td> </tr> <tr> <td><label for="confirmnewpassword">تکرار رمز عبورجدید:</label></td> <td><input name="confirmnewpassword" size="35" maxlength="25" type="password" id="confirmnewpassword" class="textbox"></td> </tr> <td> </td> <td><div align="center"><input name="Submit" value="تایید" type="submit" id="submit" class="button"></td></div> <td> </td> </tr> </tbody> </table> </form>

jalaladdin
پنج شنبه 25 شهریور 1389, 10:07 صبح
و این هم کد php

<?php

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("register") or die(mysql_error());

$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

$newpassword = md5($_POST['newpassword']);
$confirmnewpassword = md5($_POST['confirmnewpassword']);

$sql = mysql_query("SELECT 'password' FROM `users` WHERE `username`='$username' LIMIT 1;") or die(mysql_error());

if($row = mysql_fetch_row($sql)) {
if($row[0] == $password) {
if($newpassword == $confirmnewpassword) {
if(mysql_query("UPDATE users SET password='$newpassword' WHERE username='$username' AND password='$password' LIMIT 1;")) {
echo " رمز فعلی شما به رمز جدید تغییر یافت ";
} else {
echo 'خطا در اجرای کوئری: ', mysql_error();
}
} else {
echo "کلمه عبور با تکرار کلمه عبور مطابقت ندارد";
}
} else {
echo "رمزعبور فعلی وارد شده صحیح نمیباشد";
}
} else {
echo "این نام کاربری وجود ندارد";
}

?>

jalaladdin
جمعه 26 شهریور 1389, 11:23 صبح
لطفا یکی به سوالاتم جواب بده

funpatogh
جمعه 26 شهریور 1389, 14:05 عصر
من این فایل های شما رو Edit کردم و برات نمونه صحیح رو نوشتم


 <?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("register") or die(mysql_error());
function filterr($string){
if(!get_magic_quotes_gpc()){
return mysql_real_escape_string($string);
}else
return mysql_real_escape_string(stripslashes($string));
}

if(isset($_POST['Submit'])){
if(!empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['newpassword']) && !empty($_POST['confirmnewpassword'])){

$username = filterr($_POST['username']);
$password =md5(filterr($_POST['password']));
$sql = mysql_query("SELECT `password` FROM `users` WHERE `username`='$username' AND `password`='$password' ") or die(mysql_error());
if(mysql_num_rows($sql)>0){
$newpassword=filterr($_POST['newpassword']);
$confirmnewpassword=filterr($_POST['confirmnewpassword']);
if(strcasecmp($newpassword,$confirmnewpassword)==0 ){
$update=mysql_query("update `users` set `password`='".md5($newpassword)."' where `username`='$username'")or die(mysql_error());
if($update)
$prompt="رمز عبور تغییر کرد";
}else
$prompt="رمز عبور جدید و تکرار آن با هم یکی نیستند";


}else
$prompt="رمز عبور فعلی شما صحیح نمی باشد";

}else
$prompt="لطفا فرم را کامل پر کنید";
}

echo(isset($prompt))?$prompt:"";


?>

<form action="" method="post" name="signup" id="signup" >
<table summary="Demonstration form">
<tbody>
<tr>
<td><label for="username">نام کاربری:</label></td>
<td><input type="text" name="username" size="35" maxlength="50" class="required textbox " id="name" title="لطفا نام کاربری خود را وارد کنید" /></td>
</tr>
<tr>
<td><label for="password">رمز عبور فعلی:</label></td>
<td><input type="password" name="password" size="35" maxlength="30" type="password" id="password" class="textbox"></td>
</tr>
<tr>
<td><label for="newpassword">رمز عبورجدید:</label></td>
<td><input name="newpassword" size="35" maxlength="30" type="password" id="newpassword" class="textbox"></td>
</tr>
<tr>
<td><label for="confirmnewpassword">تکرار رمز عبورجدید:</label></td>
<td><input name="confirmnewpassword" size="35" maxlength="25" type="password" id="confirmnewpassword" class="textbox"></td>
</tr>
<td>&nbsp;</td>
<td><div align="center"><input name="Submit" value="تایید" type="submit" id="submit" class="button"></td>
</div>
<td>&nbsp;</td>
</tr>
</tbody></table>
</form>

حالا بسته به سلیقه خودت میتونی امنیتش رو بیشتر کنی و هر کاری که دوست داری انجام بدهی

jalaladdin
جمعه 26 شهریور 1389, 21:44 عصر
سلام دوست عزیز این کد رمز عبور را تغیر میدهد از شما بسیار ممنونم
واگر ممکن است این تابع را توضیح دهید که چکاری انجام میده
function filterr($string){
if(!get_magic_quotes_gpc()){
return mysql_real_escape_string($string);
}else
return mysql_real_escape_string(stripslashes($string));
}

funpatogh
جمعه 26 شهریور 1389, 21:58 عصر
این تابع برای جلوگیری از حملات sql هستش
مثلا اگر توی رشته ' باشه رو به '\ تغییر میدهد که میتونی به این فانکشن filterr تابع htmlspecialchars
هم اضافه کنی تا از حملات xss هم جلوگیری کنه
گفتم که این کد الگو هستش و امنیتش با خود شماست

jalaladdin
یک شنبه 09 آبان 1389, 10:05 صبح
از دوستان تقاضا دارم این کد را برایم تحلیل کنند ممنون
function filterr($string){
if(!get_magic_quotes_gpc()){
return mysql_real_escape_string($string);
}else
return mysql_real_escape_string(stripslashes($string));
}

if(isset($_POST['Submit'])){
if(!empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['newpassword']) && !empty($_POST['confirmnewpassword'])){

$username = filterr($_POST['username']);
$password =md5(filterr($_POST['password']));
$sql = mysql_query("SELECT `password` FROM `users` WHERE `username`='$username' AND `password`='$password' ") or die(mysql_error());
if(mysql_num_rows($sql)>0){
$newpassword=filterr($_POST['newpassword']);
$confirmnewpassword=filterr($_POST['confirmnewpassword']);
if(strcasecmp($newpassword,$confirmnewpassword)==0 ){
$update=mysql_query("update `users` set `password`='".md5($newpassword)."' where `username`='$username'")or die(mysql_error());
if($update)
$prompt="رمز عبور تغییر کرد";
}else
$prompt="رمز عبور جدید و تکرار آن با هم یکی نیستند";

binyaft
یک شنبه 09 آبان 1389, 12:17 عصر
function filterr($string){
if(!get_magic_quotes_gpc()){
return mysql_real_escape_string($string);
}else
return mysql_real_escape_string(stripslashes($string));
}
تابعی برای جلوگیری از هک شدن از طریق sql injection


if(!empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['newpassword']) && !empty($_POST['confirmnewpassword'])){
چک میکنه که درخواست های ارسال شده به برنامه خالی نباشه

$username = filterr($_POST['username']);
نام کاربری رو با همون تابع فیلتر میکنه

$password =md5(filterr($_POST['password']));
رمز عبور رو اول فیلتر میکنه و بعد md5

$sql = mysql_query("SELECT `password` FROM `users` WHERE `username`='$username' AND `password`='$password' ") or die(mysql_error());
password را از جدول users زمانی که رمز عبور و نام کاربری ای که کاربر وارد کرده مساوی با محتویات یک رکورد از جدول باشه ، بیرون میکشه

if(mysql_num_rows($sql)>0){
چک میکنه که ایا تعداد رکورد های بیرون کشیده شد از جدول از 0 بیشتر هست یا نه

$newpassword=filterr($_POST['newpassword']);
$confirmnewpassword=filterr($_POST['confirmnewpassword']);
رمز عبور فعلی و قبلی رو که کاربر وارد کرده ، فیلتر میکنه

if(strcasecmp($newpassword,$confirmnewpassword)==0 ){
اگر رمز عبور قبلی با فعلی مساوی نبود

$update=mysql_query("update `users` set `password`='".md5($newpassword)."' where `username`='$username'")or die(mysql_error());
رمز عبور و نام کاربری را بروز رسانی میکند


if($update)
$prompt="رمز عبور تغییر کرد";
}else
$prompt="رمز عبور جدید و تکرار آن با هم یکی نیستند";

اگر مقدار

$update=true;
بود میگه


رمز عبور تغییر کرد

و اگر نبود میگه

رمز عبور جدید و تکرار آن با هم یکی نیستند


موفق باشید