1. 可以用js实现 假设用户名框叫text1, form1.text1.focus()2. 把正确和错误的放在两个session数组里, 聚焦同上3. 用正则  参考 /^([\x00-\x7F]|[\x80-\xFE][\x40-\x7E\x80-\xFE]){30}/   或  /[^\x00-\x80]/4. 应该需要有身份证号码的数据库  这里有个ASP.NET的程序 你参考下   http://www.codepub.com/software/view-software-11451.html

解决方案 »

  1.   

    1. 可以用js实现 假设用户名框叫text1,登陆的表单名为form1, 那么你可以在body里加一个onload事件(因为避免由于元素没有加载而造成找不到对象),触发form1.text1.focus() 使之在对应的焦点上2.这个也是用JS,你搜索JS登陆验证会有很多,给你一个简单的例子:
    <SCRIPT language=JavaScript type="text/javascript">
    function checkform()
    {
    //check the user input value 
    if(document.getElementById("uname").value=="")
    {
    alert("请输入用户名!");
    document.getElementById("uname").focus();
    return false;          
    }  
    var uuname=/^(\w){6,20}$/;
    if (!uuname.test(document.getElementById("uname").value))

    alert("用户名只能由6-20个字母、数字、下划线组成!"); 
    document.getElementById("uname").focus();
    document.getElementById("uname").select();
    return false; 
    }
    if(document.getElementById("upass").value=="")
    {
    alert("请输入您的密码!");
    document.getElementById("upass").focus();
    return false;
    }
    var uupass=/^(\w){8,20}$/;
    if (!uupass.test(document.getElementById("upass").value))

    alert("密码只能由8-20个字母、数字、下划线组成!"); 
    document.getElementById("upass").focus();
    document.getElementById("upass").select();
    return false; 
    }
    }
    </SCRIPT><form action="chklogin.php" method="post" name="form1" id="form1" style="margin:0px;" onsubmit="return checkform();">3.同第二个问题一样,参考代码如上。4.验证身份证的JS正则参考如下: var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
       var str=document.form2.sfz.value
       document.form2.sfz.value=document.form2.sfz.value.replace(/x+$/,"a");   
      if(aCity[parseInt(str.substr(0,2))]==null)
      {
      alert("身份证的地区不对!");
         document.form2.sfz.focus();
         return false;
      }
      sBirthday=str.substr(6,4)+"-"+Number(str.substr(10,2))+"-"+Number(str.substr(12,2));   
      var   d=new   Date(sBirthday.replace(/-/g,"/"))   
      if(sBirthday!=(d.getFullYear()+"-"+   (d.getMonth()+1)   +   "-"   +   d.getDate()))
      {
      alert("注册失败!原因:身份证的日期与你生日不吻合!");
         document.form2.sfz.focus();
         return false;
      }
      
      //var   iSum=0   
      //var   info="" 
       //for(var   i   =   17;i>=0;i   --)   iSum   +=   (Math.pow(2,i)   %   11)   *   parseInt(str.charAt(17   -   i),11)   
     //if(iSum%11!=1)
      //{
     //alert("注册失败!原因:身份证号不合格");
        // document.form2.sfz.focus();
         //return false;
      //}
      

  2.   

    1
    <script language="javascript">
    function SetFocus()
    {
    if (document.form1.userName.value=="")
    document.form1.userName.focus();
    else
    document.form1.userName.select();
    }
    </script>
    <form id="form1" name="form1" method="post" action="">
    <input name="userName" type="text" id="userName" size="15"  />
    </form>
    <script language="javascript">
    SetFocus()
    </script>2,3
    <SCRIPT language=JavaScript type="text/javascript">
    function checkform()
    {
    //check the user input value 
        if(document.getElementById("uname").value=="")
        {
            alert("请输入用户名!");
            document.getElementById("uname").focus();
            return false;          
        }  
        var uuname=/^(\w){6,20}$/;
        if (!uuname.test(document.getElementById("uname").value))
        { 
            alert("用户名只能由6-20个字母、数字、下划线组成!"); 
            document.getElementById("uname").focus();
            document.getElementById("uname").select();
            return false; 
        }
        if(document.getElementById("upass").value=="")
        {
            alert("请输入您的密码!");
            document.getElementById("upass").focus();
            return false;
        }
        var uupass=/^(\w){8,20}$/;
        if (!uupass.test(document.getElementById("upass").value))
        { 
            alert("密码只能由8-20个字母、数字、下划线组成!"); 
            document.getElementById("upass").focus();
            document.getElementById("upass").select();
            return false; 
        }
    }
    </SCRIPT><form action="chklogin.php" method="post" name="form1" id="form1" style="margin:0px;" onsubmit="return checkform();">4,
    http://hi.baidu.com/moonelf9989/blog/item/2cf32d3617492bdba2cc2b83.html
      

  3.   

    谢谢1楼的回答,所供方法正在测试中...第2个问题我自己解决了一部分。无意间花巨资习了一本《PHP函数参考大全》,在看到chechdata(int month,int day,int year)这个验证日期有效性的函数时,它有例子:
    if(chechdata($month,$day,$year)==false){
    echo "<script>alert('您输入的日期不合法');history.back();</script>";
    }其中的history.back();就可以让输入的合法的数据存在,不合法的消失。
    而我以前用的是:
    if(chechdata($month,$day,$year)==false){
    echo "<script>alert('您输入的日期不合法');</script>";
    echo '<meta http-equiv="refresh" content="0; url=“XXX">';
    }
    这其中的refresh一下子把原先的内容给刷没了。
      

  4.   

    第二个问题,如果go.history(-1)
    则原信息应仍能保留,否则为新