Получение переменной из php в ajax
Доброго времени суток люди добрые.
Помогите начинающему решить такую задачу. Есть необходимость составить форму - таблицу, в которой при изменении одного из нескольких значений все остальные на лету пересчитывались php скриптом. Объясните или подскажите пожалуйста на вот таком примере: Это пхп: <? $a=$_GET['a']; $b=$_GET['b']; $c=round($a+$b,2); $d=round($a/$b,2); $e=round($d+$b); ?> Это Html: <html> <head> <meta charset="UTF-8"> <title>Document</title> <script> ????? </script> </head> <body> <form action="math.php"> a: <input type="number" value="$a"> b: <input type="number" value="$b"> c: <input type="number" value="$c" disabled="disabled"> d: <input type="number" value="$d" disabled="disabled"> e: <input type="number" value="$e" disabled="disabled"> </form> </body> </html> Прошу прощения заранее если оскорбил чувства специалистов подобной элементарщиной. Просто чтобы начать хоть как-то изучать, надо с чего-то нужного начать. А это как раз нужно. Спасибо.:-? P.S. Гуглил. Не нашел того, что нужно или не разобрался. |
А round то зачем? input type="number" в современных браузерах будет с кнопками, которыми можно производить изменение значения. По умолчанию, когда не указан шаг изменения значения, значение будет изменяться на единицу, а без указания минимального значения для поля, значения могут быть и отрицательными.
<input type="number" value="$a"> $_GET['a'] может определить атрибут name поля формы равный "a", но никак не значение поля равное "а". Более того, value="$a" никак не будет означать присвоение этому полю значения переменной $a. Чтобы ее прописать полю необходимо value="<?=$a?>". |
Да дело в том, что не хотел усложнять. На самом деле все выглядит так:
<? $k1 = $_GET['k1']; $k2 = $_GET['k2']; $cash1 = $_GET['cash1']; $step = $_GET['step']; $ke=$k2; echo 'k1 = '.$k1.'<br>'; echo 'k2 = '.$k2.'<br>'; echo 'cash1 = '.$cash1.'<br>'; while ($k2 < $k1) { $n++; $cash2 = ($k1/$k2)*$cash1; $c1 = $k1*$cash1-$cash1; $c2 = $k2*$cash2-$cash2; $p1 = $c1-$c1*6.5/100; $p2 = ($c1-$c2)-(($c1-$c2)*6.5/100); echo $n.': Up = '.$k1.', Down = '.$k2.' Cash2 = '.round($cash2,2).' Profit = '.round($p2,2).'<br>'; $k2 = $k2 + $step; } ?> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action=""> k1:<input type="number" min="1.01" step="0.01" name="k1" value="<?echo $k1;?>"> k2:<input type="number" min="1.01" step="0.01" name="k2" value="<?echo $ke;?>"> cash1:<input type="number" name="cash1" value="<?echo $cash1;?>"> step:<input type="number" step="0.01" name="step" value="<?echo $step;?>"> <input type="submit" value="OK"> </form> </body> </html> и все работает. Хочется прилепить к этому делу ajax, чтобы когда изменяешь значение в форме менялись все зависимые значения на лету. |
Уверены, что будет работать?
<input type="number" min="1.01" step="0.01" name="k1" value="10000.1"> Проверяйте. Уже с этим значением завалить ваш сервер раз плюнуть. Поля ввода не имеют макс. значений, а сервер не проверяет этого, как и не проверяет тип принятых данных. Если в рамках HTML5, тогда так: <? if($_GET) { $k1 = $_GET['k1']; $k2 = $_GET['k2']; $cash1 = $_GET['cash1']; $step = $_GET['step']; $ke=$k2; $s = 'k1 = '.$k1.'<br>k2 = '.$k2.'<br>cash1 = '.$cash1.'<br>'; while ($k2 < $k1) { $n++; $cash2 = ($k1/$k2)*$cash1; $c1 = $k1*$cash1-$cash1; $c2 = $k2*$cash2-$cash2; $p1 = $c1-$c1*6.5/100; $p2 = ($c1-$c2)-(($c1-$c2)*6.5/100); $s .= $n.': Up = '.$k1.', Down = '.$k2.' Cash2 = '.round($cash2,2).' Profit = '.round($p2,2).'<br>'; $k2 = $k2 + $step; } exit($s); } ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style> </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> <script> $(function() { $('form').change(function() { $.get(location, $(this).serialize(), function(d) { $('#res').html(d) }); return false; }) }); </script> </head> <body> <form> k1:<input type="number" min="1.01" step="0.01" name="k1" value=""> k2:<input type="number" min="1.01" step="0.01" name="k2" value=""> cash1:<input type="number" name="cash1" value=""> step:<input type="number" step="0.01" name="step" value=""> <input type="submit" value="OK"> </form> </div> <p id="res"></p> </body> </html> Установите значения полям формы по умолчанию, то есть когда страница отдается пользователю. |
Спасибо добрый человек. Все получилось. У меня сервер на ноуте стоит, и почему-то грелся сильно и браузер грузил процессор на 98% пока не сделал exit(); вместо exit($s);.
Только вот еще вопрос: здесь $.get(location, $(this).serialize(), function(d) вместо location мне кажется можно вписать адрес до пхп файла, чтобы вынести код. Это так? Дело в том, что у меня на вышло. |
exit — выводит сообщение и прекращает выполнение текущего скрипта. Строка сообщения $s формируется в цикле, именно он и грузит ваш процессор. Я же вам показал значение при котором сервер начнет "глубоко задумываться", и последствия этих раздумий могут быть плачевны. Вывод сразу, без конкатенации строки, разгрузит немного процессор, но не устраняет проблемы.
На месте location в методе .get() и указывается url по которому происходит запрос. Но location, это тоже адрес - url текущей страницы, я пишу так чтобы не привязывать пример к конкретному имени файла, у меня он может называться a.php, а вы его можете запускать как b.html по любому пути. |
Часовой пояс GMT +3, время: 16:30. |