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

$ _POST値に加えて文字列を割り当てているため、$ volume、$ gain、$ treble、$ middle、および$bassが実際にnullになることはありません。さらに、$ _ 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 に答える
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 に答える