验证 html 表单文本框中的数值范围.PHP 或 Javascript


Validate a numeric value range from html form textbox. PHP or Javascript

我有一个包含许多文本框的表单,即Volome,Gain,Blowble,Mid和Bass。只能输入整数,这是用javascript验证的,最大长度被设置为,所以没有问题。 但是我如何确保只输入 0 到 65535 之间的数字。

<?php
        $name = $_POST['ampMod'];
        $volume = 'Volume = '. $_POST['volume'];
        $gain = 'Gain = '. $_POST['gain'];
        $treble = 'Treble = '. $_POST['treble'];
        $middle = 'Middle = '. $_POST['middle'];
        $bass = 'Bass = '. $_POST['bass'];
if($volume != null && $gain != null && $treble != null && $middle != null && $bass != null)
{
        echo "<h3> $name </h3>";
        echo "<table><tr>";
        echo "<td>$volume</td>";
        echo "<td>$gain</td>";
        echo "<td>$treble</td>";
        echo "<td>$middle</td>";
        echo "<td>$bass</td>";
}
else
{echo ("Please try again. Values must be between 0-65535. 0=Off 65535=Full On 10<br><a href = '"ampchoice.php'">Click here to try again!</a>");}
?>

值得一提的是,您的$volume、$gain、$treble、$middle 和 $bass 实际上永远不会为 null,因为除了 $_POST 值之外,您还为它们分配了一个字符串。此外,在尝试使用$_POST值之前,应始终检查它们是否存在(否则您将收到一条未定义的通知消息)。

下面是一个基于您拥有的代码的 PHP 版本示例(未经测试,但应该可以正常工作)。

<?php
function isValidRange( $value, $low = 0, $high = 65535) {
  // validate / cast value as int (add additional validation here
  $value = (int)$value;
  if ( $value > $high || $value < $low ) {
    // return null (not a valid value)
    return null;
  }
  // otherwise the value is valid so return it
  return $value; 
}
// make sure the $name var is safe to use
$name = ( isset($_POST['ampMod']) ) ? htmlentities($_POST['ampMod'],ENT_QUOTES,'UTF-8') : null;
$volume = ( isset($_POST['volume']) ) ? isValidRange($_POST['volume']) : null; 
$gain = ( isset($_POST['gain']) ) ? isValidRange($_POST['gain']) : null; 
$treble = ( isset($_POST['treble']) ) ? isValidRange($_POST['treble']) : null; 
$middle = ( isset($_POST['middle']) ) ? isValidRange($_POST['middle']) : null; 
$bass = ( isset($_POST['bass']) ) ? isValidRange($_POST['bass']) : null; 
if( isset($volume) && isset($gain) && isset($treble) && isset($middle) && isset($bass) )
{
        echo "<h3> $name </h3>";
        echo "<table><tr>";
        echo "<td>Volume = $volume</td>";
        echo "<td>Gain = $gain</td>";
        echo "<td>Treble = $treble</td>";
        echo "<td>Middle = $middle</td>";
        echo "<td>Bass = $bass</td>";
        echo "</tr></table>";
} else {
  echo ("Please try again. Values must be between 0-65535. 0=Off 65535=Full On 10<br><a href = '"ampchoice.php'">Click here to try again!</a>");}
?>

最后,我不建议仅仅依靠JavaScript来实际检查你的值是否可以安全使用(即回显它们),但是使用js作为对用户的预警,然后使用PHP正确验证是最好的方法。

只是做这样的事情?不知道你为什么要在065535.之间穿梭,我怀疑你希望他们走那么高。如果您只是将10更改为65535

if($value > 10 || $value < 0)
{
    echo "Value cant be higher then 10 or lower then 0";
}

这可确保该值介于 100 之间

在这种情况下,我通常更喜欢静默地清理表单输入。你已经进行了客户端验证。如果该值高于允许的值,只需将该值设置为允许的最大值,而不是显示错误消息。

// Clean the posted data and prevent notices if not set
$volume = (isset($_POST['volume'])) ? (int) $_POST['volume'] : 0;
// Make sure the value is within a certain range
$min = 0;
$max = 10;
$volume = min($max, max($min, $volume));
您可以使用

filter扩展(从 5.2 开始默认捆绑):

$FILTER_VALIDATE_KNOB = array(
        'filter' => FILTER_VALIDATE_INT,
        'options' => array(
                'min_range' => 0,
                'max_range' => 65535,
        )
);
$res = filter_input_array(INPUT_POST, array(
  'ampMod' => $FILTER_VALIDATE_KNOB,
  'volume' => $FILTER_VALIDATE_KNOB,
  'gain' => $FILTER_VALIDATE_KNOB,
  'treble' => $FILTER_VALIDATE_KNOB,
  'middle' => $FILTER_VALIDATE_KNOB,
  'bass' => $FILTER_VALIDATE_KNOB,
));
if (is_null($res) || in_array(null, $res, true)) {
    // some or all fields are missing
    // - missing fields have null value
} elseif (in_array(false, $res, true)) {
    // some or all fields have a wrong value
    // - wrong values have false value
}

我会用javascript来做。这样,您就不必提交表单,如果用户键入的数字较大,则会显示警报(或更好的数字):

在输入字段中,只需调用 javascript 函数:

<input id="thefirstnumbervalue" type="text"  onchange="checknumber('thefirstnumbervalue')" />
<input id="thesecondnumbervalue" type="text"  onchange="checknumber('thesecondnumbervalue')" />

在函数中:

function checknumber(theid){
var mynumbervalue = document.getElementById(theid).value;
if (mynumbervalue > 65535){
document.getElementById(theid).value = "65535";
alert("Please try again. Values must be between 0-65535. ...");
}
if(mynumbervalue < 0){
document.getElementById(theid).value = "0";
alert("Please try again. Values must be between 0-65535 ...");
}
}    

这是原始javascript中的一种简单方法。如果你使用ajax和jquery,结果可能会更容易更好。这是对 php 解决方案的补充,因为您还应该在插入数据库之前检查数据。