以下是原代码:
<?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);
?>
提示: 你这个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 .这样如果重名 自然插入失败.这样少一步查询.但是这样 容易判断错误,有时候可能是网络问题 等等也是插入失败的.
if ($num !== 0)强制类型比较
怎么可以这样写追问
mysql_num_rows返回的是个数值呀,我用echo $num;输出结果,没有重复的时候是0,有重复的时候是1。
追答看错了,看成mysql_fetch_rows了,
本回答被网友采纳