0

我有一个包含许多文本框的表单,即音量、增益、高音、中音和低音。只能输入整数,这是用 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>");}
?>
4

5 回答 5

0

只是做这样的事情?不知道您为什么要介于两者之间065535.我怀疑您是否希望他们走得那么高。如果您只是更改1065535

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

这确保该值介于100

于 2012-06-11T14:10:31.203 回答
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));
于 2012-06-11T14:27:15.923 回答
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 解决方案的补充,因为您还应该在插入数据库之前检查数据。

于 2012-06-11T14:43:41.470 回答
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
}
于 2012-06-11T14:49:07.440 回答
0

重要的是要提到您的 $volume、$gain、$treble、$middle 和 $bass 实际上永远不会为空,因为除了 $_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 进行正确验证是最好的方法。

于 2012-06-11T14:58:19.687 回答