Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум веб-мастеров _ Веб-программирование (PHP, CGI, ASP, ...) _ Передача данных формы на скрипт-обработчик

Автор: Реаниматолог 26.12.2007, 22:53

Уважаемые форумчане!
Начинаю изучать php и прошу Вашей консультации...
Каким образом передаются данные введённые в форму скрипту-передатчику.
В книгах читал, что данные, введённые в форму автоматически присваиваются переменным. При написании скрипта отправки сообщения на электронный ящик всё так и происходило, но сейчас пишу скрипт, проводящий некоторые рассчёты.
Приведу пример: возьмём простейшую задачу на скорость-время-расстояние. Предположим, что нам необходимо вычислить скорость по известным расстоянию и времени.
Скрипт-обработчик выглядит так:

Код
<?php
$v = $s / $t;
echo $v;
?>
Форма:
Код
<FORM METHOD="POST" ACTION="адрес скрипта-обработчика"NAME="mainform">

<font face="Tahoma" size="2">Расстояние</font><P style="margin-top: 0; margin-bottom: 0">
<font face="Tahoma">
<INPUT TYPE=text SIZE=67 NAME="s" style="font-family: Tahoma; font-size: 8pt"></font><P>

<font face="Tahoma" size="2">Время</font><P style="margin-top: 0; margin-bottom: 0">
<font face="Tahoma">
<INPUT TYPE=text SIZE=67 NAME="t" style="font-family: Tahoma; font-size: 8pt"></font><P>

<input type=submit value="Отправка сообщения" style="font-family: Tahoma; font-size: 12px">?>
При отправке сообщения открывается файл скрипта-обработчика с надписью:
Цитата
Warning: Division by zero in /home/doc/data/www/reanimatolog.ru/php1.php on line 2
Подскажите пожалуйста, что я делаю не так.

Автор: gid 26.12.2007, 23:08

Division by zero - это вообще то деление на ноль...

Можете попробовать заменить свой код на более сложный:

Код
<?php
if ((isset($_POST['s'])) and (isset($_POST['t'])))
{
  if ((!empty($_POST['s'])) and (!empty($_POST['t'])))
  {
    $v = ((int)$_POST['s']) / ((int)$_POST['t']);
    echo $v;
  }
}
?>

не проверял, но должно работать, если работать не будет, то нужно заменить
Код
$v = ((int)$_POST['s']) / ((int)$_POST['t']);
на
Код
$s = (int)$_POST['s'];
$t = (int)$_POST['t'];
$v = $s / $t;


В любом другом случае форма заполненна не корректно либо вообще не заполненна.

Автор: Реаниматолог 26.12.2007, 23:29

gid, благодарю Вас! Скрипт работает.
Разумеется, я пытаюсь написать скрипт, производящий более сложные вычисления, необходимые в моей профессиональной деятельности.
Если будут вопросы, обращусь к Вам, если Вы не против...

Ещё раз спасибо!

Автор: Реаниматолог 27.12.2007, 20:40

gid, с Вашей помощью программу удалось написать. Но проблемка всё же есть: программа не вычисляет десятичные дроби. При умножении на 0,1 получается 0. Другими словами 0,1 воспринимается как 0.
Судя по всему, проблема в типе данных. Как в Ваших примерах можно привести тип данных к float или double?

Автор: gid 27.12.2007, 20:57

Все достаточно просто, это происходит из-за использования операции конвертации типов ( применение конструкции $переменная = (int)$переменная; ), в моем примере конвертация пременной из типа string в тип integer. Для работы с дробными числами достаточно будет заменить (int) на (float).

Подробнее об этом читайте в статье http://forum.wm-help.net/go/?http://php-manual.info/types.type-juggling.html

Автор: Реаниматолог 27.12.2007, 21:04

gid, спасибо за помощь и особенно за ссылку на источник информации.

Автор: Реаниматолог 25.10.2008, 13:35

Может быть кому-то покажется интересным, в итоге остановился на следующем варианте:

Код
<?php
if (isset $_POST[v]) {$v = $_POST['v'];}
if (isset $_POST[s]) {$s = $_POST['s'];}
if (isset $_POST[t]) {$t = $_POST['t'];}
$v = $s / $t;
echo $v;
?>
Конечно плюс всевозможные проверки вводимой информации.

Invision Power Board ()
© Invision Power Services ()