Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Калькулятор на ПХП (https://javascript.ru/forum/server/22223-kalkulyator-na-pkhp.html)

romantik2011 11.10.2011 01:01

Калькулятор на ПХП
 
Не срабатывает вывод текста Неизвестный оператор ( и подставиться должно $rez). если неверно ввести что-то вообще ничего не выводится, а должно выводится.
<?php
if(isset($_POST['chislo1']) && isset($_POST['chislo2'])
&& is_numeric($_POST['chislo1']) && is_numeric($_POST['chislo2'])
&& !empty($_POST['znak']) ) 
{
$ch1 = $_POST['chislo1']*1;
$ch2 = $_POST['chislo2']*1;
$znak = $_POST['znak'];
$rez = '';
switch($znak){
case '+': $rez = $ch1 + $ch2; break;
case '-': $rez = $ch1 - $ch2; break;
case '*': $rez = $ch1 * $ch2; break;
case '/': if($ch2!=0){ $rez = $ch1 / $ch2; }else { echo 'Деление на ноль'; } break; 
default: echo "Неизвестный оператор $rez";
}
echo $rez;
echo '<hr width="100%" color="blue" />';
} 
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head><title>Моя страница</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<input type="text" name="chislo1"/><br />
<input type="text" name="znak"/><br />
<input type="text" name="chislo2"/><br />
<input type="submit" value="Вычислить" >
</form>
</body>

</html>

romantik2011 11.10.2011 01:31

Просто вот подобный код и он срабатывает, а мой код не выводит ничего если не правильно ввел или вообще ничего не ввел и нажал ЭНТЕР.

<?php

// Проверим, была ли форма отправлена
if(
	isset($_POST['num1']) && is_numeric($_POST['num1']) &&
	isset($_POST['num2']) && is_numeric($_POST['num2']) &&
	isset($_POST['operator']) && !empty($_POST['operator'])
){
	// Отфильтруем полученные значения
	$num1 = $_POST['num1'] * 1;
	$num2 = $_POST['num2'] * 1;
	$operator = $_POST['operator'];
	
	// Создадим переменную для хранения результата вычисления
	$output = "$num1 $operator $num2 = ";
	
	// В зависимости от оператора будем выполнять разные математические действия
	switch ($operator){
		case '+':
			$output .= $num1 + $num2; break;
		case '-':
			$output .= $num1 - $num2; break;
		case '*':
			$output .= $num1 * $num2; break;
		case '/':
			// В случае деления не забываем проверить,
			// чтобы делитель не был равен нулю
			if($num2 == 0){
				$output = 'Деление на ноль запрещено!';
			}else{
				$output .= $num1 / $num2;
			}
			break;
		default:
			$output = "Неизвестный оператор '$operator'";
	}
	
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
	<title>Калькулятор</title>
	<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>

<h1>Калькулятор</h1>

<?php
// Если результат существует, выводим его
if(isset($output)){
	print "<p>Результат: $output</p><hr />";
}
?>
<!-- http://www.softtime.ru/info/articlephp.php?id_article=69 -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

Число 1:<br />
<input type="text" name="num1" /><br /><br />

Оператор:<br />
<input type="text" name="operator" /><br /><br />

Число 2:<br />
<input type="text" name="num2" /><br /><br />

<input type="submit" value="Считать!" />

</form>

</body>
</html>

Serg_pnz 11.10.2011 07:34

Может все же так?
default: echo "Неизвестный оператор $znak";

romantik2011 14.10.2011 02:06

Хочу проверить каждое поле на пустоту, вот так пробую что-то не срабатывает.

<?php

if(empty($_POST['chislo1']))
echo 'Пожалуйста, введите Число №1 <br />';

if(empty($_POST['chislo2']))
echo 'Пожалуйста, введите Число №2 <br />';

if(empty($_POST['znak']))
echo 'Введите знак во второе поле <br />';


if(isset($_POST['chislo1']) && isset($_POST['chislo2'])
&& is_numeric($_POST['chislo1']) && is_numeric($_POST['chislo2'])
&& !empty($_POST['znak']) )
{
$ch1 = $_POST['chislo1']*1;
$ch2 = $_POST['chislo2']*1;
$znak = $_POST['znak'];


switch($znak){
case '+': $rez = $ch1 + $ch2; break;
case '-': $rez = $ch1 - $ch2; break;
case '*': $rez = $ch1 * $ch2; break;
case '/': if($ch2!=0){ $rez = $ch1 / $ch2; }else { echo 'Деление на ноль'; } break; 
default: echo "Неизвестный оператор $znak";
}

if(isset($rez))
echo $rez;
echo '<hr width="100%" color="blue" />';
} 

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head><title>Моя страница</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<input type="text" name="chislo1"/><br />
<input type="text" name="znak"/><br />
<input type="text" name="chislo2"/><br />
<input type="submit" value="Вычислить" >
</form>
</body>

</html>


Получается даже не дает ввести, сразу выдает что пустое. Как сделать проверку на пустоту поля если ничего не введено и нажата кнопка вычислить? Я вот сделал и не дает даже ввести что-то, сразу выдает что не пусто.

Serg_pnz 14.10.2011 10:29

$ch2 = preg_replace('/[^0-9., ]/si', '', $_POST['chislo2']);
if ( trim($ch2) == '') echo 'введите число2';

так же надо будет проверить, не ввели ли одни точки или запятые
далее в $ch2 меняем запятые на точку (что бы всё-таки добиться числа, которое понимается пхп как число)
потом убираем ведущие нули, при чем надо учитывать, что может быть введено 00123,56 или 0,159 или 000,659
еще надо сделать проверку на такое 123,156.954 и такое 123 156.954

Serg_pnz 14.10.2011 10:32

еще вспомнил: в одном из кредитных калькуляторов я так и написал юзерам подсказку, что разделитель разрядов пробел, а десятичных точка или зпт, или дефис (тогда выше надо так [^0-9., \-])

romantik2011 19.10.2011 00:12

Вот так лучше работает.
Код:

<?
if(!empty($_POST)){
    if(empty($_POST['chislo1']))
    echo 'Пожалуйста, введите Число №1 <br />';
    if(empty($_POST['chislo2']))
    echo 'Пожалуйста, введите Число №2 <br />';
    if(empty($_POST['znak']))
    echo 'Введите знак во второе поле <br />';
    if(isset($_POST['chislo1']) && isset($_POST['chislo2'])
    && is_numeric($_POST['chislo1']) && is_numeric($_POST['chislo2'])
    && !empty($_POST['znak']) )
    {
    $ch1 = $_POST['chislo1']*1;
    $ch2 = $_POST['chislo2']*1;
    $znak = $_POST['znak'];
    switch($znak){
    case '+': $rez = $ch1 + $ch2; break;
    case '-': $rez = $ch1 - $ch2; break;
    case '*': $rez = $ch1 * $ch2; break;
    case '/': if($ch2!=0){ $rez = $ch1 / $ch2; }else { echo 'Деление на ноль'; } break;
    default: echo "Неизвестный оператор $znak";
    }
    if(isset($rez))
    echo $rez;
    echo '<hr width="100%" color="blue" />';
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head><title>Моя страница</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="chislo1"/><br />
<input type="text" name="znak"/><br />
<input type="text" name="chislo2"/><br />
<input type="submit" value="Вычислить" >
</form>
</body>
</html>



Часовой пояс GMT +3, время: 09:37.