За последние 24 часа нас посетили 280817 программистов и 4534 робота. Сейчас ищут 2396 программистов ...

Передача данных из php в html

Тема в разделе "PHP для новичков", создана пользователем VikThor, 3 май 2016.

  1. VikThor

    VikThor Активный пользователь

    С нами с:
    3 май 2016
    Сообщения:
    6
    Симпатии:
    0
    Привет всем форумчанам, вопрос такой: имеется страничка, на ней форма, в нее заполняются данные. На php написан обработчик, которые производит вычисления. Требуется результатами этих вычислений заполнить таблицу, внизу исходной html странички. В приведенном коде все вперемешку, но данные из формы не передаются для обработки(
    Пы.сы. я не веб-программист и это не мой профиль, просто по курсачу попалась задачка, так что не кидайтесь тапками если это элементарно или было много раз, к сожалению ничего не нагуглил(((
    PHP:
    1. <!doctype html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>Монте-Карло</title>
    6. <link href="style.css" rel="stylesheet" type="text/css">
    7. <script src="scripts.js" type="text/javascript"></script>
    8. <?php
    9. function Quadrangle($x, $y)
    10. {
    11.     if (($y <= (($x - $ax) * ($cy) / ($cx - $ax))) && ($y <= (($x - $cx) * ($dy - $cy) / ($dx - $cx) + $cy)) && ($y >= (($x - $dx) * (-$dy) / ($ex - $dx) + $dy))) return true;
    12.     return false;
    13. }
    14. function RandomPoint(&$x, &$y)
    15. {
    16.     $y = (mt_rand(0,100)/100) * $cy;
    17.     $x = (mt_rand(0,100)/100) * ($dx - $ax) + $ax;
    18. }
    19. function GeometricSquare()
    20. {
    21.     $a = sqrt(pow($cx-$ax,2) + pow($cy,2));
    22.     $b = sqrt(pow($dx - $cx, 2) + pow($dy-$cy, 2));
    23.     $c = sqrt(pow($dx - $ex, 2) + pow($dy, 2));
    24.     $d = $ex-$ax;
    25.     $p = ($a+$b+$c+$d)/2;
    26.     return sqrt(($p-$a)*($p-$b)*($p-$c)*($p-$d));
    27. }
    28. function MonteCarloSquare($n, &$m)
    29. {
    30.     $m = 0;
    31.     for ($i = 0; $i < $n; $i++)
    32.     {
    33.         $x, $y;
    34.         RandomPoint($x,$y);
    35.         if (Quadrangle($x,$y))
    36.             $m++;
    37.     }
    38.     return ((double)$m / (double)$n * ($dx - $ax) * $cy);
    39. }
    40. function Accuracy($a, $b)//а точное
    41. {
    42.     return (abs($a - $b) / $a * 100);
    43. }
    44. function Experiment(&$time, &$acc, &$m, $n, &$monte)
    45. {
    46.     $timer = time();
    47.     $monte = MonteCarloSquare($n, $m);
    48.     $time = (int)(time()-$timer);
    49.     $acc = Accuracy(GeometricSquare(), $monte);
    50. }
    51. ?>
    52. </head>
    53.  
    54. <body>
    55.   <fieldset><legend>Ввод данных</legend>
    56.     <p>
    57.                 <label>
    58.                   <input type="radio" name="group1" id="ctrlVal" onClick="ctrlVal()">
    59.                   Контрольные значения</label>
    60.                 <br>
    61.                 <label>
    62.                   <input type="radio" name="group1" id="rndVal" onClick="rndVal()">
    63.                   Случайные значения</label>
    64.                 <br>
    65.                 <label>
    66.                   <input type="radio" name="group1" id="userVal" onClick="userVal()">
    67.                   Пользовательские значения</label>
    68.                 <br>
    69.     </p>
    70.   </fieldset>
    71.   <img src="fig.png" width="309" height="167" alt="" id="fig"/>
    72. <form action="" method="post">
    73.           <p id="rs">
    74.             <label>A</label>
    75.             <label>C</label>
    76.             <label>D</label>
    77.             <label>E</label>
    78.           </p>
    79.       <p>
    80.            <label>X</label>
    81.           <input name= "ax" type="text" class="tb" value="" id="ax">
    82.           <input name= "cx" type="text" class="tb" value="" id="cx">
    83.           <input name= "dx" type="text" class="tb" value="" id="dx">
    84.           <input name= "ex" type="text" class="tb" value="" id="ex">
    85.       </p>
    86.       <p>
    87.            <label>Y</label>
    88.             <label>0</label>
    89.             <input name= "cy" type="text" class="tb" value="" id="cy">
    90.             <input name= "dy" type="text" class="tb" value="" id="dy">
    91.             <label>0</label>
    92.         </p>
    93.     <input type="submit" name="submit" id="submit" value="Вычислить" class="btn">
    94.     <input name="clear" type="button" value="Очистить" class="btn" onClick="clearInputs()">
    95.     <?php
    96.     function Calc(){
    97.         $ax = (double)$ax;
    98.         $cx = (double)$cx;
    99.         $cy = (double)$cy;
    100.         $dx = (double)$dx;
    101.         $dy = (double)$dy;
    102.         $ex = (double)$ex;
    103.         $n = 1000;
    104.         $m;
    105.         $time;
    106.         $acc;
    107.         $monte;  
    108.     ?>
    109.     <label id="gsquare">Геометрическая площадь = <?php GeometricSquare()  ?></label>
    110.   </form>
    111.     </br>
    112.     </br>
    113.   <table width="1000" border="1" id="table">
    114.   <tr>
    115.     <th scope="col">Точек, шт.</th>
    116.     <th scope="col">Точек в фигуре, шт.</th>
    117.     <th scope="col">Площадь, кв.ед.</th>
    118.     <th scope="col">Погрешность, %</th>
    119.     <th scope="col">Время, мс.</th>
    120.   </tr>
    121.   <?php
    122.       for ($i=0;$i<5;$i++) {
    123.         Experiment(&$time, &$acc, &$m, $n, &$monte);
    124.   ?>
    125.    <tr>
    126.     <td><?php $n  ?></td>
    127.     <td><?php $m  ?></td>
    128.     <td><?php $monte ?></td>
    129.     <td><?php $acc  ?></td>
    130.     <td><?php $time  ?></td>
    131.   </tr>
    132.   <?php            
    133.          $n = $n * 10;
    134.     }
    135.   }
    136.   if (isset($_POST['submit'])) {
    137.     Calc();
    138.   }
    139.   ?>
    140. </table>
    141. </body>
    142. </html>
     
    #1 VikThor, 3 май 2016
    Последнее редактирование модератором: 4 май 2016
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.599
    Симпатии:
    206
    <?php echo $time
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    PHP:
    1.     <td><?=$n  ?></td>
    2.     <td><?=$m  ?></td>
    3.     <td><?=$monte ?></td>
    4.     <td><?=$acc  ?></td>
    5.     <td><?=$time  ?></td>
     
  4. VikThor

    VikThor Активный пользователь

    С нами с:
    3 май 2016
    Сообщения:
    6
    Симпатии:
    0
    да весь косяк в том что страница обновляется и поля с исходными данными становятся пустыми, в итоге не считает(
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    при отправке формы, если не ajax-ом - страница будет обновляться.

    Можно сделать расчеты на сервере и заполнять на сервере таблицу.

    Если тебе нужно чтобы поля формы были заполнены, то есть атрибут value.

    Можно вообще ничего никуда не отправлять. Если всё что нужно для расчетов есть, то можно submit сменить на button и при нажатии на button всё считать в js.
     
    VikThor нравится это.
  6. VikThor

    VikThor Активный пользователь

    С нами с:
    3 май 2016
    Сообщения:
    6
    Симпатии:
    0
    нужно обязательно php, расчеты и должны производиться на сервере, а после выводиться в таблицу на той же странице
     
  7. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Тогда так:

    HTML:
    1.           <input name= "ax" type="text" class="tb" value="<?=$_POST['ax']?>" id="ax">
    2.           <input name= "cx" type="text" class="tb" value="<?=$_POST['cx']?>" id="cx">
    3.           <input name= "dx" type="text" class="tb" value="<?=$_POST['dx']?>" id="dx">
    4.           <input name= "ex" type="text" class="tb" value="<?=$_POST['ex']?>" id="ex">
    >
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    Вот тебе рабочий шаблон (если конечно ошибок не наделал)) код не проверял).
    По нему можешь ориентироваться.

    PHP:
    1. <?php
    2.  
    3. if ( isset( $_POST['z'] ) ) { // Если существует значение кнопки отправки формы
    4.  
    5. $x = $_POST['x'];   //то извлекаем данные формы
    6.  
    7. $y = $_POST['y'];
    8.  
    9. $a = $x + $y;   // и производим нужные расчеты
    10.  
    11. $b = $x - $y;
    12.  
    13. } else { // в противном случае, т е если форма не была отправлена -  присваиваем всем переменным пустые значения
    14.  
    15. $x = "";
    16.  
    17. $y = "";
    18.  
    19. $a = "";
    20.  
    21. $b = "";
    22.  
    23. }
    24.  
    25. ?>
    26.  
    27. <form action="" method="POST" >
    28.  
    29. <input type="text" name="x" <?php echo "value='$x'" ?> /> // если данные были отправлены, то форма будет заполнена ими
    30.  
    31. <input type="text" name="y" <?php echo "value='$y'" ?> />
    32.  
    33. <input type="submit" name="z"  value="GO" />
    34.  
    35. </form>
    36.  
    37. <table> // и в таблице выводим результат. Опять же если он есть. Иначе в место результата будут просто пустые ячейки
    38.  
    39. <tr>
    40.  
    41. <th>X</th>   <th>Y</th>  <th>X + Y</th>   <th>X - Y</th>
    42.  
    43. </tr>
    44.  
    45. <tr>
    46.  
    47. <td><?php  echo $x;  ?></td>   <td><?php  echo $y;  ?></td>   <td><?php  echo $a;  ?></td>   <td><?php  echo $b;  ?></td>
    48.  
    49. </tr>
    50.  
    51. </table>
     
  9. VikThor

    VikThor Активный пользователь

    С нами с:
    3 май 2016
    Сообщения:
    6
    Симпатии:
    0
    при обновлении страницы данные в инпутах остаются, но не считает(
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    тут народ очень неохотно работает бесплатно.... я тебе написал шаблон. По нему можно всё сделать. А код ХЫИДУ ничего не считает а просто заполняет поля значениями, которыми они были заполнены до обновления страницы...
    Либо делай сам, либо плати... Такова жизнь :(
     
  11. VikThor

    VikThor Активный пользователь

    С нами с:
    3 май 2016
    Сообщения:
    6
    Симпатии:
    0
    к сожалению значения не передаются(
    --- Добавлено ---
    Да я понимаю что бесплатно никому не охото... я и не прошу код, мне план действий нужен, а там думаю смекну сам)
     
  12. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Просто возьми данные из массива $_POST, не надо надеяться, что они сами по себе в одноименные переменные преобразуются. У тебя есть $_POST['ax'], $_POST['bx'] и т.д., а в функцию ты берешь нигде не определенные $ax, $bx и т.д.
    Можно сделать extract($_POST), но только внутри функции, в которой ты их используешь (т..е Calc())
     
  13. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    у них выбора нет ^_^. Они всегда передаются.
    я тебе план действий как раз и написал. с комментариями, как положено, чтобы всё было понятно...
     
    VikThor нравится это.
  14. VikThor

    VikThor Активный пользователь

    С нами с:
    3 май 2016
    Сообщения:
    6
    Симпатии:
    0
    Всем спасибо, нужно было в функциях объявить переменные как глобальные, а то их не видно