2

最終編集(解決済み)

条件付きif(empty($num1))Required !に置き換えました。通知は問題なく機能します。関係者全員に感謝します。すでに失っていた力を取り戻し、ついに完全に機能するスタイルのウィジェットを作成し始めています:D 良い昼/夜を過ごしてください!if(!isset($num1))

編集:

isset() はチェックボックス専用であると愚かにも思い込んでいました... Notice: Undefined インデックスを削除しましたが、Required!の問題は解消されました。続く...


次の問題があります。製品価格の計算機を作成しましたが、初めてロードすると、まだ入力されていないテキスト入力の null 値が「認識」されません...私が正しい名前を付けているかどうかはわかりませんが、私はPHPに関しては初心者で、学習を始めたばかりです...

フォームは一般的に問題なく機能します。この小さな問題を取り除きたいだけです。

基本的に、次のコードがあります。

$num1 = (int)$_POST['number1'];
$num2 = (int)$_POST['number2'];
$ratio = 0.2;
$utw = 1;

if (! empty($num1) && ! empty($num2)) {

    if ($num1 * $num2 <= 200) {
        $ratio = 0.2;
    }
    elseif ($num1 * $num2 > 200 && $num1 * $num2 < 400) {
        $ratio = 0.15;
    }
    elseif ($num1 * $num2 >= 400) {
        $ratio = 0.1;
    }

    if (isset($_POST['condition'])) {
        $utw = 1.8;
    }

    $price = $num1 * $num2 * $ratio * $utw;

}
else {
    $price = 0;
}

<form method="post" action="">

        <label for="number1">
            <input type="text" name="number1" id="number1">
            <?php if(empty($num1)) : ?><span style="color: red;">Required!</span><?php endif; ?>
            <br />Label1
        </label>

        <label for="number2">
            <br /><input type="text" name="number2" id="number2">
            <?php if(empty($num2)) : ?><span style="color: red;">Required!</span><?php endif; ?>
            <br />Label2
        </label>

        <label for="condition">
            <br /><input type="checkbox" name="condition" name="condition">
            Label3<br />
        </label>

        <input type="submit" value="Run">   

        <?php if($price > 0) : ?>
        <p><?php echo "Price equals: $price"; ?></p>
        <?php endif; ?>
</form>

初めて表示すると、

Notice: Undefined index: number1 in C:\wamp\www\calc\index.php on line 3

(3行目は私が脱いだという事実のため、<!doctype html>明らか<?phpに)

それを避ける方法は?さらに、必須!ユーザーが送信ボタンをクリックした場合にのみ通知が表示されますか? 現在、入力フィールドが空であるため、最初から表示されています...「空」にしたくないだけです...視覚的に空または0に等しい...

私はこのすべてに数時間取り組んできましたが、そのPHPデバッグ通知のいくつかの解決策を見つけましたif (isset($var))が、チェックボックスがあると仮定すると、主にメソッドが関係しています...まあ、私はありません...デフォルト$_POST値は実際に置き換えることでした

$num1 = (int)$_POST['number1'];

と:

if ($_POST['number1'] == '') { 
$num1 = '0'; 
else { 
$num1 = $_POST['number1'] ; 
}

まあ、通知はまだ表示されます:(

誰か助けてくれませんか?

4

4 に答える 4

2

isset は実際にあなたが望むものだと思います。使用している入力の種類は関係ありません。次のようなヘルパー関数を作成できます。

function getPost($key, $default) {
    if (isset($_POST[$key]))
        return $_POST[$key];
    return $default;
}
于 2012-11-05T02:13:45.107 に答える
1

isset() または array_key_exists() を使用して、処理を試みる前に変数が存在するかどうかを確認します。

于 2012-11-05T02:10:31.613 に答える
1

filter_input()スーパーグローバルに直接アクセスする代わりに使用することをお勧めします。

$num1 = filter_input(INPUT_POST, 'number1', FILTER_SANITIZE_NUMBER_INT);
$num2 = filter_input(INPUT_POST, 'number2', FILTER_SANITIZE_NUMBER_INT);
于 2013-11-13T22:51:05.570 に答える
0
if($_SERVER['REQUEST_METHOD'] === 'POST'){
    if ($_POST['number1'] == '') { 
        $num1 = '0'; 
    else { 
        $num1 = $_POST['number1'] ; 
    }
}

ただし、別の観点からコードを見てください。書かれていることは、「何もなければ0になる。何かあれば、それが得られる。

したがって、変数をデフォルトで 0 に設定し、値が $_POST で使用可能な場合はそれを割り当てます

$num1 = 0;
if(isset($_POST['number1'])){
    $num1 = $_POST['number1'];
}
于 2012-11-05T02:15:16.633 に答える