Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вставка переменной в формулу (https://javascript.ru/forum/misc/59680-vstavka-peremennojj-v-formulu.html)

Becass 22.11.2015 16:31

Вставка переменной в формулу
 
Всем привет. Пишу калькулятор для расчета стоимости заказа.
-
Функционал написал, возникла проблема. Нужно в формулу расчета вставлять курс валюты.

Парсер валюты написал

Код:

<?php
$today = date("d/m/Y");
 $fp = fopen('cb.xml', 'w');
 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
      'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$today);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close ($ch);
?>

Получаю нужный курс

<script src="http://code.jquery.com/jquery-latest.js";></script>
	<SCRIPT>
$(document).ready(function () {
 $.ajax({
 type: "GET",
 async : false,
 url: "cb.xml",
 dataType: "xml",
 success: XmlKurs
 });
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
p=$(this).find("Value").text();
$("p").append(document.getElementById('tcena').value()*$(this).find("Value"));

 }
 });
}
 });
</script>


Есть формула

S = (Pbum + Ppec + Potd)*Euro;


Переменная Euro должна получаться автоматом из парсера


Объявляю функцию

var Euro = new function () {
		$(document).ready(function () {
 $.ajax({
 type: "GET",
 async : false,
 url: "cb.xml",
 dataType: "xml",
 success: XmlKurs
 });
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
d=$(this).find("Value").text();
$("p").append(document.getElementById('Euro').value()*$(this).find("Value"));
 }
 });
}
 });

		}


-В итоге получаю ответ на расчет-
Общая стоимость -= Na руб.
Стоимость 1 экземпляра = Na руб.


Вопрос, что я не так делаю и как подставить число из функции в формулу?

Mess4me 22.11.2015 16:47

Цитата:

Сообщение от Becass
13
d=$(this).find("Value").text();

здесь точно получаете цифру а не строку?

Mess4me 22.11.2015 16:49

Becass,
игнорируйте комментарий)

Becass 22.11.2015 16:49

Цитата:

Сообщение от Mess4me (Сообщение 397138)
здесь точно получаете цифру а не строку?

Не уверен, пробовал убирать .text

d=$(this).find("Value");


Проблемы не решает

Mess4me 22.11.2015 16:51

Becass,
а XML файл можно сюда?

Becass 22.11.2015 16:52

<?xml version="1.0" encoding="windows-1251" ?>
<ValCurs Date="21/11/2015" name="Foreign Currency Market">
<Valute ID="R01010">
	<NumCode>036</NumCode>
	<CharCode>AUD</CharCode>
	<Nominal>1</Nominal>
	<Name>Австралийский доллар</Name>
	<Value>46,6590</Value>
</Valute>
<Valute ID="R01020A">
	<NumCode>944</NumCode>
	<CharCode>AZN</CharCode>
	<Nominal>1</Nominal>
	<Name>Азербайджанский манат</Name>
	<Value>61,9791</Value>
</Valute>
<Valute ID="R01035">
	<NumCode>826</NumCode>
	<CharCode>GBP</CharCode>
	<Nominal>1</Nominal>
	<Name>Фунт стерлингов Соединенного королевства</Name>
	<Value>99,0718</Value>
</Valute>
<Valute ID="R01060">
	<NumCode>051</NumCode>
	<CharCode>AMD</CharCode>
	<Nominal>100</Nominal>
	<Name>Армянских драмов</Name>
	<Value>13,4635</Value>
</Valute>
<Valute ID="R01090">
	<NumCode>974</NumCode>
	<CharCode>BYR</CharCode>
	<Nominal>10000</Nominal>
	<Name>Белорусских рублей</Name>
	<Value>36,1680</Value>
</Valute>
<Valute ID="R01100">
	<NumCode>975</NumCode>
	<CharCode>BGN</CharCode>
	<Nominal>1</Nominal>
	<Name>Болгарский лев</Name>
	<Value>35,3944</Value>
</Valute>
<Valute ID="R01115">
	<NumCode>986</NumCode>
	<CharCode>BRL</CharCode>
	<Nominal>1</Nominal>
	<Name>Бразильский реал</Name>
	<Value>17,2428</Value>
</Valute>
<Valute ID="R01135">
	<NumCode>348</NumCode>
	<CharCode>HUF</CharCode>
	<Nominal>100</Nominal>
	<Name>Венгерских форинтов</Name>
	<Value>22,3334</Value>
</Valute>
<Valute ID="R01215">
	<NumCode>208</NumCode>
	<CharCode>DKK</CharCode>
	<Nominal>10</Nominal>
	<Name>Датских крон</Name>
	<Value>92,8161</Value>
</Valute>
<Valute ID="R01235">
	<NumCode>840</NumCode>
	<CharCode>USD</CharCode>
	<Nominal>1</Nominal>
	<Name>Доллар США</Name>
	<Value>64,8673</Value>
</Valute>
<Valute ID="R01239">
	<NumCode>978</NumCode>
	<CharCode>EUR</CharCode>
	<Nominal>1</Nominal>
	<Name>Евро</Name>
	<Value>69,3886</Value>
</Valute>
<Valute ID="R01270">
	<NumCode>356</NumCode>
	<CharCode>INR</CharCode>
	<Nominal>100</Nominal>
	<Name>Индийских рупий</Name>
	<Value>97,9499</Value>
</Valute>
<Valute ID="R01335">
	<NumCode>398</NumCode>
	<CharCode>KZT</CharCode>
	<Nominal>100</Nominal>
	<Name>Казахстанских тенге</Name>
	<Value>21,1054</Value>
</Valute>
<Valute ID="R01350">
	<NumCode>124</NumCode>
	<CharCode>CAD</CharCode>
	<Nominal>1</Nominal>
	<Name>Канадский доллар</Name>
	<Value>48,6699</Value>
</Valute>
<Valute ID="R01370">
	<NumCode>417</NumCode>
	<CharCode>KGS</CharCode>
	<Nominal>100</Nominal>
	<Name>Киргизских сомов</Name>
	<Value>93,7321</Value>
</Valute>
<Valute ID="R01375">
	<NumCode>156</NumCode>
	<CharCode>CNY</CharCode>
	<Nominal>1</Nominal>
	<Name>Китайский юань</Name>
	<Value>10,1600</Value>
</Valute>
<Valute ID="R01500">
	<NumCode>498</NumCode>
	<CharCode>MDL</CharCode>
	<Nominal>10</Nominal>
	<Name>Молдавских леев</Name>
	<Value>32,4093</Value>
</Valute>
<Valute ID="R01535">
	<NumCode>578</NumCode>
	<CharCode>NOK</CharCode>
	<Nominal>10</Nominal>
	<Name>Норвежских крон</Name>
	<Value>75,1544</Value>
</Valute>
<Valute ID="R01565">
	<NumCode>985</NumCode>
	<CharCode>PLN</CharCode>
	<Nominal>1</Nominal>
	<Name>Польский злотый</Name>
	<Value>16,3024</Value>
</Valute>
<Valute ID="R01585F">
	<NumCode>946</NumCode>
	<CharCode>RON</CharCode>
	<Nominal>1</Nominal>
	<Name>Румынский лей</Name>
	<Value>15,5882</Value>
</Valute>
<Valute ID="R01589">
	<NumCode>960</NumCode>
	<CharCode>XDR</CharCode>
	<Nominal>1</Nominal>
	<Name>СДР (специальные права заимствования)</Name>
	<Value>89,5733</Value>
</Valute>
<Valute ID="R01625">
	<NumCode>702</NumCode>
	<CharCode>SGD</CharCode>
	<Nominal>1</Nominal>
	<Name>Сингапурский доллар</Name>
	<Value>45,9173</Value>
</Valute>
<Valute ID="R01670">
	<NumCode>972</NumCode>
	<CharCode>TJS</CharCode>
	<Nominal>1</Nominal>
	<Name>Таджикский сомони</Name>
	<Value>10,0914</Value>
</Valute>
<Valute ID="R01700J">
	<NumCode>949</NumCode>
	<CharCode>TRY</CharCode>
	<Nominal>1</Nominal>
	<Name>Турецкая лира</Name>
	<Value>22,8045</Value>
</Valute>
<Valute ID="R01710A">
	<NumCode>934</NumCode>
	<CharCode>TMT</CharCode>
	<Nominal>1</Nominal>
	<Name>Новый туркменский манат</Name>
	<Value>18,5335</Value>
</Valute>
<Valute ID="R01717">
	<NumCode>860</NumCode>
	<CharCode>UZS</CharCode>
	<Nominal>1000</Nominal>
	<Name>Узбекских сумов</Name>
	<Value>24,0695</Value>
</Valute>
<Valute ID="R01720">
	<NumCode>980</NumCode>
	<CharCode>UAH</CharCode>
	<Nominal>10</Nominal>
	<Name>Украинских гривен</Name>
	<Value>27,1411</Value>
</Valute>
<Valute ID="R01760">
	<NumCode>203</NumCode>
	<CharCode>CZK</CharCode>
	<Nominal>10</Nominal>
	<Name>Чешских крон</Name>
	<Value>25,6160</Value>
</Valute>
<Valute ID="R01770">
	<NumCode>752</NumCode>
	<CharCode>SEK</CharCode>
	<Nominal>10</Nominal>
	<Name>Шведских крон</Name>
	<Value>74,4634</Value>
</Valute>
<Valute ID="R01775">
	<NumCode>756</NumCode>
	<CharCode>CHF</CharCode>
	<Nominal>1</Nominal>
	<Name>Швейцарский франк</Name>
	<Value>63,8206</Value>
</Valute>
<Valute ID="R01810">
	<NumCode>710</NumCode>
	<CharCode>ZAR</CharCode>
	<Nominal>10</Nominal>
	<Name>Южноафриканских рэндов</Name>
	<Value>46,3835</Value>
</Valute>
<Valute ID="R01815">
	<NumCode>410</NumCode>
	<CharCode>KRW</CharCode>
	<Nominal>1000</Nominal>
	<Name>Вон Республики Корея</Name>
	<Value>56,1138</Value>
</Valute>
<Valute ID="R01820">
	<NumCode>392</NumCode>
	<CharCode>JPY</CharCode>
	<Nominal>100</Nominal>
	<Name>Японских иен</Name>
	<Value>52,7527</Value>
</Valute>
</ValCurs>


Пробовал менять
<Valute ID="R01239">
	<NumCode>978</NumCode>
	<CharCode>EUR</CharCode>
	<Nominal>1</Nominal>
	<Name>Евро</Name>
	<Value>69,3886</Value>
</Valute>


На
<Valute ID="R01239">
	<NumCode>978</NumCode>
	<CharCode>EUR</CharCode>
	<Nominal>1</Nominal>
	<Name>Евро</Name>
	[COLOR="Lime"]<Value>69</Value>[/COLOR]
</Valute>


Думал "давится" запятой, но нет

laimas 22.11.2015 17:08

А почему за курсом валют нужно постоянно обращаться к ЦБ, причем при каждом запросе клиентов?

Mess4me 22.11.2015 17:08

Цитата:

Сообщение от Becass
14
p=$(this).find("Value").text();
15
$("p").append(document.getElementById('tcena').val ue()*$(this).find("Value"));

а что эти строки должны сделать?

Becass 22.11.2015 17:10

Цитата:

Сообщение от laimas (Сообщение 397143)
А почему за курсом валют нужно постоянно обращаться к ЦБ, причем при каждом запросе клиентов?

Cкрипт для расчета стоимости заказа для типографии, все расчеты идут в Евро.

Becass 22.11.2015 17:11

Цитата:

Сообщение от Mess4me (Сообщение 397144)
а что эти строки должны сделать?

Гуглил по своей проблеме, в одной из тем форума был вариант вставить эту строку как запрет вывода текста и вывод конкретного числа
http://www.cyberforum.ru/php-beginne...ad1494550.html
вот отсюда

Mess4me 22.11.2015 17:28

Becass,
вот меня интересует эта строка p=$(this).find("Value").text(); что такое p?

laimas 22.11.2015 17:34

Цитата:

Сообщение от Becass
Cкрипт для расчета стоимости заказа для типографии, все расчеты идут в Евро.

Да хоть в тугриках, почему для этого нужно постоянно обращаться к ЦБ? Центробанк устанавливает курс валют раз в сутки, а именно по окончанию торгов на Валютной бирже, то есть в течение дня курс не меняется, и ваши запросы к нему, это пустое занятие, как и xml для клиента. Курс нужно получать задачей для планировщика задач cron, раз в сутки и сохранять в своей базе, из которой получать уже готовое. Причем сейчас получить курс можно и более удобным способом - SOAP.
Ну а насчет евро, то по законодательству нашей страны все должно быть в нашей валюте, иное, это нарушение Закона.

Mess4me 22.11.2015 17:35

Becass,
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>

    <div id="tcena">123</div>
    <p id="res"></p>
    <p id="res2"></p>
    <script>


        $(document).ready(function () {
            $.ajax({
                type: "GET",
                async : false,
                url: "cb.xml",
                dataType: "xml",
                success: XmlKurs
            });
            function XmlKurs (xml) {
                $(xml).find("Valute").each(function(){
                     var atr ='R01239';
                    if(atr =='R01239') {
                        var price=$(this).find("Value").text().replace(/,/,'.');
                        console.log(price);
                        $("#res").append(document.getElementById('tcena').value()*price);

                    }
                });
            }
        });


        var Euro = new function () {
            $(document).ready(function () {
                $.ajax({
                    type: "GET",
                    async : false,
                    url: "cb.xml",
                    dataType: "xml",
                    success: XmlKurs
                });
                function XmlKurs (xml) {
                    $(xml).find("Valute").each(function(){
                        if($(this).attr('ID')=='R01239') {
                            var price=$(this).find("Value").text().replace(/,/,'.');
                            $("res2").append(document.getElementById('Euro').value()*price);
                        }
                    });
                }
            });

        };



    </script>



</body>
</html>

Becass 22.11.2015 17:40

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML><HEAD><TITLE>Листовки, буклеты, флаеры, плакаты,визитки и др. листовая продукция.</TITLE>
	<META http-equiv=Content-Type content="text/html; charset=windows-1251">




</head>
<body>
<div id="tcena">123</div>

<p id="res"></p>

<p id="res2"></p>





<script src="http://code.jquery.com/jquery-latest.js";></script>
	<SCRIPT>
    $(document).ready(function () {
            $.ajax({
                type: "GET",
                async : false,
                url: "cb.xml",
                dataType: "xml",
                success: XmlKurs
            });
            function XmlKurs (xml) {
                $(xml).find("Valute").each(function(){
                     var atr ='R01239';
                    if(atr =='R01239') {
                        var price=$(this).find("Value").text().replace(/,/,'.');
                        console.log(price);
                        $("#res").append(document.getElementById('tcena').value()*price);

                    }
                });
            }
        });


function calc1() {

		 var Euro = new function () {
            $(document).ready(function () {
                $.ajax({
                    type: "GET",
                    async : false,
                    url: "cb.xml",
                    dataType: "xml",
                    success: XmlKurs
                });
                function XmlKurs (xml) {
                    $(xml).find("Valute").each(function(){
                        if($(this).attr('ID')=='R01239') {
                            var price=$(this).find("Value").text().replace(/,/,'.');
                            $("res2").append(document.getElementById('Euro').value()*price);
                        }
                    });
                }
            });

        };


		var Li = new Number(list.Li.value);

		var Si = new Number(list.Si.value);

		var Ti = new Number(list.Ti.value);

		var Cf = new Number(list.Cf.value);

		var Cb = new Number(list.Cb.value);

		var F = new Number(list.F.checked);

		var B = new Number(list.B.checked);

		var Pf = new Number(list.Pf.checked);

		var N = new Number(list.N.checked);

		var V = new Number(list.V.checked);

		var Lg = new Number(list.Lg.checked);

		var Lm = new Number(list.Lm.checked);



		if (Li.toString() ==  "NaN" || Li <= 0) {

			alert('Введено неверное значение формата!');

			list.Li.focus();

			return false;

		}

		if (Si.toString() ==  "NaN" || Si <= 0) {

			alert('Введено неверное значение формата!');

			list.Si.focus();

			return false;

		}

		if ( (Li < 20 || Li > 430) || (Si < 20 || Si > 430) ) {

			alert('Формат задается в пределах от 20 до 430!');

			return false;

		}

		if (Ti.toString() ==  "NaN" || Ti <= 0) {

			alert('Введено неверное значение тиража!');

			list.Ti.focus();

			return false;

		}

		else {

			Nil1 = Math.floor(438/ (Li + 1) );

			Nis1 = Math.floor(306/ (Si + 1) );

			Ni1 = Nil1 * Nis1;

			Nil2 = Math.floor(438/ (Si + 1) );

			Nis2 = Math.floor(306/ (Li + 1) );

			Ni2 = Nil2*Nis2;

			Ni = Math.max(Ni1,Ni2);

			Na3 = Ti / Ni;

			Rb = list.RbK.value.substring(0, list.RbK.value.indexOf('_'));

			K = list.RbK.value.substring(list.RbK.value.indexOf('_')+1);

			Phs = Math.floor(0.999+(Na3*Rb/70));

			if ( Ni1 > Ni2 ) {

			Prz=(6+(Nil1-1)+(Nis1-1))*0.37*Phs;

			}

			else {

			Prz=(6+(Nil2-1)+(Nis2-1))*0.37*Phs;

			}

			Pbum=(0.6 * Rb * K *( Na3 + 100))/4;

			if (!(Cf-Cb)  && ((Li<310 && Si<=240) || (Li<=310 && Si<240) || (Si<310 && Li<=240) || (Si<=310 && Li<240))) {

				Pl =  1.5*(Cf+Cb);

				Ppec = 2*(Cf+Cb)+(Cf+Cb)*(10.0+0.0033*Na3);

			}

			else {

				Pl = 3*(Cf+Cb);

				Ppec = 2*(Cf+Cb)+(Cf+Cb)*(20+0.0033*Na3);

			}

			//alert(Ppec);

						Potd = Pl + F*(0.0022*Ti+500) + B * (20 + Na3 * 0.01) + Pf * Na3 * 0.01 +  V*(Na3 * 0.05)+N*(30+Ti*0.003) + Lg * Na3 * 0.25 + Lm * Na3 * 0.5 + Prz;

			//Общая стоимость тиража

			S = (Pbum + Ppec + Potd)*res2;
			console.log(Pbum, Ppec, Potd, Euro);

			S1 = S / list.Ti.value;

			S = S.toString().substring(0,S.toString().indexOf(".")+3);

			S1 = S1.toString().substring(0,S1.toString().indexOf(".")+3);

			list.result.value = "Общая стоимость тиража = " + S + " руб.\nСтоимость 1 экземпляра = " + S1 + " руб.";

			return true;

		}

	}

function format(dx,dy){

		document.list.Si.value = dx;

		document.list.Li.value = dy;

			}

</SCRIPT>


Эффекта не дало, формула не получает число.

http://joxi.ru/RmzkaQJf6Nzj2O

Becass 22.11.2015 17:47

Цитата:

Сообщение от laimas (Сообщение 397153)
Да хоть в тугриках, почему для этого нужно постоянно обращаться к ЦБ? Центробанк устанавливает курс валют раз в сутки, а именно по окончанию торгов на Валютной бирже, то есть в течение дня курс не меняется, и ваши запросы к нему, это пустое занятие, как и xml для клиента. Курс нужно получать задачей для планировщика задач cron, раз в сутки и сохранять в своей базе, из которой получать уже готовое. Причем сейчас получить курс можно и более удобным способом - SOAP.
Ну а насчет евро, то по законодательству нашей страны все должно быть в нашей валюте, иное, это нарушение Закона.

Расчет с клиентом идет в рублях. Но закупка бумаги происходит в евро у иностранных поставщиков. И тема совсем не об этом.
Скрипт получения курса стоит на CRON, данные о валюте получает XML файл, а из него уже выводится в JS

laimas 22.11.2015 17:51

Цитата:

Сообщение от Becass
И тема совсем не об этом

Я об этом и пишу - вы занимаетесь, мягко говоря, херней, и вам такую же херню и далее подосовывают. Это должна быть задача для cron на 00:00 час по Москве:

$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl"); 
$curs = $client->GetCursOnDate(["On_date"=>date('Y-m-d', strtotime('now -1 day'))]);
$rate = new SimpleXMLElement($curs->GetCursOnDateResult->any);
$result = $rate->xpath('ValuteData/ValuteCursOnDate[VchCode="EUR"]');
//сохраняем у себя на сутки, что и возвращаем клиенту при запросах
$eur = (float)$result[0]->Vcurs/(int)$result[0]->Vnom;


И не заставляйте клиент обрабатывает ненужное.

Becass 22.11.2015 17:57

Цитата:

Сообщение от laimas (Сообщение 397159)
Я об этом и пишу - вы занимаетесь, мягко говоря, херней, и вам такую же херню и далее подосовывают. Это должна быть задача для cron на 00:00 час по Москве:

$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl"); 
$curs = $client->GetCursOnDate(["On_date"=>date('Y-m-d', strtotime('now -1 day'))]);
$rate = new SimpleXMLElement($curs->GetCursOnDateResult->any);
$result = $rate->xpath('ValuteData/ValuteCursOnDate[VchCode="EUR"]');
//сохраняем у себя на сутки, что и возвращаем клиенту при запросах
$eur = (float)$result[0]->Vcurs/(int)$result[0]->Vnom;


И не заставляйте клиент обрабатывает ненужное.

У меня есть скрипт php, который получает данные с ЦБ раз в сутки
<?php
$today = date("d/m/Y");
 $fp = fopen('cb.xml', 'w');
 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
      'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$today);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close ($ch);
?>

Данные сохраняются в XML файл. И уже из XML файла мне надо получить число которое будет вставляться в формулу
$(document).ready(function () {
 $.ajax({
 type: "GET",
 async : false,
 url: "cb.xml",
 dataType: "xml",
 success: XmlKurs
 });
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01239') {
d=$(this).find("Value").text();
$("p").append(document.getElementById('Euro').value()*$(this).find("Value"));
 }
 });
}
 });

что бы это число не менять каждый день в ручную

laimas 22.11.2015 18:02

Нахрена вам cURL, и нахрена вам XML, который еще вынужден получать клиент и парсить, если нужна всего одна валюта?
Я не понимаю, какой смысл пыхтеть над тем, что совсем не нужно? Ну неужто не видно сразу, что вы вместо того чтобы единожды, пусть и устаревшим способом получая курс, получить нужное, заставляете клиента заниматься этим постоянно?

Becass 22.11.2015 18:04

Цитата:

Сообщение от laimas (Сообщение 397163)
Нахрена вам cURL, и нахрена вам XML, который еще вынужден получать клиент и парсить, если нужна всего одна валюта?
Я не понимаю, какой смысл пыхтеть над тем, что совсем не нужно? Ну неужто не видно сразу, что вы вместо того чтобы единожды, пусть и устаревшим способом получая курс, получить нужное, заставляете клиента заниматься этим постоянно?

Я запутался. Можете предложить Ваше решение в виде кода ?

laimas 22.11.2015 18:07

А слабо запустить код мной показанный и увидеть что возвращается курс нужной валюты? Используйте полученное значение, какая проблема? Тоже самое (коли и у вас планировщиком раз в сутки получение курса) вы могли бы получить из xml курс евро, а при запросах клиента возвращать его, или же сразу в виде переменной в подключаемый JS поместить, или...

Becass 22.11.2015 18:12

Цитата:

Сообщение от laimas (Сообщение 397165)
А слабо запустить код мной показанный и увидеть что возвращается курс нужной валюты? Используйте полученное значение, какая проблема? Тоже самое (коли и у вас планировщиком раз в сутки получение курса) вы могли бы получить из xml курс евро, а при запросах клиента возвращать его, или же сразу в виде переменной в подключаемый JS поместить, или...

Выдает ошибку
Parse error: syntax error, unexpected '[', expecting ')' in Z:\home\calc\www\calc.php on line 3


Цитата:

Сообщение от laimas (Сообщение 397165)
а при запросах клиента возвращать его, или же сразу в виде переменной в подключаемый JS поместить, или...

Как раз эту переменную я и не могу в JS вывести, обозначить ее

laimas 22.11.2015 18:18

Вот на эту строку

$curs = $client->GetCursOnDate(["On_date"=>date('Y-m-d', strtotime('now -1 day'))]);

надо полагать? Причина в том, что у вас древняя версия РНР, а начиная с версии 5.4 массивы можно объявлять так же просто как и в JS, то есть не

array(...), а [...]

Замените квадратные скобки на круглые и объявите массив.

Цитата:

Сообщение от Becass
Как раз эту переменную я и не могу в JS вывести, обозначить ее

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

Becass 22.11.2015 18:23

Цитата:

Сообщение от laimas (Сообщение 397167)
Вот на эту строку

$curs = $client->GetCursOnDate(["On_date"=>date('Y-m-d', strtotime('now -1 day'))]);

надо полагать? Причина в том, что у вас древняя версия РНР, а начиная с версии 5.4 массивы можно объявлять так же просто как и в JS, то есть не

array(...), а [...]

Замените квадратные скобки на круглые и объявите массив.



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

На денвере тестирую.
Кароче как я понял проще забить на эту идею. Не совсем догоняю ваших рекомендаций

Becass 22.11.2015 18:33

Проблема еще актуальна, возможно кто то подскажет

laimas 22.11.2015 18:40

Денвер давно пора в помойку выбросить, он умер, есть куда более лучший локальный сервер. Более того, писать и проверять код нужно не Денвером, а под те версии ПО, которые будут использоваться на реальном сервере.

А что не понятного? Могу в виде сказки разъяснить - сказочница Арина Родионовна рассказывает серверу сказку раз в день, на ночь, и сервер знает чем оканчивается сказка. Детишки клиенты же постоянно спрашивают сервер чем сказка заканчивается, но он вместо концовки рассказывает заново всю сказку. Есть в этой сказке логика?

Вот так и у вас с получением валюты - вы заставляете клиентов опрашивающих сервер постоянно, постоянно же заниматься не нужным.

Что касается невозможности получения значения уже на клиенте по запросу, то не вникая в ваш код, надеюсь вы понимаете, что ajax запрос асинхронный, а значит и считать нужно в его контексте. Ну и самый днешово-сердитый способ, это сразу вывод всех переменных так или иначе требуемых клиентом.

Becass 22.11.2015 18:42

Спасибо за ссылочку. Сейчас поставлю, попробую запустить скрипт

Becass 22.11.2015 19:08

laimas,
Вставил код в страницу, вписал в формулу переменную, которая судя по документации ЦБ выдает курс
S = (Pbum + Ppec + Potd)*Vcurs;


Но эффект тот же, т.е не какого. Куда скрипт должен сохранять полученное число то?

laimas 22.11.2015 19:32

Знаете что такое cron? Если установили Open Server, то в нем он есть - в настройках его можно задать любую задачу выполняемую по расписанию, тоже самое делается и на сервере - хостер предлагает такую услугу, планировщик задач.
Ну думайте в конце концов. Вас же не динамика курса валют интересует, а установленный курс причем одной валюты. А кроме этого курса всегда будет то, что необходимо как значения конфигурации, и многое из них выгодно хранить не в файле конфигурации в виде переменных, а в базе, так как они могут изменяться во времени.

Значит планировщик задач получая по расписанию в ночь на следующий день курс валюты за прошедший день записывает его в базу.

Клиент запрашивает, сервер получает курс из базы возвращая его клиенту. Но если запрос клиента асинхронный, то либо расчет в контексте запроса должен быть, либо callback или promise. Если это для вас заоблачно, отдавайте клиенту переменные сразу гарантированно:

<html>
<head>
....
</head>
<body>
.....
<script>
var eur = <?=$eur?>; //$eur полученный из базы курс сохраненный планировщиком задач
</script>
</body>
<html>

Becass 22.11.2015 19:36

laimas,
т.е надо создать базу и в нее посылать курс который получает скрипт который вы написали выше?
Только мне не нужна работа с базой. Мне надо только JS

laimas 22.11.2015 19:39

Что значит сразу создавать базу? А где же у вас храниться основной контент сайта? Надо полагать в базе, если сайт динамический, а значит база уже существует, и нужно только создать таблицу в ней, которая и будет хранить в себе все конфигурационные переменные подверженные изменениям во времени или же изменяемые оперативно. В эту таблицу и должен писать курс валюты планировщик задач.

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

Becass 22.11.2015 19:53

Цитата:

Сообщение от laimas (Сообщение 397181)
Что значит сразу создавать базу? А где же у вас храниться основной контент сайта? Надо полагать в базе, если сайт динамический, а значит база уже существует, и нужно только создать таблицу в ней, которая и будет хранить в себе все конфигурационные переменные подверженные изменениям во времени или же изменяемые оперативно. В эту таблицу и должен писать курс валюты планировщик задач.

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

Получать я его научился уже. Получил я его в файл / БД, опять встает вопрос подставление этого числа в формулу.

laimas 22.11.2015 19:59

Я ранее уже писал как получить его, и если асинхронным запросом, и помещать в переменную, а потом использовать, то читать выше. Не понимаете что это такое, вставляйте сразу в вывод страницы и используйте.

Becass 22.11.2015 20:05

Решение проблемы на чистом JS

Получаем курс доллара

<?php
$today = date("d/m/Y");
 $fp = fopen('cb.xml', 'w');
 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
      'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$today);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close ($ch);
?>


Получаем нужное число и объявляем функцию

<script src="http://code.jquery.com/jquery-latest.js";></script>
	<SCRIPT>
$(document).ready(function () {
       $.ajax({
		url: 'cb.xml',
		dataType: 'xml'
	}).done(function (xml) {
		$(xml).find('Valute').each(function() {
			if ($(this).attr('ID') == 'R01239') {
				currency = parseFloat($(this).find('Value')
						.text().replace(',', '.'));
			}
		});
	});
});


Вставляем в формулу

S = (Pbum + Ppec + Potd) * currency;


Не один из представленных в теме ответов не были верными

laimas 22.11.2015 20:11

Вам известно что такое асинхронность?
Чтобы подставить в формулу полученное асинхронным запросом, формула должна решаться гарантированно после того, как сервер вернул ответ, а клиент "породил" то, что вы пытаетесь подставить в нее.
Вам об этом не раз говорилось, вы либо не читаете, либо гоните коней.

Becass 22.11.2015 20:22

Цитата:

Сообщение от laimas (Сообщение 397186)
Вам известно что такое асинхронность?
Чтобы подставить в формулу полученное асинхронным запросом, формула должна решаться гарантированно после того, как сервер вернул ответ, а клиент "породил" то, что вы пытаетесь подставить в нее.
Вам об этом не раз говорилось, вы либо не читаете, либо гоните коней.

По факту я добился того чего хотел, и у меня все работает и корректно подставляет число и считает данные. В чем ошибка тогда?

laimas 22.11.2015 20:32

Если ранее не удавалось добиться этого же, то ошибка была в том, что подставлялось несуществующее, еще раз говорить почему это происходит не буду.
А вот в чем ошибка получения курса написано выше - вы продолжаете заниматься глупостями, заставляя это же делать и клиентов.

Becass 22.11.2015 20:37

laimas,
а в чем ошибка то?
Крон запустил php Файл ( раз в сутки ), который получил данные в xml, далее JS берет нужные ему данные и вставляет в формулу.
Тему можно закрывать

laimas 22.11.2015 20:41

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


Часовой пояс GMT +3, время: 12:05.