<?php session_start(); header("Content-type:text/html;charset=utf-8"); $link = mysqli_connect('localhost','123654lgh','etjyr2bm','123654lgh'); if (!$link) {  die("连接失败:".mysqli_connect_error());}$sql = "select * from login";$result = mysqli_query($link, $sql);$rows = mysqli_fetch_array($result);  $username = $_POST['username']; $password = $_POST['password']; $confirm = $_POST['confirm']; $email = $_POST['email'];  if($username == "" || $password == "" || $confirm == "" || $email == "")     if ((strlen($username) < 3)||(!preg_match('/^\w+$/i', $username))) { echo "<script>alert('信息不能为空!重新填写');window.location.href='zhuce.html'</script>"; } elseif ((strlen($username) < 3)||(!preg_match('/^\w+$/i', $username))) { echo "<script>alert('用户名至少3位且不含非法字符!重新填写');window.location.href='zhuce'</script>"; //判断用户名长度 }elseif(strlen($password) < 5){ echo "<script>alert('密码至少5位!重新填写');window.location.href='zhuce.html'</script>"; //判断密码长度 }elseif($password != $confirm) { echo "<script>alert('两次密码不相同!重新填写');window.location.href='zhuce.html'</script>"; //检测两次输入密码是否相同 } elseif (!preg_match('/^[\w\.]+@\w+\.\w+$/i', $email))  echo "<script>alert('邮箱不合法!重新填写');window.location.href='zhuce.html'</script>"; //判断邮箱格式是否合法 elseif(mysqli_fetch_array(mysqli_query($link,"select * from login where username = '$username'"))){ echo "<script>alert('用户名已存在');window.location.href='zhuce.html'</script>"; } else{ $sql= "insert into login(username, password, confirm, email)values('$username','$password','$confirm','$email')"; //插入数据库 if(!(mysqli_query($link,$sql))){ echo "<script>alert('数据插入失败');window.location.href='zhuce.html'"; }else{ echo "<script>alert('注册成功');window.location.href='yonghu.html'</script>"; }}?>

解决方案 »

  1.   

    你这个写法首先就不专业了,你见过谁php代码里面又是写js代码的
      

  2.   

    现在都是用AJAX提交,很少用这种传统的了,体验差
      

  3.   

    你这个写法是真有问题,实际中没有去用这种写法实现。
    但你既然这样写了,那给你提示一下吧
    首先,提交前检测用户名长度,密码位数,两次密码重合否,邮箱格式,这些都是本地行为,可以写成一个JS函数来完成,失败了就返回不提交
    用户名是否已被使用,这是服务器行为,是在上面这一本地验证通过了进行提交后服务器进行的验证,在另一页去写,yonghu.php,你把本地行为和服务器行为放在一起逻辑上就有问题,验证失败后跳转到本页,这就想当是刷新,所以会出现你那个提示重新提交。
    你非行要写在一个页面,也不是不可以,表单提交部分和接受数据写入数据库部份,要分别用过程或函数包装分开。