最大的可能是你的PHP程序写的不合理!

解决方案 »

  1.   

    if ($email==null or !isset($email))????????
    你不会只这样判断吧,
    在这儿有 有关Email输入验正的贴子,你搜搜看,
      

  2.   

    最大的可能是你的php程序的问题,贴出来看看,
      

  3.   

    // ############################### 开始 注册 ###############################//  检查用户名是否存在
    function CheckUserid($userid) {
      global $DB_site,$USER_TABLE;  $userid=trim($userid);
      $userid=str_replace("", "", $userid);
      $userid = eregi_replace("( ){2,}", " ", $userid);
      $userid=trim($userid);
      
      $SQL="SELECT userid FROM $USER_TABLE WHERE userid='$userid'";
      $result=$DB_site->query($SQL);
      $row=$DB_site->fetch_array($result);
      return $row[userid];
    }//  检查email是否存在
    function CheckEmail($email) {
      global $DB_site,$USER_ATTR_TABLE;  $$email=trim($email);
      $SQL="SELECT email FROM $USER_ATTR_TABLE WHERE email='$email'";  $result=$DB_site->query($SQL);
      $row=$DB_site->fetch_array($result);
      return $row[email];
    }//  注册新用户
    function AddUser() {
      global ....  
      // 初始化参数
      $userid=trim($userid);
      $userid=str_replace("", "", $userid);
      $userid = eregi_replace("( ){2,}", " ", $userid);
      $userid=trim($userid);  $userid=str_replace("<[^>]*>", "", $userid);
      $username=str_replace("<[^>]*>", "", $username);
      $email = trim($email);
      $password = trim($password);
      $createtime=time();
      $last_ip=$REMOTE_ADDR;
      $ipaddress=$last_ip;
      
      // 为用户生成随机密码
      ..... 
      
      // 插入到用户信息表
      $SQL="INSERT INTO ....  // 插入到用户数据表
      $SQL="INSERT INTO ....  // 设置并发送email信息
      ......
    }
    if ($Ok) {  //  未 选 择 来 自 地 区
      if ((!isset($err)) and !isset($readme2)) $err="错误,请选择投资理念!";  //  未 选 择 来 自 地 区
      if ((!isset($err)) and !isset($province)) $err="错误,请选择来自地区!";  //  请 使 用 小 写 字 母“a-z”,数 字 “0-9”,和 下 划 线 “_”
      if ((!isset($err)) and (!ereg("[_0-9a-z]*",$userid))) $err="错误,请使用小写字母“a-z”,数字“0-9”,和下划线 “_”作为用户名!";  //  此 用 户 名 已 存 在
      if ((!isset($err)) and (CheckUserid($userid))) $err="错误,此用户名已存在!";  //  E - Mail 不 正 确
      if ((!isset($err)) and (!ereg("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email))) $err="错误,E-Mail输入不正确!";  //  此 用 户 名 已 存 在
      if ((!isset($err)) and (CheckEmail($email))) $err="错误,此eamil地址已经存在!";  if (!isset($err)) {
            AddUser();
            header("Location: complete.php?ej=$session[sessionhash]&a=suc");
      } 
    }
      

  4.   

    就是以上程序,我竟然发现数据库里的记录有email、来自地区等等都为空的记录,所以问题比较严重!
      

  5.   

    如果$err有值,后面的$err就不被赋值,你是意思是这样的吗?
    所有的换成“||”试一下,
      

  6.   

    是的,如果$err被赋值,就不可以插入数据库数据,你的建议我试一下。
    我想确认一下我的第二个问题php4.20和php4.21有重大安全bug,当register_globals = On时,可能通过传全局变量入侵,我的php版本是php4.11,我不知道这个版本有没有问题,我也想把register_globals 设置改为 off,但是这样程序改动很大,所以4.11版本如果没有问题我就不改了
      

  7.   

    没这么严重吧!
    bug?这个你可参考:
    http://www.csdn.net/expert/topic/920/920973.xml?temp=.5764429
      

  8.   

    php4.20的register_globals默认值才改为OFF的,也就是说PHP4.11下默认还是ON的。你可以看看http://www.php.net/ChangeLog-4.php具体修正过哪些,我想php4.11应该也没什么问题吧,主要是一个上传文件会溢出的问题。
    把register_globals改成OFF,其实改程序也不是很麻烦,如果要兼容低版本的PHP程序,那么那些文件加入如下几句就可以了
    if ( function_exists('ini_get') ) {
            $onoff = ini_get('register_globals');
    } else {
            $onoff = get_cfg_var('register_globals');
    }
    if ($onoff != 1) {
            @extract($HTTP_SERVER_VARS, EXTR_SKIP);
            @extract($HTTP_COOKIE_VARS, EXTR_SKIP);
            @extract($HTTP_POST_FILES, EXTR_SKIP);
            @extract($HTTP_POST_VARS, EXTR_SKIP);
            @extract($HTTP_GET_VARS, EXTR_SKIP);
            @extract($HTTP_ENV_VARS, EXTR_SKIP);
    }
      

  9.   

    狂谢phpteam(George) 兄的这段代码,省了我不少功夫!