if elseif php简单计算器

if elseif php简单计算器,php,forms,if-statement,calculator,Php,Forms,If Statement,Calculator,这是计算器的表格 <form method='post' action='result.php' name='calc_form'> <input type='text' name='input1' size='15'> <select name='operation'> <option value="plus">+</option> <option value="minus">-</option> <

这是计算器的表格

<form method='post' action='result.php' name='calc_form'>

<input type='text' name='input1' size='15'>

<select name='operation'>
<option value="plus">+</option>
<option value="minus">-</option>
<option value="multi">*</option>
<option value="invalid">**</option>
<option value="divide">/</option>
</select>  

<input type='text' name='input2' size='15'>
<input type='submit' value='go'>


</form> 

+
-
*
**
/
这是带有if-elseif语句的php

<?php

define ('INVALID_INPUT', 'ERROR: invalid input');
define ('INVALID_OPERATOR', 'ERROR: invalid operator');


$result = null;

if 
(isset($_POST) and 
isset($_POST['input1']) and 
isset($_POST['input2']) and 
isset($_POST['operation']))
  {
  $input1 = $_POST['input1'];   
  $input2 = $_POST['input2'];
  $operation = $_POST['operation'];
     switch ($operation)
       {
       case 'plus':
         $result = $input1 + $input2;
         break;
       case 'minus':
         $result = $input1 - $input2;
         break;
       case 'multi':
         $result = $input1 * $input2;
         break;
       case 'divide':
         $result = $input1 / $input2;
         break;
       default: 
         $result = INVALID_OPERATOR;           
         break;
       }
    }  
elseif
(!isset($_POST) and 
isset($_POST['input1']) and 
isset($_POST['input2']) and 
isset($_POST['operation']))
{  
$result = INVALID_INPUT;
}

if ($result !== null)
{
echo <<<EOM


<h2>you calculate</h2> $input1 

<h2>and</h2>  $input2 

<h2>result is:</h2>

$result

EOM;
 }


我甚至试过只使用else语句,不带条件,但当表单中没有添加任何内容时,它不会显示无效输入。这里怎么了?

你的情况不对;这是不可能的:

!isset($_POST) and 
isset($_POST['input1']) and 
isset($_POST['input2']) and 
isset($_POST['operation'])
我猜你是说

!isset($_POST) or 
!isset($_POST['input1']) or 
!isset($_POST['input2']) or 
!isset($_POST['operation'])

你的情况不对;这是不可能的:

!isset($_POST) and 
isset($_POST['input1']) and 
isset($_POST['input2']) and 
isset($_POST['operation'])
我猜你是说

!isset($_POST) or 
!isset($_POST['input1']) or 
!isset($_POST['input2']) or 
!isset($_POST['operation'])

您可以使用else语句而不是else-if语句。这样,如果您更改输入,您就不必将每个输入都列出两次

例如:

试试这个-我在我的服务器上测试了这个,效果很好

计算器.php

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors',1);;

define ('INVALID_INPUT', 'ERROR: invalid input');
define ('INVALID_OPERATOR', 'ERROR: invalid operator');
$input1 = $input2 = $operation = null;
if (isset($_POST['input1']) and  isset($_POST['input2']) and isset($_POST['operation']))
  {

    $input1 = $_POST['input1'];   
    $input2 = $_POST['input2'];
    $operation = $_POST['operation'];
    if(is_numeric($input1) and is_numeric($input2))
    {
       switch ($operation)
       {
       case 'plus':
         $result = $input1 + $input2;
         break;
       case 'minus':
         $result = $input1 - $input2;
         break;
       case 'multi':
         $result = $input1 * $input2;
         break;
       case 'divide':
         $result = $input1 / $input2;
         break;
       default: 
         $result = INVALID_OPERATOR;           
         break;
       }
    }
    else 
    {
        $input1 = '';
        $input2 = '';
        $operation = 'invalid';
        $result = INVALID_INPUT;
    }  
}

?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title></title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body class="">

<form method='POST' action='calculator.php'>

<input type='text' name='input1' size='15' value="<?php echo $input1; ?>">

<select name='operation'>
<option <?php if($operation == 'plus') { echo 'selected';} ?> value="plus">+</option>
<option <?php if($operation == 'minus') { echo 'selected';} ?> value="minus">-</option>
<option <?php if($operation == 'multi') { echo 'selected';} ?> value="multi">*</option>
<option <?php if($operation == 'invalid') { echo 'selected';} ?> value="invalid">**</option>
<option <?php if($operation == 'divide') { echo 'selected';} ?> value="divide">/</option>
</select>  

<input type='text' name='input2' size='15' value="<?php echo $input2; ?>">
<span>=</span>
<input type='text' name='result' size='50' value="<?php echo $result; ?>">

<input type='submit' value='go'>


</body>
</html>

value=“plus”>+
value=“multi”>*
value=“divide”>/

您可以使用else语句而不是else-if语句。这样,如果您更改输入,您就不必将每个输入都列出两次

例如:

试试这个-我在我的服务器上测试了这个,效果很好

计算器.php

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors',1);;

define ('INVALID_INPUT', 'ERROR: invalid input');
define ('INVALID_OPERATOR', 'ERROR: invalid operator');
$input1 = $input2 = $operation = null;
if (isset($_POST['input1']) and  isset($_POST['input2']) and isset($_POST['operation']))
  {

    $input1 = $_POST['input1'];   
    $input2 = $_POST['input2'];
    $operation = $_POST['operation'];
    if(is_numeric($input1) and is_numeric($input2))
    {
       switch ($operation)
       {
       case 'plus':
         $result = $input1 + $input2;
         break;
       case 'minus':
         $result = $input1 - $input2;
         break;
       case 'multi':
         $result = $input1 * $input2;
         break;
       case 'divide':
         $result = $input1 / $input2;
         break;
       default: 
         $result = INVALID_OPERATOR;           
         break;
       }
    }
    else 
    {
        $input1 = '';
        $input2 = '';
        $operation = 'invalid';
        $result = INVALID_INPUT;
    }  
}

?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title></title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body class="">

<form method='POST' action='calculator.php'>

<input type='text' name='input1' size='15' value="<?php echo $input1; ?>">

<select name='operation'>
<option <?php if($operation == 'plus') { echo 'selected';} ?> value="plus">+</option>
<option <?php if($operation == 'minus') { echo 'selected';} ?> value="minus">-</option>
<option <?php if($operation == 'multi') { echo 'selected';} ?> value="multi">*</option>
<option <?php if($operation == 'invalid') { echo 'selected';} ?> value="invalid">**</option>
<option <?php if($operation == 'divide') { echo 'selected';} ?> value="divide">/</option>
</select>  

<input type='text' name='input2' size='15' value="<?php echo $input2; ?>">
<span>=</span>
<input type='text' name='result' size='50' value="<?php echo $result; ?>">

<input type='submit' value='go'>


</body>
</html>

value=“plus”>+
value=“multi”>*
value=“divide”>/

问题在于这段代码:

if 
(isset($_POST) and 
isset($_POST['input1']) and 
isset($_POST['input2']) and 
isset($_POST['operation']))
即使用户在输入字段中不输入任何内容,他们仍然会传递isset($\u POST['input1'])
,因为他们被“设置”为空字符串。请尝试将其切换到以下位置:

if 
(isset($_POST['input1']) && strlen($_POST['input1']) &&
 isset($_POST['input2']) && strlen($_POST['input2']) &&
 isset($_POST['operation']))

问题在于这段代码:

if 
(isset($_POST) and 
isset($_POST['input1']) and 
isset($_POST['input2']) and 
isset($_POST['operation']))
即使用户在输入字段中不输入任何内容,他们仍然会传递isset($\u POST['input1'])
,因为他们被“设置”为空字符串。请尝试将其切换到以下位置:

if 
(isset($_POST['input1']) && strlen($_POST['input1']) &&
 isset($_POST['input2']) && strlen($_POST['input2']) &&
 isset($_POST['operation']))

我试过这个,但是当表单为空而不是无效输入时,结果显示为零。我试过这个,但是当表单为空而不是无效输入时,结果显示为零。结果是一样的,结果显示为零而不是无效输入。这是不同的标记,但可以正常工作。只需添加$input1=$input2=$operation=$result=null;代码行中的result变量。我忘了将方法从get更改为post。结果是一样的,它显示的是零而不是无效的input。这是不同的标记,但它可以正常工作。只需添加$input1=$input2=$operation=$result=null;代码行中的结果变量。我忘了将方法从get更改为post。是的,这很好用。为了避免php注意到$input1=$input2=$result=null,这段代码中缺少了一段平静的代码;是的,这个很好用。为了避免php注意到$input1=$input2=$result=null,这段代码中缺少了一段平静的代码;