Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Превратите получившийся сумматор в калькулятор с четырьмя операциями: сложение, вычитание, умножение, деление. Не забудьте обработать деление на ноль!
 
 автор: Aduard   (17.08.2014 в 08:10)   письмо автору
 
 

как обработать деление на ноль

<?php
if(isset($_POST['x']) && isset($_POST['y']))

$result = $_POST['x'] + $_POST['y'];
$result = $_POST['x'] - $_POST['y'];
$result = $_POST['x'] * $_POST['y'];
$result = $_POST['x'] / $_POST['y'];


$result = "";

?>

<html>
<head>
<meta charset="utf-8">
<title>Делаем колькулятор</title>
</head>

<body>
<form method="post">
<input type="text" name="x"/>
<input type="text" name="y"/>
<input type="submit" value="="/>
<p><input type="submit" value="+"/>
<input type="submit" value="-"/>
<input type="submit" value="*"/>
<input type="submit" value="/"/></p>
<?php echo $result; ?>
</form>
</body>
</html>


Предупреждение : Деление на ноль в Z: \ главная \ mysait \ WWW \ form.php на линии 31


Предупреждение : Деление на ноль в Z: \ главная \ mysait \ WWW \ form.php на линии 68

  Ответить  
 
 автор: confirm   (17.08.2014 в 08:18)   письмо автору
 
   для: Aduard   (17.08.2014 в 08:10)
 

Нужно сперва приводить полученные данные к Integer, а уж потом вычислять, причем делить можно только тогда, когда Y больше нуля.

<?
$_POST
array_map('intval'$_POST);
if(
$_POST['y']) $result $_POST['x'] / $_POST['y'];
else 
//здесь или вывод сообщения, что делить нельзя так как Y равен 0, или чего вам требуется

  Ответить  
 
 автор: Aduard   (17.08.2014 в 08:32)   письмо автору
 
   для: confirm   (17.08.2014 в 08:18)
 

мне нужна чтоб обрабатывалось деление на ноль а не выводилось предупреждение деление на ноль

Предупреждение : Деление на ноль в Z: \ главная \ mysait \ WWW \ form.php на линии 68

линия 68 получается эта
$result = $_POST['x'] / $_POST['y'];

  Ответить  
 
 автор: confirm   (17.08.2014 в 08:34)   письмо автору
 
   для: Aduard   (17.08.2014 в 08:32)
 

Деление на ноль

  Ответить  
 
 автор: Aduard   (17.08.2014 в 08:45)   письмо автору
 
   для: confirm   (17.08.2014 в 08:34)
 

<?php
if(isset($_POST['x']) && isset($_POST['y']))
$result = $_POST['x'] + $_POST['y'];
$result = $_POST['x'] - $_POST['y'];
$result = $_POST['x'] * $_POST['y'];
$result = $_POST['x'] / $_POST['y'];
if ($_POST['y'] !==0 {
$result = $_POST['x'] / $_POST['y']; //чо я сделал не так
}else {
exit('Деление на ноль');
}

$result = "";
?>
<html>
<head>
<meta charset="utf-8">
<title>Делаем колькулятор</title>
</head>

<body>
<form method="post">
<input type="text" name="x"/>
<select name="calculator[]">
<option selected value="Плюс">+</option>
<option value="минус">-</option>
<option value="умножить">*</option>
<option value="разделить">/</option>
</select>
<input type="text" name="y"/>
<input type="submit" value="="/>
<?php echo $result; ?>
</form>
</body>
</html>
я попробовал сделать так но у меня теперь выводит другую ошибку

Ошибка разбора : ошибка синтаксиса, неожиданное '{' в Z: \ главная \ mysait \ WWW \ form.php на линии 32
вот эта 32 линия
if ($_POST['y'] !==0 {

<?php
if(isset($_POST['x']) && isset($_POST['y']))
$result = $_POST['x'] + $_POST['y'];
$result = $_POST['x'] - $_POST['y'];
$result = $_POST['x'] * $_POST['y'];
$result = $_POST['x'] / $_POST['y'];
if ($_POST['y'] !==0 {
$result = $_POST['x'] / $_POST['y']; //чо я сделал не так
}else {
exit('Деление на ноль');
}

$result = "";
?>

  Ответить  
 
 автор: confirm   (17.08.2014 в 08:58)   письмо автору
 
   для: Aduard   (17.08.2014 в 08:45)
 

Когда добавляете код в сообщение, обрамляйте его ВВ-тегами [сode][/сode], чтобы код подсвечивался. Тогда вы сами увидите ошибку синтаксиса. Вы на чем код пишите, если редактором, он что у вас не имеет подсветки кода?

Я вам уже написал, что нужно приводить данные к integer, и написал как это делается. Вы же упорно пишите if(isset($_POST['x']) && isset($_POST['y'])), что глупо, ибо и значение не являющее цифрой, тоже даст в результате вашей проверки истину.

if ($_POST['y'] !==0 {
$result = $_POST['x'] / $_POST['y']; //чо я сделал не так
}else {
exit('Деление на ноль');
}


Условие if у вас не закрыто скобкой, должно быть if ($_POST['y'] !==0) {
//далее
}

Но вот проверка так как у вас $_POST['y'] !==0 - она бессмысленна, ибо if($_POST['y']) достаточно, так как и вернет истину только тогда когда $_POST['y'] не равно 0, с учетом того, что предварительно данные приведены к integer.

  Ответить  
 
 автор: moonfox   (17.08.2014 в 12:51)   письмо автору
 
   для: confirm   (17.08.2014 в 08:58)
 

зачем данные в int ?

  Ответить  
 
 автор: confirm   (17.08.2014 в 13:13)   письмо автору
 
   для: moonfox   (17.08.2014 в 12:51)
 

а вы что буквы делить собрались?

  Ответить  
 
 автор: moonfox   (17.08.2014 в 13:44)   письмо автору
 
   для: confirm   (17.08.2014 в 13:13)
 

а там предполагаются буквы?)
защита от дурака?

  Ответить  
 
 автор: confirm   (17.08.2014 в 13:47)   письмо автору
 
   для: moonfox   (17.08.2014 в 13:44)
 

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

  Ответить  
 
 автор: moonfox   (17.08.2014 в 14:20)   письмо автору
 
   для: confirm   (17.08.2014 в 13:47)
 

как по мне кальк это форма с кнопочками как ни крути при нажатии оно выдает цифру
цифры в посте....как то сомнительно чтоб туда попали буквы.

  Ответить  
 
 автор: confirm   (17.08.2014 в 14:30)   письмо автору
 
   для: moonfox   (17.08.2014 в 14:20)
 

Думайте.

  Ответить  
 
 автор: Deed   (17.08.2014 в 12:33)   письмо автору
 
   для: Aduard   (17.08.2014 в 08:10)
 

Можно вставить на страницу скрипт и не гонять сервер туда-сюда в случае нуля в делителе:
http://jsbin.com/zokun/1/edit?html,js,output

  Ответить  
 
 автор: confirm   (17.08.2014 в 13:14)   письмо автору
 
   для: Deed   (17.08.2014 в 12:33)
 

Не выдумывайте - все что сервер получает, он должен обязательно проверять. Пора бы уяснить, что JS, это сервис, а не инструмент решения проблем.

  Ответить  
 
 автор: Deed   (17.08.2014 в 14:54)   письмо автору
 
   для: confirm   (17.08.2014 в 13:14)
 

Да вы не поняли. Пусть он встроит тот скрипт, чтобы попусту не отсылать некорректные запросы на сервер. Заодно и деление на нуль пресечет прямо в браузере.
Ну, а сервер, конечно, просто обязан проверять ВСЕ. Это не обсуждается. Это само собой.

  Ответить  
 
 автор: confirm   (17.08.2014 в 14:59)   письмо автору
 
   для: Deed   (17.08.2014 в 14:54)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования