我的功能要求很简单,就是一个更改密码的功能,密码用md5加密存储在mysql中。表单三个字段:Password1原密码、Password2新密码,Password3确认真密码。function turnTo($prompt,$url)
{
echo <<<content
<script language="javascript">
alert("$prompt");
window.location.href="$url";
</script>
content;
}
if(!empty($_POST["Password1"]) && !empty($_POST["Password2"]))
{
require_once("include/connect.php");
$con = new connect($host,$user,$password,$db); $sql = "select PassWord from test where ID = 1";
$query = mysql_query($sql,$con->link); if($query && $result=mysql_fetch_array($query,MYSQL_ASSOC))
{
$temp = md5($_POST["Password1"]);
if($temp == $result["PassWord"])
{
$newPassword = md5($_POST["Password2"]);
$sql = "update test set PassWord = '$newSPassword' where ID = 1";
$query = mysql_query($sql,$con->link);
if($query)
{
turnTo("修改密码成功!",$_SERVER['PHP_SELF']);
}
else turnTo("修改密码失败!",$_SERVER['PHP_SELF']);
}
else turnTo("你输入的密码不符!",$_SERVER['PHP_SELF']);
}
}这个功能很简单,可是,真得很搞笑,比方原密码是admin,我输入PassWord1 ='admin',PassWord2='123';
提示:你输入的密码不符!,但是去看Mysql,确是密码已经修改成功了?我调试了很久,如果用zend studio的调试模式就没有问题,if($temp == $result["PassWord"])凑效,但是运行起来就是不一样。好像php似乎先update了然后再select,这样的话取出的结果再判断,自然提示与原密码不相符合。我晕,崩溃了。到底怎么回事啊,该如何解决?另外,就是,如果我源密码输错,系统也提示 你输入的密码不符!但是这时看mysql,密码没有改到。似乎输入源密码正不正确都判断“你输入的密码不符”。解决了给100分啊。
{
echo <<<content
<script language="javascript">
alert("$prompt");
window.location.href="$url";
</script>
content;
}
if(!empty($_POST["Password1"]) && !empty($_POST["Password2"]))
{
require_once("include/connect.php");
$con = new connect($host,$user,$password,$db); $sql = "select PassWord from test where ID = 1";
$query = mysql_query($sql,$con->link); if($query && $result=mysql_fetch_array($query,MYSQL_ASSOC))
{
$temp = md5($_POST["Password1"]);
if($temp == $result["PassWord"])
{
$newPassword = md5($_POST["Password2"]);
$sql = "update test set PassWord = '$newSPassword' where ID = 1";
$query = mysql_query($sql,$con->link);
if($query)
{
turnTo("修改密码成功!",$_SERVER['PHP_SELF']);
}
else turnTo("修改密码失败!",$_SERVER['PHP_SELF']);
}
else turnTo("你输入的密码不符!",$_SERVER['PHP_SELF']);
}
}这个功能很简单,可是,真得很搞笑,比方原密码是admin,我输入PassWord1 ='admin',PassWord2='123';
提示:你输入的密码不符!,但是去看Mysql,确是密码已经修改成功了?我调试了很久,如果用zend studio的调试模式就没有问题,if($temp == $result["PassWord"])凑效,但是运行起来就是不一样。好像php似乎先update了然后再select,这样的话取出的结果再判断,自然提示与原密码不相符合。我晕,崩溃了。到底怎么回事啊,该如何解决?另外,就是,如果我源密码输错,系统也提示 你输入的密码不符!但是这时看mysql,密码没有改到。似乎输入源密码正不正确都判断“你输入的密码不符”。解决了给100分啊。
表:
create table test(
id int not null auto_increment,
password varchar(100),
PRIMARY KEY (id)
);
html:
<form name="form1" action="" method="post">
<h1 id="title">登陆密码修改</h1>
<h2 id="login">请输入您的原密码与新密码</h2>
<p class="formt">原密码</p>
<p><input name="Password1" type="text" class="password"></p>
<p class="formt">新密码</p>
<p><input name="Password2" type="text" class="password"></p>
<p class="formt">再输入一次新密码</p>
<p><input name="Password3" type="text" class="password"></p>
<p id="button"><input type="image" src="images/loginin.gif" class="imgbutton" onClick="return checkapply()"/></p>
</form>checkapply()是一个简单的javascript验表。
对了:
$newPassword = md5($_POST["Password2"]);
$sql = "update test set PassWord = '$newSPassword' where ID = 1"; //这里多了一个S,但是我的程序
没问题,放上csdn上不小心弄错了。
希望LZ解决以后告知原因,这实在太奇怪了.
这个功能很简单,可是,真得很搞笑,比方原密码是admin,我输入PassWord1 ='admin',PassWord2='123';
,但是去看Mysql,确是密码已经修改成功了? LZ,你的password1是admin(原密码), Password2是新密码 ,按你的程序看,你提交了之后是完全可以把密码改掉的,提示:你输入的密码不符! 这一部分在你的php程序里貌似没有看到判断的地方,所以说你的提示很有可能是用js做的,可能提示之后跳转出了点问题..if(!empty($_POST["Password1"]) && !empty($_POST["Password2"]) && !empty($_POST["Password3"]))
{
if( $_POST["Password2"] != $_POST["Password3"] )
{
turnTo("修改密码失败!",$_SERVER['PHP_SELF']);
exit;
}
require_once("include/connect.php");
$con = new connect($host,$user,$password,$db);
$sql = "select PassWord from test where ID = 1";
$query = mysql_query($sql,$con->link);
if($query && $result=mysql_fetch_array($query,MYSQL_ASSOC))
{
$temp = md5($_POST["Password1"]);
if($temp == $result["PassWord"])
{
$newPassword = md5($_POST["Password2"]);
$sql = "update test set PassWord = '$newSPassword' where ID = 1";
$query = mysql_query(
$sql,$con->link);
if($query)
{
turnTo("修改密码成功!",$_SERVER['PHP_SELF']);
} else
turnTo("修改密码失败!",$_SERVER['PHP_SELF']);
}
else turnTo("你输入的密码不符!",$_SERVER['PHP_SELF']);
}
}
1 $sql = "select PassWord from test where ID = 1";
$query = mysql_query($sql,$con->link);
后加if(mysql_error() != "")
{
echo mysql_error();
exit();
}
2 $temp = md5($_POST["Password1"]);
前加:
var_dump($temp) . "<br/>";
var_dump(md5($_POST["Password1"])) . "<br/>";
exit();
}else{
}
多几对括号会死啊
{
if( $_POST["Password2"] != $_POST["Password3"] ) //判断Password2与Password3相不相同的由客户端js完成
{ //所有这部分可以不要,其他的我试一下。
turnTo("修改密码失败!",$_SERVER['PHP_SELF']);
exit;
}
require_once("include/connect.php");
$con = new connect($host,$user,$password,$db);
$sql = "select PassWord from test where ID = 1";
$query = mysql_query($sql,$con->link);
if($query && $result=mysql_fetch_array($query,MYSQL_ASSOC))
{
$temp = md5($_POST["Password1"]);
if($temp == $result["PassWord"])
{
$newPassword = md5($_POST["Password2"]);
$sql = "update test set PassWord = '$newPassword' where ID = 1";
$query = mysql_query(
$sql,$con->link);
if($query)
{
turnTo("修改密码成功!",$_SERVER['PHP_SELF']);
} else
turnTo("修改密码失败!",$_SERVER['PHP_SELF']);
}
else turnTo("你输入的密码不符!",$_SERVER['PHP_SELF']);
}
}另外,我也多增加一此输出看看。
{
echo <<<content
<script language="javascript">
alert("$prompt");
</script>
content;
}echo <<<temp1
\$_POST["Password1"]:$_POST[Password1]<br>
\$_POST["Password2"]:$_POST[Password2]<br>
\$_POST["Password3"]:$_POST[Password3]<br>
temp1;
if(!empty($_POST["Password1"]) && !empty($_POST["Password2"]))
{
require_once("include/connect.php");
$con = new connect($host,$user,$password,$db); $sql = "select PassWord from test where ID = 1";
$query = mysql_query($sql,$con->link); if($query && $result=mysql_fetch_array($query,MYSQL_ASSOC))
{
$temp = md5($_POST["Password1"]);
echo "md5(\$_POST[\"Password1\"]):$temp<br>";
echo "\$result[\"PassWord\"]:$result[PassWord]<br>";
if($temp == $result["PassWord"])
{ echo "已经进入判断\$temp==\$result[\"PassWord\"]成功<br>";
$newPassword = md5($_POST["Password2"]);
echo "\$newPassword:$newPassword<br>";
$sql = "update test set PassWord = '$newPassword' where ID = 1";
echo "\$sql:$sql<br>";
$query = mysql_query($sql,$con->link);
if($query)
{
alert("修改密码成功!");
}
else alert("修改密码失败!");
}
else alert("你输入的密码不符!");
}
}原密码是:admin
输入:admin admin admin 提示修改密码成功!
输出:
$_POST["Password1"]:admin
$_POST["Password2"]:admin
$_POST["Password3"]:admin
md5($_POST["Password1"]):21232f297a57a5a743894a0e4a801fc3
$result["PassWord"]:21232f297a57a5a743894a0e4a801fc3
已经进入判断$temp==$result["PassWord"]成功
$newPassword:21232f297a57a5a743894a0e4a801fc3
$sql:update test set PassWord = '21232f297a57a5a743894a0e4a801fc3' where ID = 1输入:admin 123 123 提示你输入的密码不符!
提示:
$_POST["Password1"]:admin
$_POST["Password2"]:123
$_POST["Password3"]:123
md5($_POST["Password1"]):21232f297a57a5a743894a0e4a801fc3
$result["PassWord"]:202cb962ac59075b964b07152d234b70 //这个是update后的结果啊,晕。
mysql> select * from test;
+----+----------------------------------+
| id | password |
+----+----------------------------------+
| 1 | 202cb962ac59075b964b07152d234b70 |
+----+----------------------------------+
mysql已经修改了啊。这时密码变成了123。这时输入:123 123 123 提示修改成功。
$_POST["Password1"]:123
$_POST["Password2"]:123
$_POST["Password3"]:123
md5($_POST["Password1"]):202cb962ac59075b964b07152d234b70
$result["PassWord"]:202cb962ac59075b964b07152d234b70
已经进入判断$temp==$result["PassWord"]成功
$newPassword:202cb962ac59075b964b07152d234b70
$sql:update test set PassWord = '202cb962ac59075b964b07152d234b70' where ID = 1故意输错密码:565g 123 123 提示“你输入的密码不符”。
$_POST["Password1"]:565g
$_POST["Password2"]:123
$_POST["Password3"]:123
md5($_POST["Password1"]):5b01db5814b5baa98d57a6e1d1269676
$result["PassWord"]:202cb962ac59075b964b07152d234b70难以理解了。
提示:
$_POST["Password1"]:admin
$_POST["Password2"]:123
$_POST["Password3"]:123
md5($_POST["Password1"]):21232f297a57a5a743894a0e4a801fc3
$result["PassWord"]:202cb962ac59075b964b07152d234b70 //这个是update后的结果啊,晕。
mysql> select * from test;
+----+----------------------------------+
| id | password |
+----+----------------------------------+
| 1 | 202cb962ac59075b964b07152d234b70 |
+----+----------------------------------+
mysql已经修改了啊。这时密码变成了123。 这句没有提示:已经进入判断$temp==$result["PassWord"]成功
你说是php问题还是js问题?如果进入了判断块,一定会有这个提示的,这可能是php输出缓存的问题。我暂时想。
考虑到可能是JS的问题,于是我把
if($query)
{
alert("修改密码成功!");
}
else alert("修改密码失败!");
}
else alert("你输入的密码不符!");
改成:
if($query)
{
echo "修改密码成功!";
}
else echo "修改密码失败!";
}
else echo "你输入的密码不符!";
问题依然。再考虑到sql的buffer问题。把mysql_query()改成mysql_unbuffered_query(),结果还是一样。这回真得
晕了。我猜测php可能是在处理包括sql连接查询等的页面,会把所有的sql缓存起来,先递交给mysql查询,完成查询结果,
再返回处理php。因此,返回的结果是已经update后的结果,因此造成上述的情况。只是个人猜测而已。再后来,以为是md5()作怪,去掉,无果。还试了其他方法,只要在浏览器运行就是提示“你输入的密码不符”,但实际上已经修改成功了。我实在无法理解了。哪一位帮忙啊,不行的话写一个程序给我,分全部给他,分不够开帖再送100分也行。功能要求很简单。
表单三个Text,password1、password2、password3,分别是用来原密码,新密码,重复输入新密码。
提交后,php先判断password1与用户的密码相不相同(不相同的话给出提示),相同的话才修改密码。修改成功与否与给提示。这个功能很简单啊。help~~~help~~~~~
if(!empty($_POST["Password1"]) && !empty($_POST["Password2"]))
{
.......
}
这个逻辑好像怎么都会进去 -。- 正确好的逻辑做法应该是转去另外一个页面吗?
比如成功 ChangePwd.php?result=success
比如失败 ChangePwd.php?result=fail
比如失败 ChangePwd.php?result=db_error
这样也比JS更好
chg.php
<?php
function turnTo($prompt,$url)
{
echo <<<content
<script language="javascript">
alert("$prompt");
window.location.href="$url";
</script>
content;
}if(!empty($_POST["Password1"]) && !empty($_POST["Password2"]))
{ $con = mysql_connect("localhost","root","pass","test"); $sql = "select PassWord from test.test where ID = 1";
$query = mysql_query($sql,$con);
if($query && $result=mysql_fetch_array($query,MYSQL_ASSOC))
{
$temp = md5($_POST["Password1"]);
if($temp == $result["PassWord"])
{
$newPassword = md5($_POST["Password2"]);
$sql = "update test.test set PassWord = '$newPassword' where ID = 1";
$query = mysql_query($sql,$con);
if($query)
{
turnTo("修改密码成功!",$_SERVER['PHP_SELF']);
}
else turnTo("修改密码失败!",$_SERVER['PHP_SELF']);
}
else turnTo("你输入的密码不符!",$_SERVER['PHP_SELF']);
} else echo "oops";
}
?>
<form name="form1" action="./chg.php" method="post">
<h1 id="title">登陆密码修改 </h1>
<h2 id="login">请输入您的原密码与新密码 </h2>
<p class="formt">原密码 </p>
<p> <input name="Password1" type="text" class="password"> </p>
<p class="formt">新密码 </p>
<p> <input name="Password2" type="text" class="password"> </p>
<p class="formt">再输入一次新密码 </p>
<p> <input name="Password3" type="text" class="password"> </p>
<p id="button"> <input type="image" src="images/loginin.gif" class="imgbutton" onClick=";"/> </p>
</form>
看不懂,没看过这种连法,mysql_connet有第四个参数吗?我用你的程序怎么输入都是echo "oops";以为mysql_connet有问题,便改成自己的连接,这回不是每次都是
echo "oops";但是跟我的原来的情况又是一样。输入正确的密码总是提示“你输入的密码不符”,而事实上已经修改密码
成功。还是未果,在你那边真得没有问题吗?如果没有,而在我这却有问题,难道跟php设置有关?
我这边真的没问题. mysql_connect拷贝你的,第四个参数忘记删掉了,不过执行没问题.
你用IE,Firefox结果都一样么?我这边都没问题.
$validcode=$HTTP_POST_VARS[validcode];
$old_pass=$HTTP_POST_VARS[old_pass];
$new_pass1=$HTTP_POST_VARS[new_pass1];
$new_pass2=$HTTP_POST_VARS[new_pass2];
$validcode=md5($validcode);
if($_SESSION['SafeCode']==$validcode)
{
$old_pass=md5($old_pass);
$new_pass1=md5($new_pass1);
$new_pass2=md5($new_pass2);
if($new_pass1==$new_pass2)
{
$sqlold = "select * from kejian_admin where name='$_SESSION[user_name]'";
$result_old=mysql_query($sqlold);
$arr_old=mysql_fetch_array($result_old);
$password=$arr_old['pwd'];
if($old_pass==$password)
{
$query = "update kejian_admin set pwd='$new_pass1' WHERE name='$admin_user'";
$DBLINK->Query($query);
echo $mesg.="<center>资料已经更新.<br>密码已经修改,下次登陆请输入新密码.<br><br>";
}else{
echo $mesg.="<center>原密码不正确.<br><br>";
}
}else{
echo $mesg.="<center>两次输入的新密码不一致.<br><br>";
}
}else{
echo $mesg.="<center>认证码不正确或已过期<br><br>";
}