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 :: Математические формулы

 PHP.SU

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


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

> Описание: Вот подскажите товарищи
Djin_dj
Отправлено: 23 Июня, 2008 - 12:57:05
Post Id



Частый гость


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


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




Уважаемые товарищи!
Появился вопрос!
К примеру у меня есть строка:
$str = '(Параметр1+Параметр3/Параметр4)*Параметр2'
Кто нить подскажет как это дело можно распарсить, чтобы при вводе в форму некоего значения к примеру $_POST['Параметр1'] = 1;$_POST['Параметр2'] = 2;$_POST['Параметр3'] = 3;$_POST['Параметр4'] = 4; вывелось не строка (Параметр1+ и тд) а именно формула посчиталась (1+3/4)*2 = 3,5
Чтобы ответ получился числовым, а соответственно, чтобы из формы значения подставлялись в строку и считались как формула!
Заранее благодарен. Дайте хотя бы пример на двух выражениях, я подумаю как с этим быть!
 
 Top
D1mOn
Отправлено: 23 Июня, 2008 - 13:22:06
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


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

[+][+][+][+][+]


Приведите все переменные к типу int и будет Вам счастье

$str = intval($_POST['Параметр1'])+intval($_POST['Параметр3']) и т.д.
 
 Top
Djin_dj
Отправлено: 23 Июня, 2008 - 13:58:04
Post Id



Частый гость


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


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




D1mOn пишет:
Приведите все переменные к типу int и будет Вам счастье

$str = intval($_POST['Параметр1'])+intval($_POST['Параметр3']) и т.д.

Тогда немного подругому опишу проблему:

Есть поле в мюскле в него заносится формула к примеру Parametr_1+Parametr_2/Parametr3 и тд
Я ее извлекаю из базы и как мне разбить на интвалы тогда, то есть парсить Parametr_x, бить строку explode() на массив или все такие можно str_replace('Parametr_$x', intval(Parametr_x)), тогда как он знаки вычитания сложения и тд будет парсить руками забивать надо!?
 
 Top
D1mOn
Отправлено: 23 Июня, 2008 - 14:04:15
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


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

[+][+][+][+][+]


Если Вам нужен только результат формулы: т.к сначало делается умножение и деление разбиваем explode() по символу *, приводим к ИНТ, перемножаем полученные значения массива, потом тоже самое в математическом порядке со всем остальным.

Идея пришла моментально, прошу не судить.
 
 Top
Djin_dj
Отправлено: 23 Июня, 2008 - 14:14:36
Post Id



Частый гость


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


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




D1mOn пишет:
Если Вам нужен только результат формулы: т.к сначало делается умножение и деление разбиваем explode() по символу *, приводим к ИНТ, перемножаем полученные значения массива, потом тоже самое в математическом порядке со всем остальным.

Идея пришла моментально, прошу не судить.

То есть получается если формула x1+x2/x3-pow(x4*x5, x6/x7)
то мне как то надо считать количество элементов в массиве explode('*',$str) и '-' и тд. причем explode бьет правую от левой и тд, а мне надо вынимать значения.
Хорошо, тогда подскажите, как вынимать значения из массива. как узнать его максимальный элемент.
к примеру в том примере '/' будет массив $strdelenie[0] = x1+x2 и $strdelenie[1] = x3-pow(x4*x5,x6 и $strdelenie[2]= x7, стопудово даст ошибку.
по логике надо вкладывать цикл в цикле, а вот цикл в цикле в php не очень хорошо насколько я знаю и обрабатывать он это дело будет долго.
 
 Top
D1mOn
Отправлено: 23 Июня, 2008 - 14:18:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


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

[+][+][+][+][+]


Пля, кинул не подумавши. Может регулярами?
 
 Top
Djin_dj
Отправлено: 23 Июня, 2008 - 14:21:47
Post Id



Частый гость


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


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




D1mOn пишет:
Пля, кинул не подумавши. Может регулярами?

а если по-подробнее!? не сталкивался еще с регулярами
 
 Top
EuGen Администратор
Отправлено: 23 Июня, 2008 - 14:24:51
Post Id


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


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


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




Думаю, все намного проще можно решить.
При помощи str_replace заменить имена параметров на соответствующие значения, а затем:
http://php.su/functions/?eval


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Djin_dj
Отправлено: 23 Июня, 2008 - 14:35:07
Post Id



Частый гость


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


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




EuGen пишет:
Думаю, все намного проще можно решить.
При помощи str_replace заменить имена параметров на соответствующие значения, а затем:
http://php.su/functions/?eval

Спасиба, часть дела сделано:
только вот что получается
1/((1+1*(1/1))*pow((1+1/1),(1*1))*(1+1*(1/1)))
из поля:
$Parametr_1/((1+$Parametr_2*($Parametr_6/$Parametr_5))*pow((1+$Parametr_2/$Parametr_4),($Parametr_4*$Parametr_3))*(1+$Parametr_2*($Parametr_7/$Parametr_5)))
Но вектор хороший, теперь осталось чтобы он сложил
 
 Top
D1mOn
Отправлено: 23 Июня, 2008 - 14:35:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


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

[+][+][+][+][+]


Пля, ну хотел ведь про eval сказать, но про евал )
 
 Top
Djin_dj
Отправлено: 23 Июня, 2008 - 14:36:14
Post Id



Частый гость


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


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




EuGen пишет:
Думаю, все намного проще можно решить.
При помощи str_replace заменить имена параметров на соответствующие значения, а затем:
http://php.su/functions/?eval

то есть я уже в базу изначально переменные оформлял, чтобы потом не реплэйсить, или лучше не забивать $ туда?
 
 Top
D1mOn
Отправлено: 23 Июня, 2008 - 14:38:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


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

[+][+][+][+][+]


Не забудьте о защите, евал штука опасная.

Не проверил евал, сайт про...) (с)
 
 Top
Djin_dj
Отправлено: 23 Июня, 2008 - 14:42:11
Post Id



Частый гость


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


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




D1mOn пишет:
Не забудьте о защите, евал штука опасная.

Не проверил евал, сайт про...) (с)

В чем опасность?
 
 Top
EuGen Администратор
Отправлено: 23 Июня, 2008 - 14:50:42
Post Id


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


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


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




Да, в БД нужно хранить имена переменных.
Опасность может возникнуть, если Вы в БД пишете формулы, приходящие от пользователей (ведь пользователи тогда могут туда написать вредоносный код).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Djin_dj
Отправлено: 23 Июня, 2008 - 15:04:50
Post Id



Частый гость


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


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




EuGen пишет:
Да, в БД нужно хранить имена переменных.
Опасность может возникнуть, если Вы в БД пишете формулы, приходящие от пользователей (ведь пользователи тогда могут туда написать вредоносный код).

в моем случае пользователь это товарищь который не знает что такое pow ему написано делать ^a^b^ а я уже распарсиваю это как pow(a,b) и клиент таков что по роду деятельности не даст при любом раскладе код другому специфика, а если даст, то другие просто скажут, надо новый писать, и читать ничего не буду, скрипты запрещены к коррекции. те админ я и тот товарищь как говорится и в любой момент можно и базу восстановить и user-list прикрыть и все таки как вычислить, может я строку не правильно указал eval ("\$calculator = \"$calculator\";");
или надо через echo eval ("\$calculator = \"$calculator\";");
?


Отредактировано модератором: EuGen, 23 Июня, 2008 - 15:55:03
Пожалуйста, не используйте "разрешить смайлики" в сообщениях, содержащих участки кода.
 
 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