我的注册页面 register.php  表单POST提交到 regok.php页面处理,现在我发现地址栏直接输入localhost/regok.php 也进行验证了,怎么防止这个Bug呢 ???      regok.php代码
<?php
 require ("conn.php");
$_POST = mysqlClean($_POST);
$name=$_POST['user_name'];
$passwd=$_POST['pwd'];
$repasswd=$_POST['repwd'];
$city=$_POST['city'];
$email=$_POST['email']; if(($name=="") or ($passwd=="") or ($repasswd=="")  or ($city=="") or ($email==""))
    {
echo "<script language=javascript>alert('带*号的选项必须填写全!');history.go(-1)</script>";
exit;
    }      if(substr_count($name, " ")>0)
     {
echo "<script language=javascript>alert('帐号不能有空格');history.go(-1)</script>";
exit;
      }
    if (!ereg("^[_a-zA-Z0-9-]",$name))
    {
echo "<script language=javascript>alert('您的帐号格式不对,只能是英文或者数字');history.go(-1)</script>";
exit;
    }
$sql="SELECT * FROM user where name='$name'";
$result=mysql_query($sql);
if($myrow=mysql_fetch_row($result))
{
echo "<script language=javascript>alert('此帐号有人注册,请重新填写!');history.go(-1)</script>";
exit;
}if($passwd<>$repasswd)
{
echo "<script language=javascript>alert('二次输入的密码不一样,请检查');history.go(-1)</script>";
exit;
}
//mysql_query("SET NAMES gb2312");
$query = "insert into user(user_id,name,pw,city,email)
          values(null,'$name','$passwd','$city','$email')";
        //echo  $query;
        //exit;
$result = mysql_query($query)
or die("注册失败: " . mysql_error()); echo $result;
$rowid = mysql_insert_id();
   if ($rowid>0)
     {
       echo "注册成功!<hr><p>";
       echo "新注册的用户是:".$name."<p>";
   echo "<br><a href='login.php'>登录</a>";
 }
else
{
     echo "注册失败!<hr><p>";
     echo "<br><a href='register.php'>重新注册</a>";
}mysql_close();
?>
         

解决方案 »

  1.   

    在你的regok.php中可以加个判断条件,判断是否通过post方式提交数据.
    if( isset($_POST['submit']) ){ //submit为你提交按钮的名字.或者获取判断empty($_POST)是否为空
         
    } else{
        跳转到注册页
    }
      

  2.   

    可以在其他页面上来验证这个码,regok.php页面只用来生产认证码
      

  3.   


    从你的code看不出你说的情况....你再试试
      

  4.   

    我的问题就是这个  就是说 用户并没有在registe.php页面输入注册信息进行验证,而是直接输入localhost/regok.php 也进行验证了,出现提示信息(如图),现在就是要防止这个问题,当用户敲入网址时,提示错误或者 转到注册页面