我有一个宣传页面。我希望只有拥有我通过电子邮件发送的代码的用户才能访问该页面。
所以我有这样的表格:
<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/
答案 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中进行这样的验证。每个人都可以看到这一点!所以不安全! :)
你应该怎么做:
使用字段创建一个名为codes的数据库表:code,email(如果是个人代码)和code_active(boolean)。
使用AJAX发送代码(和电子邮件),或者只是将其发布到后端。
(如果您不想使用数据库,那么只需在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}"