Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2015, 00:20
Новичок на форуме
Отправить личное сообщение для notamn Посмотреть профиль Найти все сообщения от notamn
 
Регистрация: 06.04.2015
Сообщений: 3

Получение переменной из 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. Гуглил. Не нашел того, что нужно или не разобрался.
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2015, 04:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А round то зачем? input type="number" в современных браузерах будет с кнопками, которыми можно производить изменение значения. По умолчанию, когда не указан шаг изменения значения, значение будет изменяться на единицу, а без указания минимального значения для поля, значения могут быть и отрицательными.

<input type="number" value="$a">

$_GET['a'] может определить атрибут name поля формы равный "a", но никак не значение поля равное "а". Более того, value="$a" никак не будет означать присвоение этому полю значения переменной $a. Чтобы ее прописать полю необходимо value="<?=$a?>".

Последний раз редактировалось laimas, 07.04.2015 в 04:35.
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2015, 05:18
Новичок на форуме
Отправить личное сообщение для notamn Посмотреть профиль Найти все сообщения от notamn
 
Регистрация: 06.04.2015
Сообщений: 3

Да дело в том, что не хотел усложнять. На самом деле все выглядит так:
<?
$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, чтобы когда изменяешь значение в форме менялись все зависимые значения на лету.
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2015, 07:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Уверены, что будет работать?

<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>

Установите значения полям формы по умолчанию, то есть когда страница отдается пользователю.

Последний раз редактировалось laimas, 07.04.2015 в 08:02.
Ответить с цитированием
  #5 (permalink)  
Старый 08.04.2015, 01:42
Новичок на форуме
Отправить личное сообщение для notamn Посмотреть профиль Найти все сообщения от notamn
 
Регистрация: 06.04.2015
Сообщений: 3

Спасибо добрый человек. Все получилось. У меня сервер на ноуте стоит, и почему-то грелся сильно и браузер грузил процессор на 98% пока не сделал exit(); вместо exit($s);.
Только вот еще вопрос:
здесь
$.get(location, $(this).serialize(), function(d)

вместо location мне кажется можно вписать адрес до пхп файла, чтобы вынести код. Это так? Дело в том, что у меня на вышло.
Ответить с цитированием
  #6 (permalink)  
Старый 08.04.2015, 04:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

exit — выводит сообщение и прекращает выполнение текущего скрипта. Строка сообщения $s формируется в цикле, именно он и грузит ваш процессор. Я же вам показал значение при котором сервер начнет "глубоко задумываться", и последствия этих раздумий могут быть плачевны. Вывод сразу, без конкатенации строки, разгрузит немного процессор, но не устраняет проблемы.

На месте location в методе .get() и указывается url по которому происходит запрос. Но location, это тоже адрес - url текущей страницы, я пишу так чтобы не привязывать пример к конкретному имени файла, у меня он может называться a.php, а вы его можете запускать как b.html по любому пути.

Последний раз редактировалось laimas, 08.04.2015 в 07:56.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение id строки и передача значения переменной php msscriin jQuery 17 27.10.2013 11:52
Получение переменной из БД через ajax FoxTrix AJAX и COMET 3 15.11.2012 10:45
Передача переменной из js в php, посредством ajax 9xakep Серверные языки и технологии 32 05.05.2012 13:02
AJAX обращение к файлу php и получение значения zeraid jQuery 8 28.03.2011 14:46
Передача переменной из JS в PHP методом ajax skalka jQuery 7 28.08.2010 12:05