Привет всем форумчанам, вопрос такой: имеется страничка, на ней форма, в нее заполняются данные. На php написан обработчик, которые производит вычисления. Требуется результатами этих вычислений заполнить таблицу, внизу исходной html странички. В приведенном коде все вперемешку, но данные из формы не передаются для обработки( Пы.сы. я не веб-программист и это не мой профиль, просто по курсачу попалась задачка, так что не кидайтесь тапками если это элементарно или было много раз, к сожалению ничего не нагуглил((( PHP: <!doctype html> <html> <head> <meta charset="utf-8"> <title>Монте-Карло</title> <link href="style.css" rel="stylesheet" type="text/css"> <script src="scripts.js" type="text/javascript"></script> <?php function Quadrangle($x, $y) { if (($y <= (($x - $ax) * ($cy) / ($cx - $ax))) && ($y <= (($x - $cx) * ($dy - $cy) / ($dx - $cx) + $cy)) && ($y >= (($x - $dx) * (-$dy) / ($ex - $dx) + $dy))) return true; return false; } function RandomPoint(&$x, &$y) { $y = (mt_rand(0,100)/100) * $cy; $x = (mt_rand(0,100)/100) * ($dx - $ax) + $ax; } function GeometricSquare() { $a = sqrt(pow($cx-$ax,2) + pow($cy,2)); $b = sqrt(pow($dx - $cx, 2) + pow($dy-$cy, 2)); $c = sqrt(pow($dx - $ex, 2) + pow($dy, 2)); $d = $ex-$ax; $p = ($a+$b+$c+$d)/2; return sqrt(($p-$a)*($p-$b)*($p-$c)*($p-$d)); } function MonteCarloSquare($n, &$m) { $m = 0; for ($i = 0; $i < $n; $i++) { $x, $y; RandomPoint($x,$y); if (Quadrangle($x,$y)) $m++; } return ((double)$m / (double)$n * ($dx - $ax) * $cy); } function Accuracy($a, $b)//а точное { return (abs($a - $b) / $a * 100); } function Experiment(&$time, &$acc, &$m, $n, &$monte) { $timer = time(); $monte = MonteCarloSquare($n, $m); $time = (int)(time()-$timer); $acc = Accuracy(GeometricSquare(), $monte); } ?> </head> <body> <fieldset><legend>Ввод данных</legend> <p> <label> <input type="radio" name="group1" id="ctrlVal" onClick="ctrlVal()"> Контрольные значения</label> <br> <label> <input type="radio" name="group1" id="rndVal" onClick="rndVal()"> Случайные значения</label> <br> <label> <input type="radio" name="group1" id="userVal" onClick="userVal()"> Пользовательские значения</label> <br> </p> </fieldset> <img src="fig.png" width="309" height="167" alt="" id="fig"/> <form action="" method="post"> <p id="rs"> <label>A</label> <label>C</label> <label>D</label> <label>E</label> </p> <p> <label>X</label> <input name= "ax" type="text" class="tb" value="" id="ax"> <input name= "cx" type="text" class="tb" value="" id="cx"> <input name= "dx" type="text" class="tb" value="" id="dx"> <input name= "ex" type="text" class="tb" value="" id="ex"> </p> <p> <label>Y</label> <label>0</label> <input name= "cy" type="text" class="tb" value="" id="cy"> <input name= "dy" type="text" class="tb" value="" id="dy"> <label>0</label> </p> <input type="submit" name="submit" id="submit" value="Вычислить" class="btn"> <input name="clear" type="button" value="Очистить" class="btn" onClick="clearInputs()"> <?php function Calc(){ $ax = (double)$ax; $cx = (double)$cx; $cy = (double)$cy; $dx = (double)$dx; $dy = (double)$dy; $ex = (double)$ex; $n = 1000; $m; $time; $acc; $monte; ?> <label id="gsquare">Геометрическая площадь = <?php GeometricSquare() ?></label> </form> </br> </br> <table width="1000" border="1" id="table"> <tr> <th scope="col">Точек, шт.</th> <th scope="col">Точек в фигуре, шт.</th> <th scope="col">Площадь, кв.ед.</th> <th scope="col">Погрешность, %</th> <th scope="col">Время, мс.</th> </tr> <?php for ($i=0;$i<5;$i++) { Experiment(&$time, &$acc, &$m, $n, &$monte); ?> <tr> <td><?php $n ?></td> <td><?php $m ?></td> <td><?php $monte ?></td> <td><?php $acc ?></td> <td><?php $time ?></td> </tr> <?php $n = $n * 10; } } if (isset($_POST['submit'])) { Calc(); } ?> </table> </body> </html>
PHP: <td><?=$n ?></td> <td><?=$m ?></td> <td><?=$monte ?></td> <td><?=$acc ?></td> <td><?=$time ?></td>
да весь косяк в том что страница обновляется и поля с исходными данными становятся пустыми, в итоге не считает(
при отправке формы, если не ajax-ом - страница будет обновляться. Можно сделать расчеты на сервере и заполнять на сервере таблицу. Если тебе нужно чтобы поля формы были заполнены, то есть атрибут value. Можно вообще ничего никуда не отправлять. Если всё что нужно для расчетов есть, то можно submit сменить на button и при нажатии на button всё считать в js.
нужно обязательно php, расчеты и должны производиться на сервере, а после выводиться в таблицу на той же странице
Тогда так: HTML: <input name= "ax" type="text" class="tb" value="<?=$_POST['ax']?>" id="ax"> <input name= "cx" type="text" class="tb" value="<?=$_POST['cx']?>" id="cx"> <input name= "dx" type="text" class="tb" value="<?=$_POST['dx']?>" id="dx"> <input name= "ex" type="text" class="tb" value="<?=$_POST['ex']?>" id="ex"> >
Вот тебе рабочий шаблон (если конечно ошибок не наделал)) код не проверял). По нему можешь ориентироваться. PHP: <?php if ( isset( $_POST['z'] ) ) { // Если существует значение кнопки отправки формы $x = $_POST['x']; //то извлекаем данные формы $y = $_POST['y']; $a = $x + $y; // и производим нужные расчеты $b = $x - $y; } else { // в противном случае, т е если форма не была отправлена - присваиваем всем переменным пустые значения $x = ""; $y = ""; $a = ""; $b = ""; } ?> <form action="" method="POST" > <input type="text" name="x" <?php echo "value='$x'" ?> /> // если данные были отправлены, то форма будет заполнена ими <input type="text" name="y" <?php echo "value='$y'" ?> /> <input type="submit" name="z" value="GO" /> </form> <table> // и в таблице выводим результат. Опять же если он есть. Иначе в место результата будут просто пустые ячейки <tr> <th>X</th> <th>Y</th> <th>X + Y</th> <th>X - Y</th> </tr> <tr> <td><?php echo $x; ?></td> <td><?php echo $y; ?></td> <td><?php echo $a; ?></td> <td><?php echo $b; ?></td> </tr> </table>
тут народ очень неохотно работает бесплатно.... я тебе написал шаблон. По нему можно всё сделать. А код ХЫИДУ ничего не считает а просто заполняет поля значениями, которыми они были заполнены до обновления страницы... Либо делай сам, либо плати... Такова жизнь
к сожалению значения не передаются( --- Добавлено --- Да я понимаю что бесплатно никому не охото... я и не прошу код, мне план действий нужен, а там думаю смекну сам)
Просто возьми данные из массива $_POST, не надо надеяться, что они сами по себе в одноименные переменные преобразуются. У тебя есть $_POST['ax'], $_POST['bx'] и т.д., а в функцию ты берешь нигде не определенные $ax, $bx и т.д. Можно сделать extract($_POST), но только внутри функции, в которой ты их используешь (т..е Calc())
у них выбора нет ^_^. Они всегда передаются. я тебе план действий как раз и написал. с комментариями, как положено, чтобы всё было понятно...