БлогNot. Пишем простой конвертер величин на PHP

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

Пишем простой конвертер величин на PHP

Перед вами - "универсальный" конвертер величин на PHP, написанный в учебных целях на основе однострочного поля ввода и списка. Поэтому преобразуемых величин всего пара, а цель заметки - дать образец, но не продукт.

Для добавления новых величин их достаточно дописать в массив $convert элементами вида 'ключ'=>'значение', где ключом служит обычная строка текста, описывающие какие величины к каким преобразуются, а значение - это формула на PHP, описывающая нужное действие над вещественной или целой переменной $number, полученной от пользователя. Код формулы должен быть правильной записью на PHP части "формула" оператора

$result = формула;

(без "=" и точки с запятой). Существенно, что этот код никуда не передаётся, из пользовательской формы нужное преобразование "опознаётся" по ключу, который печатается и в видимом списке. Иначе можно бы было из отдельно подготовленной HTML-формы передать код на оценку функции eval и "завалить" сервер.

Вот полный исходник приложения:

<?php
 $params = array ('action','number','units');
 require_once 'params.php';
 $convert = array (
  'Из Фаренгейта в Цельсия'=>'($number-32)*5/9',
  'Из градусов в радианы'=>'$number*3.1415926/180' 
 );
 $result = '';
 if (isset($action)) {
  if (!is_numeric($number)) $number = 0;
  foreach ($convert as $key=>$value) if ($key == $units) { eval("\$result=$value;"); break; }
 }
?>
<!DOCTYPE html PUBLIC "–//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http–equiv="Content–Type" content="text/html; charset=Windows–1251" /><title>Конвертер</title>
</head><body><h3>Конвертер</h3><form method="post">
 <p>Сколько: <input type="text" name="number" value="<?php echo $number; ?>" maxlength="10" size="11">
 из чего во что: <select name="units" size="1">
<?php 
 foreach ($convert as $key=>$value)
  echo '<option value="'.$key.'"'.($key==$units?' selected':'').'>'.$key;
?>  
 </select>
 <input type="submit" name="action" value="Посчитать"></p></form>
<?php 
 if (isset($action)) echo '<p>Ответ='.round($result,2).'</p>';
?>  	 
</body></html>

Подключаемый файл params.php, как и во многих других скриптах, служит для обработки списка параметров, разрешённых для передачи в массиве $params, вот его листинг:

<?php
 function trimall ($string) { 
  return preg_replace("/(^\s*)|(\s*$)/","",
   preg_replace("/\s+/"," ",trim($string)));
 }
 function magic($path) { 
  ini_set('magic_quotes_runtime', '0'); 
  ini_set('magic_quotes_sybase', '0');
  return (@get_magic_quotes_gpc()=='1'?stripslashes($path):$path);
 }
 if (isset($params) && !empty($params)) {
  while (list($num,$var) = each($params)) {
   if (isset($_POST[$var])) $$var = trimall(htmlspecialchars(magic($_POST[$var])));
   else if (isset($_GET[$var])) $$var = trimall(htmlspecialchars(magic($_GET[$var])));
   else if (isset($_SESSION[$var])) {
    $$var = trimall(htmlspecialchars(magic($_SESSION[$var])));
    unset ($_SESSION[$var]);
   }
   else $$var = '';
  }
 }
?>

Вот как выглядит приложение в браузере:

вид приложения Простой конвертер на PHP
вид приложения Простой конвертер на PHP

 Пример в работе


теги: php учебное числа безопасность

комментарии (0)

05.10.2015, 17:52; рейтинг: 5295

  свежие записипоиск по блогуоткомментироватьстатистика

Наверх Яндекс.Метрика
© PerS
вход