2014-11-29 2 views
0

Это форма для калькулятораесли ElseIf PHP простой калькулятор

<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> 

Это PHP с тем, если ELSEIF заявление

<?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; 
} 

?>

Я даже попробовал только еще заявление и без условий но он не будет показывать INVALID INPUT, когда в форму ничего не добавляется. Что здесь не так?

ответ

2

Проблема с этим фрагментом кода:

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

Даже если пользователь не введет ничего в поле ввода, они все равно будут проходить isset($_POST['input1']), так как они 'set' в пустую строку. Попробуйте переключить его вместо этого:

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

Да, это прекрасно работает. Просто этот мир кода отсутствует, чтобы избежать уведомления о php $ input1 = $ input2 = $ result = null; –

1

Неправильное состояние; это невозможно:

!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']) 
+0

Я попытался это, но он показывает ноль, как результат, когда форма пуста вместо Invalid Input –

2

Вы могли бы просто использовать оператор еще вместо другого, если заявление. Таким образом, если вы измените ввод, вам не нужно будет перечислять каждый из них дважды.

например:

if (isset($_POST) and 
isset($_POST['input1']) and 
isset($_POST['input2']) and 
isset($_POST['operation'])) 
{ 
    // result = calculation 
} else 
{ 
    // result == code 
} 

Попробуйте это - я испытал это на моем сервере, и это работает!

calculator.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> 
+0

Результата такого же, он показывает ноль вместо Invalid Input –

+0

Try моей правки - если он работает, тогда отмечают это как ответ. –

+0

Это разная разметка, но да, она работает нормально. Просто добавьте $ input1 = $ input2 = $ operation = $ result = null; result в этой строке кода. –

Смежные вопросы