Как запустить функцию PHP из формы HTML? - PullRequest
7 голосов
/ 11 мая 2011

Я абсолютный новичок в веб-технологиях.Я знаю, что мой вопрос очень прост, но я не знаю, как это сделать.Например, у меня есть функция:

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 - второе текстовое поле, затем нажимаю кнопку и получаю результат 15 на той же странице. РЕДАКТИРОВАНИЕ Я пытался сделать это так:

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

Но это не работает, ответ всегда 0.

Ответы [ 5 ]

18 голосов
/ 11 мая 2011

У вас есть "функция" на стороне сервера . Серверный код запускается до и только до того, как данные возвращаются в ваш браузер (обычно отображаются как страницы, но также могут быть 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 & mdash; в частности, HTML-код & mdash; выводится непосредственно в ответ HTTP.
  • Вы заметите, что HTML-код <h1>Result:... - это внутри оператора PHP if. Это означает, что эта строка не будет выводиться при первом проходе, потому что нет $result.
  • Поскольку форма action не имеет значения, она отправляется на ту же страницу (URL), на которой уже работает браузер.
4 голосов
/ 11 мая 2011

Попробуйте.

  <?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 голосов
/ 11 мая 2011

Вам нужно собрать значения из переменной $_POST и передать их в функцию.

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

Однако имейте в виду, что вы не должны доверять вводу пользователя и, следовательно, должны проверять ипродезинфицировать ваш вклад.

1 голос
/ 11 мая 2011

Вы пропустите подчеркивания в

$_POST['number1']

Вот и все.

1 голос
/ 11 мая 2011

Переменные будут в переменной $ _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']);
}
...