有关PHP登陆的问题,请高手赐教! 注册的时候总是显示“用户名已被注册请重新选择用户名!”但能插入到库中

以下是原代码:
<?php
$conn=mysql_connect("localhost","root","root") or die("数据库连接失败".mysql_error());
$db_selected=mysql_query("use db_cjb",$conn);
mysql_query("set names 'gbk'");
$name=$_POST[name];
$pwd=$_POST[pwd];
$email=$_POST[email];
$zctime=date("Y-m-d H:i:s");
$sql=mysql_query("select * from user1 where name='$name'");
$num=mysql_num_rows($sql);

if($num!=0){
echo "<script>alert('用户名已被注册,请重新选择用户名!');history.back();</script>";
}else{
$query=mysql_query("insert into user1(name,pwd,email,zctime)values('$name','$pwd','$email',now())");
if($query)
echo "<script>alert('注册成功,请登陆!');window.location.href='login.php';</script>";
else
echo "<script>alert('注册失败,请重新注册!');window.location.href='zc.php';</script>";
};

mysql_free_result($sql);
mysql_close($conn);

?>

从代码上看 没问题, 你可以这么检查,if($num!=0){ 在这个上面打上 echo '1'; 你看看出来几个 1, 我认为可能是 你页面代码除了问题 两次跳转.结果第一次跳转插入成功了,第二次提示重复了.这个有时候不容易察觉的.
提示: 你这个PHP 写的很不科学,很不严谨. 不要这么写.尽量不要 js 代码 用 echo 的方法输出出来.最好输出一个值,前台判断再alert.追问

谢谢你的回答,有一点我不明白,为什么执行了echo "alert('用户名已被注册,请重新选择用户名!');history.back();";
确还要执行else后面的插入语句。

追答

你看来没明白我说的,( 结果第一次跳转插入成功了,第二次提示重复了. )if 和else 不可能一直把两个都执行, 你肯定是执行了2次,第一次执行了 else 内容, 第二次 又执行了 if里面的,.肯定是html 或者 js 写的有问题连续跳转的,或者 你连续 点击了2次 ,
你最好 多来点 echo 进行断点测试.查一下 到底哪里出了问题

追问

我把代码改为如下却正常,但不能再判断是否插入成功!
if($num!=0)
{echo "alert('用户名已被注册,请重新选择用户名!');history.back();";
}else{
echo "alert('注册成功,请登陆!');window.location.href='login.php';";
$query=mysql_query("insert into user1(name,pwd,email,zctime)values('$name','$pwd','$email',now())");};
else后面echo语句和插入语句换了个位置!不解!

追答

判断 插入成功与否 是在后台 sql语句的 返回结果. sql 如果返回正确 就插入成功.如果错误就是错的.
1. 你可以先select 的一下,如果 有这个名字了就肯定重复了 就返回重名了.
2. 名字字段设置为unique .这样如果重名 自然插入失败.这样少一步查询.但是这样 容易判断错误,有时候可能是网络问题 等等也是插入失败的.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-23
需要使用!==才可以。
if ($num !== 0)强制类型比较
第2个回答  2012-04-23
汗,mysql_num_rows方法返回的是一个数组.你用$num!=0肯定是一直为真啦,数组会有等于0的时候吗?数组最多为空.你用isset,empty都可以啊.
怎么可以这样写追问

mysql_num_rows返回的是个数值呀,我用echo $num;输出结果,没有重复的时候是0,有重复的时候是1。

追答

看错了,看成mysql_fetch_rows了,

本回答被网友采纳
第3个回答  2012-04-23
if($num>0)就可以

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网