веб-мастеру блог веб-мастера Статьи Веб-Мастера SEO Tools книги веб-мастеру

IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Передача данных формы на скрипт-обработчик
Реаниматолог
сообщение 26.12.2007, 23:53
Сообщение #1


Новичок
**

Группа: Пользователи
Сообщений: 6
Регистрация: 25.12.2007
Пользователь №: 464



Уважаемые форумчане!
Начинаю изучать 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
сообщение 27.12.2007, 0:08
Сообщение #2


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 623
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



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;


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


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Реаниматолог
сообщение 27.12.2007, 0:29
Сообщение #3


Новичок
**

Группа: Пользователи
Сообщений: 6
Регистрация: 25.12.2007
Пользователь №: 464



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

Ещё раз спасибо!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Реаниматолог
сообщение 27.12.2007, 21:40
Сообщение #4


Новичок
**

Группа: Пользователи
Сообщений: 6
Регистрация: 25.12.2007
Пользователь №: 464



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


Администратор форума
*****

Группа: Главные администраторы
Сообщений: 623
Регистрация: 27.11.2006
Из: Россия
Пользователь №: 1



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

Подробнее об этом читайте в статье Трюки с типами


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Реаниматолог
сообщение 27.12.2007, 22:04
Сообщение #6


Новичок
**

Группа: Пользователи
Сообщений: 6
Регистрация: 25.12.2007
Пользователь №: 464



gid, спасибо за помощь и особенно за ссылку на источник информации.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Быстрый ответОтветить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 7.10.2008, 8:56
^ ВВЕРХ ^

Посетите наши проекты:
вопросы вместо букв
Бодибилдинг.info - фитнесс в москве