我有一个包含许多文本框的表单,即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>");}
?>
答案 0 :(得分:0)
做这样的事情?不知道为什么你会想要在0
和65535.
之间走,我怀疑你是否希望他们走得那么高。如果您只是将10
更改为65535
if($value > 10 || $value < 0)
{
echo "Value cant be higher then 10 or lower then 0";
}
这可确保该值介于10
和0
答案 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正确验证是最好的方法去。