检查促销代码是否存在以及重定向之后

时间:2014-02-12 18:18:38

标签: javascript php forms validation

我有一个宣传页面。我希望只有拥有我通过电子邮件发送的代码的用户才能访问该页面。

所以我有这样的表格:

<form accept-charset="UTF-8" action="promotion.php" method="post" onSubmit="return checkcode(this);">
  <input name="code" type="text" id="code" maxlength="15" placeholder="Confirmation Code" required="required" />
  <input type="submit" value="Submit" />
</form>

这个Javascript:

function checkcode ( form )
{
  var pattern = /name="code" value="|2222|1234|8888|"/g
  if (!pattern.test(form.code.value)) {
    alert( "The code is incorrect." );
    form.code.focus();
    return false ;
  }

  return true ;
}

这个javascript代码运行不正常:如果我写一个更大的代码,更多的字符会重定向;我也不能添加很多,如果我写的更多代码/数字会重定向,当价值线的数字下降时,我需要添加100多个代码。有没有其他方法可以让它正常运作?也许有一个PHP代码可以从文件中读取代码并仅在代码存在于该文件中时重定向?

在任何情况下,JSFiddle重定向,javascript代码都无法正常工作。但是,如果我在我的服务器上传似乎工作,但仍然有我在下面写的错误。 http://jsfiddle.net/focusoft/e9DHg/

4 个答案:

答案 0 :(得分:1)

请不要这样做,尝试将所有代码放入DB&amp;然后使用AJAX验证代码将是一个更好的主意。如果验证成功,请尝试将隐藏的输入值更改为某些内容以供进一步填充。像这样使用JS作为客户端验证是一个非常糟糕的主意。请使用服务器端验证。

检查此代码,如果您使用Jquery,它将缩短代码和&amp;让它更好。我只使用简单的旧简单Ajax。

的index.php

<script type="text/javascript">
function GetXmlHttpObject(){
    var xmlHttp=null;
    try{
        xmlHttp=new XMLHttpRequest();
    }
    catch (e){
        // Internet Explorer
        try{
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e){
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

function search_code(){

    var parameter1= document.getElementById('code').value;
    if (xmlHttps1==null){
    alert ("Your browser does not support AJAX!");
    return;
    }
    var url="ajax_validate.php?para1="+encodeURIComponent(parameter1)+"&search=search";
    xmlHttps1.onreadystatechange=result_search_code;
    xmlHttps1.open("GET",url,true);
    xmlHttps1.send(null);
}
function result_search_code(){
    if (xmlHttps1.readyState==4){
    document.getElementById('Promotion_validation_Status').innerHTML="";
    document.getElementById('Promotion_validation_Status').innerHTML=xmlHttps1.responseText;
    }
}
var xmlHttps1=GetXmlHttpObject();
</script>


<form accept-charset="UTF-8" method="post" onSubmit="return validate()">
  <input name="code" type="text" id="code" maxlength="15" placeholder="Confirmation Code" required="required" />
  <input type="button" value="Submit" onClick="search_code()" />
</form>

<div id="Promotion_validation_Status" />

ajax_validate.php

<?php
if($_REQUEST['search']=='search'){
    $promotion_code=mysql_real_escape_string($_REQUEST['para1']);
    $sql="select count(*) from table where feild_name='".$promotion_code;
    $res1=mysql_query($sql1);
    $res1=mysql_fetch_array($res1);
    if($res1['count(*)']>0){
        echo "Sucess";
        } else {
         echo "Validation Failed";
    }
}
?>

我想,这应该会给你一个想法。在使用ajax之前,我将要求使用JS验证代码的格式。因此,您可以更轻松地将其与DB进行比较。这只是你开始这个的基本大纲。有很多东西我没有照顾。

答案 1 :(得分:1)

像Akhil Sidharth一样建议:

通过promocode对PHP页面进行AJAX调用。在PHP中验证并返回true或false ...

你不需要DB。

答案 2 :(得分:1)

哦,首先,永远不要在javascript中进行这样的验证。每个人都可以看到这一点!所以不安全! :)

你应该怎么做:

  1. 使用字段创建一个名为codes的数据库表:code,email(如果是个人代码)和code_active(boolean)。

  2. 使用AJAX发送代码(和电子邮件),或者只是将其发布到后端。

  3. 检查后端是否有效并返回true / false。
  4. (如果您不想使用数据库,那么只需在php数组中对代码进行硬编码) 没有数据库:

    <?php
        $a_codes = array(1111,2222,3333,4444,5555);
    
        if(isset($_POST['code'])){
            if(in_array($_POST['code'], $a_codes)){
                echo "VALID CODE";
            }else{
                echo "INVALID CODE";
            }
        }
    ?>
    

答案 3 :(得分:0)

假设您的代码和工作,并且只想扩展它。

您只需要更改正则表达式。

 /name="code" value="|2222|1234|8888|"/g

而不是:|2222|1234|8888| 试试这个:[0-9]{4}

其中:{number}(是您承认的字符数)

这样你就可以从0000-9999获得rando验证代码。

name="code" value="[0-9]{4}"