web-dev-qa-db-ja.com

HTMLフォームからPHP関数を実行する方法は?

私はWebテクノロジーの初心者です。私の質問は非常に単純であることは知っていますが、その方法がわかりません。たとえば、次の関数があります。

function addNumbers($firstNumber, $secondNumber)
{
    echo $firstNumber + $secondNumber;
}

そして私はフォームを持っています:

<form action="" method="post">
<p>1-st number: <input type="text" name="number1" /></p>
<p>2-nd number: <input type="text" name="number2" /></p>
<p><input type="submit"/></p>

テキストフィールドに変数を入力し、テキストフィールドに書き込んだ引数を使用してボタンを押すことで関数を呼び出すにはどうすればよいですか?たとえば、5-最初のテキストフィールド、10-2番目のテキストフィールドを記述し、ボタンをクリックすると、同じページに結果15が表示されます。 [〜#〜] editd [〜#〜]私はそうしようとしました:

$num1 = $POST['number1'];
$num2 = $POST['number2'];
addNumbers($num1, $num2);

しかし、それは機能しません。答えは常に0です。

7
Daria

あなたが持っている「機能」はサーバーサイドです。サーバーサイドコードが実行されます前と前のみデータがブラウザに返されます(通常はページとして表示されますが、 ajaxリクエスト の場合もあります)。

あなたが持っているフォームはクライアント側です。このフォームはブラウザによってレンダリングされ、サーバーに「接続」されていませんが、処理のためにサーバーにデータを送信するできます。

したがって、関数を実行するには、次のフローが発生する必要があります。

  1. サーバーはフォームとともにページを出力します。サーバー側の処理を行う必要はありません。
  2. ブラウザはそのページをロードし、フォームを表示します。
  3. ユーザーがフォームにデータを入力します
  4. ユーザーが送信ボタンを押すと、 HTTPリクエスト がデータとともにサーバーに送信されます。
  5. リクエストを処理するページ(最初のリクエストと同じである可能性があります)は、リクエストからデータを取得し、関数を実行して、結果を出力 HTMLページに入れます。

これがサンプルPHPスクリプトで、これをすべて実行します。

<?php

function addNumbers($firstNumber, $secondNumber) {
    return $firstNumber + $secondNumber;
}

if (isset($_POST['number1']) && isset($_POST['number2'])) {
    $result = addNumbers(intval($_POST['number1']), intval($_POST['number2']));
}
?>
<html>
<body>

    <?php if (isset($result)) { ?>
        <h1> Result: <?php echo $result ?></h1>
    <?php } ?>
    <form action="" method="post">
    <p>1-st number: <input type="text" name="number1" /></p>
    <p>2-nd number: <input type="text" name="number2" /></p>
    <p><input type="submit"/></p>

</body>
</html>

注意:

  • この「ページ」にPHPとHTMLコードの両方が含まれている場合でも、ブラウザはPHPコードが何であるかを認識しません。表示されるのは結果のHTML出力だけです。 。<?php ... ?>内のすべてが実行されますサーバーによって(この場合、echoはこの実行からの唯一の出力を作成します)、PHPタグ(具体的にはHTMLコード)は、HTTP応答に直接出力されます。
  • <h1>Result:... HTMLコードがinsidea PHP ifステートメントであることに気付くでしょう。これは、これが$resultがないため、最初のパスでは行は出力されません。
  • フォームactionには値がないため、フォームはブラウザがすでにオンになっているのと同じページ(URL)に送信されます。
20
Nicole

これを試して。

  <?php 
            function addNumbers($firstNumber, $secondNumber)
            {
            if (isset($_POST['number1']) && isset($_POST['number2']))
            {
                $firstNumber = $_POST['number1'];
                $secondNumber = $_POST['number2'];
                $result = $firstNumber + $secondNumber;
                    echo $result;
            }

            }
    ?>

            <form action="urphpfilename.php" method="post">
            <p>1-st number: <input type="text" name="number1" /></p>
            <p>2-nd number: <input type="text" name="number2" /></p>
            <?php addNumbers($firstNumber, $secondNumber);?>
            <p><?php echo $result; ?></p>
            <p><input type="submit"/></p>
4
mr_eclair

$_POST変数から値を収集し、それらを関数に渡す必要があります。

if ($_POST) {
  $number_1 = (int) $_POST['number1'];
  $number_2 = (int) $_POST['number2'];
  echo addNumbers($number_1, $number_2);
}

ただし、ユーザー入力を信頼するべきではないため、入力を検証およびサニタイズする必要があることに注意してください。

4
Dave Kiss

変数は$ _POST変数に含まれます。

関数に解析するには、次のようにする必要があります。

addNumbers($_POST['number1'],$_POST['number2']);

必ず入力を確認してください。ユーザーは入力に好きなものを追加できます。たとえば、is_numeric()関数を使用します

$number1 = is_numeric($_POST['number1']) ? $_POST['number1'] : 0;

また、関数内にエコーしないでください。返してください。

function addNumbers($firstNumber, $secondNumber)
{
    return $firstNumber + $secondNumber;
}

// check if $_POST is set
if (isset($_POST['number1']) && isset($_POST['number2']))
{
    $number1 = is_numeric($_POST['number1']) ? $_POST['number1'] : 0;
    $number2 = is_numeric($_POST['number2']) ? $_POST['number2'] : 0;

    echo addNumbers($_POST['number1'],$_POST['number2']);
}
1
Rene Pot

アンダースコアがありません

$_POST['number1']

それで全部です。

1
Cups