Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой калькулятор, помогите исправить 1 недостаток 
:(
    Опции темы
bogdach
Дата 15.9.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Я понимаю, что калькулятор на PHP - это полное извращение над человечеством. Однако это не плохая практика для новичков. Вот что у меня получилось:
Код

<html>
<head>
<title>PHP Calculator</title>
</head>
<body>

<?php 
    switch($operator) 
    { 
         case "add" : $result= $fst_num + $snd_num; break; 
         case "sub" : $result= $fst_num - $snd_num; break; 
         case "mul" : $result= $fst_num * $snd_num; break; 
         case "div" : $result= $fst_num / $snd_num; break; 
    } 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" mothod="POST">
  <input type="text" name="fst_num" size="7"  maxlength="5" value="<?php echo $fst_num ?>">
  <select name="operator" size="1">
    <option value="add">+</option>
    <option value="sub">-</option>
    <option value="mul">*</option>
    <option value="div">/</option>
  </select> 
  <input type="text" name="snd_num" size="7"  maxlength="5" value="<?php echo $snd_num ?>"> = <?php echo $result ?>  <br>  
<input type=submit value="Calculate">
</form>

</body>
</html>

Калькулятор почти готов, но есть одна проблемка. Когда нажимаешь кнопку "Calculate" после перезагрузки страницы, знак (+ - * /) сбрасывается на первый выбор, то есть на +. Как сделать чтобы после перезагрузки знак оставался тот, который вы выбрали, перед тем как нажать "Calculate"?

Это сообщение отредактировал(а) bogdach - 15.9.2007, 09:15
PM MAIL   Вверх
console
Дата 15.9.2007, 09:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



Цитата(bogdach @  15.9.2007,  07:52 Найти цитируемый пост)
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" mothod="POST">

method


Цитата(bogdach @  15.9.2007,  07:52 Найти цитируемый пост)
 Как сделать чтобы после перезагрузки select value оставалась на том знаке, который вы выбрали, перед тем как нажать "Calculate"?

через $_GET передать значение выбранного действия и :
Код

 <OPTION VALUE="znak" SELECTED>



--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
bogdach
Дата 15.9.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



То есть метод GET в этом случае работает лучше.
Только я не совсем понял как это сделать. 
PM MAIL   Вверх
sandland
Дата 15.9.2007, 09:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 28.4.2007

Репутация: 1
Всего: 1



Код
  <select name="operator" size="1">
    <option value="add">+</option>
    <option value="sub">-</option>
    <option value="mul">*</option>
    <option value="div">/</option>
  </select> 


данный селект тебе нужно заменить на цыкл.
Код

<?
$mas[]={'add','sub','mul','div'}  ;
$vals[]={'+','-','*','/'}  ;
?>
<select name="operator" size="1">
<?
for($n=0;$n<count($mas);$n++)
{
?>
    <option value="<? echo $mas[$n]; ?>" <? if($_GET[selected_type]==$mas[$n]){ echo "SELECTED"; } ?>><? echo $vals[$n]; ?></option>
<?
}
?>
</select>

вот и все...нужно лишь передать назад в скрипт параметр $_GET[selected_type] в виде div,mul и т.п.

а вообще, если писать калькулятор для браузера лучше делать это на JavaScript...Во-первых не надо будет думать хотя бы о том, чтобы этот селект оставался выбранным...а пото работать будет быстрее, без обновления страницы каждый раз.

Ну и еще как вариант сделать клиентскую часть на JavaScript, а всю обработку сделать в скрытом фрейме на PHP...но для данного сулчая это вообще бесполезно


Это сообщение отредактировал(а) sandland - 15.9.2007, 09:54
PM MAIL WWW ICQ Jabber   Вверх
Flashdown
Дата 15.9.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 27.5.2006
Где: Москва

Репутация: нет
Всего: нет



и пора уже учиться пользоваться $_GET и $_POST
да и проверки деления на 0 нет
PM MAIL ICQ   Вверх
Golda
Дата 15.9.2007, 17:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



Да зачем переделывать $_POST на $_GET? Можно и $_POST использовать. Выбранное значение ведь пришло в $_POST['operator']

Вот и проверяйте (воспользуюсь кодом из поста sandland)

Код

<?php
$mas[]={'add','sub','mul','div'}  ;
$vals[]={'+','-','*','/'}  ;
?>
<select name="operator" size="1">
<?php
for($n=0;$n<count($mas);$n++)
{
?>
    <option value="<? echo $mas[$n]; ?>" <? if(isset($_POST['operator']) && $_POST['operator']==$mas[$n]){ echo " selected"; } ?>><?php echo $vals[$n]; ?></option>
<?php
}
?>
</select>


Это сообщение отредактировал(а) Golda - 16.9.2007, 00:33


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
console
Дата 15.9.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 2
Всего: 3



Golda, на 10й строчке echo " selected".


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
Golda
Дата 16.9.2007, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



Да, console, спасибо, что заметили опечатку. сейчас исправлю


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
bogdach
Дата 16.9.2007, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Код

<?php
$mas[]={'add','sub','mul','div'}  ;
$vals[]={'+','-','*','/'}  ;
?>

На этой строке показывало ошибку. Это как я понял Arrays? Если да, то синтакс был неправильный. Я исправил.
Код

<?
$mas = array('add','sub','mul','div')  ;
$vals = array('+','-','*','/')  ;
?>

Или может быть я не прав, по крайней мере, так не выводит ошибку.

А вот с этой 10й строкой, вы Golda уже исправили? А то я что-то не могу разобраться.


Это сообщение отредактировал(а) bogdach - 16.9.2007, 03:31
PM MAIL   Вверх
Golda
Дата 16.9.2007, 07:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



да, я исправила прямо в своем первом посте. Там была опечатка: вместо selected выводилось selecteded


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
webevt
Дата 16.9.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



хмм..не проще ли делать eval`ом?
Код

if ( !empty ( $_REQUEST ['expression'] ) )
{
 $Expression = $_REQUEST ['expression']; // получаем значение поля, куда вводилось выражение

 // проверка правильности введенного выражения
 if ( preg_match ( "/([0-9\\.\\,\\(\\)]+(\\+|\\-|\\/|\\*)[0-9\\.\\,\\)\\(])+/", $Expression ) )
 {
  $Expression = str_replace ( ",", ".", $Expression ); // если число дробное, а юзер ввел запятые вместо точек
  eval ( "\$Result = ".$Expression .";"  );
 }
 else
   $Result = "Ошибка в выражении!";
 echo "Результат: ".$Result;
}


HTML форма состоит из поля ввода выражения и кнопки. Всё smile

Это сообщение отредактировал(а) webevt - 16.9.2007, 16:22
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.