Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сумма двух чисел с помощью while из одной формы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Программа по сложению двух чисел из одной формы
dread_rock
Отправлено: 19 Марта, 2011 - 12:18:43
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Задача: научиться работать с формами и циклами. Использовать while и $_POST['']

Идея: есть форма. Одно текстовое поле. туда заносим любое число, нажимаем Ввод. После чего в это же поле заносим второе число, и получаем результат: сумму первого и второго числа.

Реализация: тут и нужна ваша помощь.
я создал два файла у себя на компе. один назвал forma.php, а второй rezult.php

в forma.php имеем нашу форму:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //выводим форму
  3. $forma=<<<HTML
  4. <form method="POST" action="rezult.php"><br>
  5. <input type="text" name ="new">
  6. <input type="submit" value="OK">
  7. </form>
  8. HTML;
  9. //show our form
  10. echo "$forma";
  11. ?>


результат передаём в rezult.php:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $rezult=$_POST['new'];
  3. $counter=1;
  4. $total=0;
  5. while ($counter<=2) {
  6. $counter++; //увеличение счётчика
  7. $total=$total+$rezult;
  8. //show our form
  9. }
  10. //end
  11. echo "$total";
  12. ?>


Проблема в том, я не знаю как мне после изменения $total и увеличения счётчика
вернуться к форме, которую мы заполняли в первый раз, чтоб в неё ввести второе число, а потом получить сумму двух чисел?
 
 Top
EuGen Администратор
Отправлено: 19 Марта, 2011 - 12:22:27
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Так как Вам требуется сохранение состояния, то сессии - Ваш случай.
http://www.php.su/articles/?cat=...ols&page=009


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
dread_rock
Отправлено: 19 Марта, 2011 - 17:31:12
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




всё оно хорошо, только у меня в голове каша, и я не совсем понял...(

я хочу хранить данные в $rezult.

значит в начале сценария должен указать session_register(rezult); - ????
а дальше что?

что-то не могу понять(
 
 Top
DlTA
Отправлено: 19 Марта, 2011 - 18:35:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




вариант без сессий:
в своей форме добавте скрытое поле "hidden" с именем допусти name="oldvalue"
value=0
длаее при получении сервером формы он делает следующее
$oldvalue = $_POTS['new']+$_POTS['oldvalue'];

и когда будете возвращать форму обратно с скрытое поле в value='$oldvalue'


и все!
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <form method="POST" action="rezult.php"><br>
  2.  <input type="text" name ="new">
  3.  <input type="text" name ="oldvalue" value=<?=$_POST['new']+$_POST['oldvalue']?> readonly>
  4.  <input type="submit" value="OK">
  5. </form>

как то так
 
 Top
dread_rock
Отправлено: 19 Марта, 2011 - 18:53:39
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




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

что-то я совсем не втыкаю.

особенно value=<?=$_POST['new']+$_POST['oldvalue']?>
 
 Top
DlTA
Отправлено: 19 Марта, 2011 - 19:03:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['total']=@$_SESSION['total']+$_POST['new'];
  3. echo "{$_SESSION['total']}<br>";
  4. ?>
  5. <form method="POST" action="rezult.php"><br>
  6. <input type="text" name ="new">
  7. <input type="submit" value="OK">
  8. </form>
 
 Top
dread_rock
Отправлено: 19 Марта, 2011 - 20:48:03
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Я дико извиняюсь, похоже я вообще в языке php ничего не понимаю.

мы модифицируем только файл результатов rezult.php?

и какая логика?
сразу вопрос у меня чайника возникает, как при такой конструкции мы возвращаемся к исходной форме?

строка 3: заносим переменную $total в оперативную память? ппеременная в памяти будет иметь значение 0 + 1 (если пользователь ввёл единицу)
ок. теперь нам нам надо ввести второе число. т.е. $_POST['new'] Должно принять новое с значение....


аааааааааааааа...не понимаю!!!!!!!!

я так написал, но у меня ничего не работает:
(Добавление)
я пытаюсь думать. алгоритм такой?

1. ввели в текстовое поле число.
2. перешли на страницу rezult.php
3. сессия стартована.
4. наше число которое мы ввели пытаемся сохранить в сессии (в оперативную память)
сохранили.
5. далее перенаправляемся на прежнюю страницу (форму) - выполняется цикл while.
т.к. счётчик меньше равно двух, мы ввели только одну переменную.
6. вводим второе число
7. переходим опять на страницу rezult.php
8. изменяем наше число в сессии - оперативной памяти.
9. проверяем цикл while
10. выходим из цикла while выводя теперь главный результат:
echo "{$_SESSION['total']}<br>";
 
 Top
EugeneKh
Отправлено: 19 Марта, 2011 - 20:58:25
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Можно с одной формой и файлом.
Если
Цитата:
Задача: научиться работать с формами и циклами. Использовать while и $_POST['']
Примерно так, но с условными операторами. Можно туда же ваш вариант вписать.
Спойлер (Отобразить)

Если файла хочеться непременно два, форму отдельно и чтобы данными обменивались,

Туда, где должен быть переход.
А данные можно отправлять $_GET ом. Все прозрачно и наглядно видно.
PHP:
скопировать код в буфер обмена
  1. header("Location: forma.php?total=$total");
 
 Top
dread_rock
Отправлено: 19 Марта, 2011 - 21:16:04
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




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

хотя у вас написано даже <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

как решить проблему с кодировкой?


извините, что мучаю вас.
 
 Top
DlTA
Отправлено: 19 Марта, 2011 - 21:18:50
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




dread_rock
оба примера приведенные мной не требуют каких либо еще файлов
для того чтоб все работало
в строке
CODE (html):
скопировать код в буфер обмена
  1. <form method="POST" [b]action="rezult.php"[/b]>

выкинуть лишнее
чтоб осталось

как это работает с сессией:
1) загрузили форму, при этом в переменную $_SESSION['total'] будет записано 0
2) ввели нужно число и отправили форму , в $_SESSION['total'] будет записано $_SESSION['total']=$_SESSION['total']+$_POST['new'];
3) повротяем шаг 2 до опупения
если надо обнулить данные , то добавим в конце проверочку типа
if((0+$_POST['new'])==0) $_SESSION['total']=0;

вариант без сессий работае по такому же алгоритку только вместо сессий используется элемент формы

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $_SESSION['total']=@$_SESSION['total']+$_POST['new'];
  4.  
  5. // для обнуления добавить
  6. if((0+$_POST['new'])==0) $_SESSION['total']=0;
  7.  
  8. echo "{$_SESSION['total']}<br>";
  9. ?>
  10. <form method="POST"><br>
  11. <input type="text" name ="new">
  12. <input type="submit" value="OK">
  13. </form>

должно работать
(Добавление)
код рабочий, только убрать лишние пробелы перед <?php
 
 Top
dread_rock
Отправлено: 19 Марта, 2011 - 21:22:34
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




спасибо DlTA!

теперь для полного счастья мне необходимо от иероглифов избавиться)))
 
 Top
DlTA
Отправлено: 19 Марта, 2011 - 21:39:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




посмотри в браузере в какой кодировке корректно отображается
и укажи нужную кодировку
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
вместо UTF-8
 
 Top
EugeneKh
Отправлено: 19 Марта, 2011 - 21:42:19
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Цитата:
как решить проблему с кодировкой?

В чем вы редактируете файлы? Попробуйте Notepad++, в верхнем меню Кодировки >>
Если там UTF, будем дальше смотреть.
 
 Top
dread_rock
Отправлено: 19 Марта, 2011 - 21:47:03
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




EugeneKh пишет:
Цитата:
как решить проблему с кодировкой?

В чем вы редактируете файлы? Попробуйте Notepad++, в верхнем меню Кодировки >>
Если там UTF, будем дальше смотреть.


файлы редактирую в Notepad++.
По умолчанию Format - > Encode in ANSI.

попробовал Format - > Encode in UTF-8 - вместо русских букв квадратики стали.
(Добавление)
всем спасибо! спасибо!! огромное спасибо и масса извинений за причиняемые неудобства!
 
 Top
EugeneKh
Отправлено: 19 Марта, 2011 - 22:05:28
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Denwer?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB