Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Таблица умножения


Автор: romantik2011 10.10.2011, 23:51
Не срабатывает вывод текста Неизвестный оператор ( и подставиться должно $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>


Добавлено через 5 минут и 12 секунд
Сорри, тема калькулятор

Автор: $дмитрий 11.10.2011, 00:19
Цитата

если неверно ввести что-то вообще ничего не выводится, а должно выводится

Судя по твоему первому условию нужно вводить не "что-то вообще" а числа, иначе условие is_numeric не выполнится

Автор: patap 11.10.2011, 00:21
$res всегда будет пустой строкой, как определенно в строке 9, если передать что-то, что не соответствует +-*/ - это раз
и если что-то не то передать на обработку(пустое значение, не число), то if будет возвращать false - это два

Добавлено через 1 минуту и 23 секунды
думаю надо почитатать  как работате if ... else и switch

Автор: romantik2011 11.10.2011, 00:27
Если заменить мою строку на эту
Код
 default: echo "Неизвестный оператор $znak";

Если в первое поле ввести бурду, а во второе и третье ничего не ввести, при нажатии ЭНТЕР ничего на экран не выведется

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

Код

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



Автор: $дмитрий 11.10.2011, 00:33
Цитата

Если в первое поле ввести бурду, а во второе и третье ничего не ввести, при нажатии ЭНТЕР ничего на экран не выведется 

Все правильно ведь в первом условии ты пишешь "Если определены chislo1 и chislo2 и они являются числами и znak не должен быть пустым"

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

Код

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


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

Автор: $дмитрий 14.10.2011, 07:54
Так
Код

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

Автор: romantik2011 18.10.2011, 23:13
Спасибо большое. Скажите, а регулярными выражениями как написать правильно проверку?
Хотел уточнить, а зачем делать вот это ?
Код

if(!empty($_POST) //Если массив ПОСТ не пустой? Зачем это?


Автор: $дмитрий 19.10.2011, 14:32
Цитата

Хотел уточнить, а зачем делать вот это ? if(!empty($_POST)

Для того чтобы отследить нажатие кнопки "вычислить"

Цитата

а регулярными выражениями как написать правильно проверку?

А зачем?

Автор: romantik2011 1.11.2011, 00:45
Я хочу отследить ещё если введно например бурда какая-то вместо числа или запятая вместо точки или число слишком длинное что пхп не сможет вычислить его

Добавлено через 53 секунды
Например  00123,56 или 0,159 или 000,659 или такое 123,156.954 и такое 123 156.954

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)