Более одной кнопки отправки


У меня возникли проблемы с несколькими кнопками отправки в HTML и PHP, я попытался создать графический интерфейс для веб-калькулятора. Это действительно просто, но функция в php не так проста. Итак, у меня есть этот простой графический интерфейс с 6 кнопками отправки:

<?php 
$output= isset($_POST['output']) ? $_POST['output'] : "";

function calc(){
//calculate...
}

?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8" />
<title>Calc</title>
<style type="text/css">
 .bwidth {
      width: 100%;
}
</style>
</head>
<body>
    <form action="calc.php">
        <h1>
            <u>MY Own Calculator</u>
        </h1>
        <table border="3px" type="box" cellspacing="5px" width="250px">
            <tr style="height: 24px;">
                <td colspan="3"><input type="text" name="<?php $ausgabe ?>"
                    value="0" style="width: 98%;" /></td>
            </tr>
            <tr>
                <td><input class="bwidth" type="submit" name="1" value="1" /></td>
                <td><input class="bwidth" type="submit" name="2" value="2" /></td>
                <td><input class="bwidth" type="submit" name="3" value="3" /></td>

            </tr>
            <tr>
                <td><input class="bwidth" type="submit" name="minus" value="-" /></td>
                <td><input class="bwidth" type="submit" name="plus" value="+" /></td>
                <td><input class="bwidth" type="submit" name="enter"
                    value="=" /></td>
            </tr>
        </table>
    </form>
</body>

Теперь как я могу различать эти многочисленные кнопки отправки? Возможно даже иметь более одной кнопки отправки? Я попробовал разделить кнопки по значению... но это не сработало.

И у sb есть идея, как я могу добавить значение в существующее значение в текстовом поле? Итак, я могу нажать кнопку 1, и она напишет 1 в текстовом поле, а когда я нажму кнопку 2, она добавит число 2, так что это будет "12"?

Спасибо за все предложения!

Author: Synoon, 2013-04-23

7 answers

Вы можете попробовать проверить, какая кнопка установлена с помощью isset($_GET['input_name']).

Или вы могли бы назвать разные входные данные:

<form action="calc.php">
    <h1>
        <u>MY Own Calculator</u>
    </h1>
    <table border="3px" type="box" cellspacing="5px" width="250px">
        <tr style="height: 24px;">
            <td colspan="3"><input type="text" name="<?php $ausgabe ?>"
                value="0" style="width: 98%;" /></td>
        </tr>
        <tr>
            <td><input class="bwidth" type="submit" name="digit" value="1" /></td>
            <td><input class="bwidth" type="submit" name="digit" value="2" /></td>
            <td><input class="bwidth" type="submit" name="digit" value="3" /></td>

        </tr>
        <tr>
            <td><input class="bwidth" type="submit" name="operation" value="-" /></td>
            <td><input class="bwidth" type="submit" name="operation" value="+" /></td>
            <td><input class="bwidth" type="submit" name="operation" value="=" /></td>
        </tr>
    </table>
</form>

И в вашей функции:

function calc(){
    $op = isset($_GET['operation']) ? $_GET['operation'] : null;
    switch ($op) {
       case "+": .... ; break;
       case "-": .... ; break;
       case "=": .... ; break;
       default: "not supported";
    }

}
 2
Author: alexcristea, 2013-04-23 07:11:17

В вашем php

if(isset($_POST['minus'])) {
  // selected minus
}

if(isset($_POST['plus'])) {
  // selected plus
}

if(isset($_POST['enter'])) {
  // selected enter
}

Когда вы нажмете на кнопку, она будет отправлена вместе с вашими почтовыми данными на сервер. Все почтовые данные, которые вы найдете в массиве $_POST.

Если вы хотите посмотреть, что находится в массиве $_POST, вы можете запустить этот небольшой код:

<?php
   echo '<pre>' . print_r($_POST, true) . '</pre>';
?>
 4
Author: S.Visser, 2013-04-23 07:07:28

Вы можете сделать это с помощью JavaScript, сначала вам придется изменить свой <form> на что-то вроде:

<form id="form1" name="form1" method="post" action="calc.php">

Тогда JavaScript и кнопки должны выглядеть так:

<script>
function submitForm(action)
{
    document.getElementById('form1').action = action;
    document.getElementById('form1').submit();
}
</script>

...

<input type="button" onclick="submitForm('page1.php')" value="submit 1" />
<input type="button" onclick="submitForm('page2.php')" value="submit 2" />
 3
Author: Daanvn, 2013-04-23 07:09:55

Возможно, вы можете использовать одно имя для всех кнопок отправки.

<input type="submit" name="operator" value="+" />
<input type="submit" name="operator" value="-" />
<input type="submit" name="operator" value="=" />

И вы можете получить значения в php

<?php
    $opr = $_GET['operator'];
    if($opr == "+") {
         //do something
    } else if($opr == "-") {
         //do something
    } else if($opr == "=") {
         //do something
    }
?>
 3
Author: Nitesh Gupta, 2013-04-23 07:15:42

Когда вы отправляете форму в calc.php

Внутри calc.php проверьте, какой элемент формы получен.

if(isset($_REQUEST['minus']))
{
    // minus is clicked
}
else if(isset($_REQUEST['plus']))
{
    // plus is clicked
}
else if(isset($_REQUEST['enter']))
{
    // enter is clicked
}

Нажатая кнопка будет отправлена вместе с формой, а не с остальными...

Надеюсь, это поможет...

 2
Author: Virus, 2013-04-23 07:06:16

Да, у вас может быть n кнопок отправки в форме.

Укажите страницу действия в той же строке, что и с помощью кнопки отправить.

<form action="actionpage.php">
<input type="submit" value="1">
<input type="submit" value="2" formaction="postPage.php">
</form>

ОБНОВЛЕНО - ЕСЛИ ПРОБЛЕМЫ В IE

<form>
<input type="submit" value="1" onclick="document.formName.action='abc.php';">
<input type="submit" value="2" onclick="document.formName.action='xyz.php';">
</form>
 2
Author: sandy, 2013-04-23 07:28:57

Вы можете использовать JavaScript для отправки своей формы. После нажатия кнопки вы вызываете функцию JS, которая устанавливает некоторый скрытый элемент с помощью принудительной операции, а затем отправляет форму на сервер.

 0
Author: Martin Perry, 2013-04-23 07:07:03