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

时间:2012-06-11 14:08:43

标签: php range html-form-post

我有一个包含许多文本框的表单,即Volome,Gain,Treble,Middle和Bass。只能输入整数,用javascript验证,Maxlength设置为,所以没问题。但是如何确保只输入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>");}
?>

5 个答案:

答案 0 :(得分:0)

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

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

这可确保该值介于100

之间

答案 1 :(得分:0)

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

// 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));

答案 2 :(得分:0)

我会用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解决方案的补充,因为您还应该在插入数据库之前检查数据。

答案 3 :(得分:0)

您可以使用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
}

答案 4 :(得分:0)

重要的是要提到你的$ 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正确验证是最好的方法去。