2015-04-27 27 views
-1

我需要一个PHP表单(只有一个文本/数字字段),它将把用户传递给特定的地址,但只有在输入表单的代码的前4位数匹配1234 (例)。我了解基本形式,但我有点难以理解,之前向我提出的建议似乎并不完全正确。使用PHP验证HTML表单中的字符串

目的:例如...当用户输入“ 5678909876”为形式,他们将采取http://sample.web,否则页面只是一个说法“不正确的代码”

这里刷新就是我迄今感谢用户“jfhs” ......

<?php 
$valid_code = '3471'; 
$ok = true; 
if (isset($_POST['code']) && is_string($_POST['code'])) { 
    if (substr($_POST['code'], -strlen($valid_code)) === $valid_code) { 
     header('Location: http://sample.web/');  
     die(); 
    } 
    $ok = false; 
} 
?> 
<!-- some html here--> 
<?php if (!$ok):?> 
    <p style="color:red">Wrong code</p> 
<?php endif;?> 
<form method="post"> 
    <input name="code"> 
    <input type="submit" value="Check"> 
</form> 

目前,只有当进入第4号(只)代码工作。我需要它与描述和示例中的一系列数字一起工作。

+0

欢迎来到SO。不知道你为什么要检查它是一个字符串......似乎矫枉过正。你真的没有举一个例子说明你想要做什么,但是我从标题中假设,你想要它检查最后4位数字,并且它正在看第4位。这是正确的吗? – Twisty

+0

from php.net for substr:'$ rest = substr(“abcdef”,-2); //返回“ef”' – Twisty

+0

[请阅读'substr'函数](http://php.net/manual/it/function.substr.php)。 '$ rest = substr($ _ POST ['code'],0,4);'应该这样做。 (或者@lshas提出的更好的方法,如果您稍后决定更改编码器的长度,则会考虑代码的实际长度) – nhee

回答

1
<?php 
$valid_code = '3471'; 
$ok = true; 
if (isset($_POST['code']) && is_string($_POST['code'])) { 
    if (substr($_POST['code'], 0, strlen($valid_code)) === $valid_code) { 
     header('Location: http://sample.web/');  
     die(); 
    } 
    $ok = false; 
} 
?> 
<!-- some html here--> 
<?php if (!$ok):?> 
    <p style="color:red">Wrong code</p> 
<?php endif;?> 
<form method="post"> 
    <input name="code"> 
    <input type="submit" value="Check"> 
</form> 

这应该有效。 你的代码的问题是,它是检查agains字符串的最后四位数字,而据我所知,你要检查对字符串的4个第一数字。这段代码应该可以做到。

你的帖子有点矛盾,因为标题中说明了最后四位数字,但是在帖子中它说的是前四位。但你现在有两个解决方案,我在这里写的是四个第一个,而你已经拥有的是最后四个。

+0

我会试试看看它是否按预期工作。会回到你身边。谢谢! –

+0

上述代码按照描述和预期工作。大!谢谢! –

0
<php 
$valid_code = 1234; 
$pass=false; 
if (isset($_POST['code'] && substr($_POST['code'], 0, 4) == $valid_code){ 
    header('Location: http://sample.web/'); 
    die(); 
} 

那么,你应该做的:首先,总是假设答案是错误的。通过这种方式,你只允许用户在通过测试时通过(而不是在他们没有失败的时候),原因是你的测试可能设计不当。
然后,你只需要检查第一个字符。

请记住,通过POST或GET提交的任何内容始终是一个字符串,因此您可以将它视为一个字符串。

尽管如此,您可能需要阅读一些关于跨站点脚本的知识。

+0

THX回复! –