Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Interpolacja Lagrange-Nie pobiera danych od użytkownika
Forum PHP.pl > Forum > PHP
K3n0
Witam,nie jestem pewny czy powinienem zakładać nowy temat czy edytować poprzedni,który był też związany z interpolacją.
Mianowicie kod działa sprawdzałem. Wynik wychodził prawidłowy,ale gdy chce zrobić ,żeby dane pobierał z formularza.
Myślę, że popełniłem błąd przy pobieraniu danych, ale gdzie to nie wiem ,już trochę nad tym siedzę.

  1.  
  2. <form action="" method="post">
  3. Podaj n:
  4. <input type="text" name="liczb" class="interpolacja"/>
  5. <?php
  6. echo '</br></br>';
  7. $liczb = $_POST['liczb'];
  8. for($i=0;$i<$liczb;$i++)
  9. {
  10. echo' Podaj x: <input type=\'text\' name=\'liczb1[$i]\' class="interpolacja"/>';
  11. $liczb1 = $_POST['liczb1[$i]'];
  12. echo' Podaj y: <input type=\'text\' name=\'liczb2[$i]\' class="interpolacja"/>';
  13. $liczb2 = $_POST['liczb2[$i]'];
  14. echo'</br>';
  15. }
  16. echo' Podaj X dla jakiego szukasz wartości Y: <input type=\'text\' name=\'liczb3\' class="interpolacja"/>';
  17.  
  18. $liczb3 = $_POST['liczb3'];
  19. /////////////////////////////////////////////////////////////////////
  20.  
  21. $daneX = $liczb1;
  22. $daneY = $liczb2;
  23. $danex1 = $liczb3;
  24. $x_ = Array($daneX); // 1,4,9
  25. $y_ = Array($daneY); // 1,2,3
  26.  
  27.  
  28. $x = $danex1; //7
  29. $y = 0;
  30. $t = 0;
  31.  
  32.  
  33. for($k = 0; $k < count($x_); $k++)
  34. {
  35. $t=1;
  36. for($j = 0; $j < count($x_) ; $j++)
  37. {
  38. if($j != $k )
  39. {
  40. $t=$t*(($x-$x_[$j])/($x_[$k]-$x_[$j]));
  41. }
  42. }
  43. $y += $t*$y_[$k];
  44. }
  45. echo('</br>');
  46. echo ("Wynik: ");
  47. echo $y;
  48.  
  49.  
  50. ////////////////////////////////////////////////////////////////////
  51.  
  52.  
  53. echo ('</br>');
  54.  
  55.  
  56.  
  57. ?>
  58. </br></br>
  59. <button class="oblicz2">Oblicz</button>
  60. </form>
  61.  
  62.  
  63.  
  64.  
kapslokk
Eeee, ale Ty wiesz, że te wszystkie posty masz dostępne dopiero po wysłaniu formularza? Z tego co widzę to powinieneś:
1. Stworzyć formularz z jednym polem - "liczb".
2. Odebrać formularz z polem "liczb" i na podstawie tej zmiennej stworzyć nowy formularz z polami liczb1, liczb2, liczb3 w ilości takiej jaką przesłałeś w poprzednim formularzu
3. Odebrać formularz z punktu drugiego i wykonać odpowiednie obliczenia.
Radzę poczytać jakiś kurs PHP, bo bez tego raczej będzie ciężko.
K3n0
Właśnie czytam od niedawna dzięki za pomoc spróbuje zrobić tak jak mówisz.

Zrobilem 3 pliki
1.index.php
  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title></title>
  5. </head>
  6. <body>
  7. <form action="forminter1.php" method="POST">
  8. Podaj n:
  9. <input type="text" name="liczb" class="interpolacja"/>
  10.  
  11. <button type="submit" class="oblicz2">Podaj N</button>
  12. </form>
  13. </br></br>
  14. </body>
  15. </html>

2.forminter1.php
  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title></title>
  5. </head>
  6. <body>
  7. <?php
  8. $liczb = $_POST['liczb'];
  9. echo("Ilość podanych punktów przez Ciebie to:");
  10.  
  11. echo $liczb;
  12. echo ("Podaj Swoje punkty:");
  13. ?>
  14. <form action="forminter2.php" method="post">
  15. </br></br>
  16. <?php
  17. $liczb = $_POST['liczb'];
  18. for($i=0;$i<$liczb;$i++)
  19. {
  20. echo' Podaj x: <input type=\'text\' name=\'liczb1[$i]\' class="interpolacja"/>';
  21. $liczb1 = $_POST['liczb1[$i]'];
  22. echo' Podaj y: <input type=\'text\' name=\'liczb2[$i]\' class="interpolacja"/>';
  23. $liczb2 = $_POST['liczb2[$i]'];
  24. echo'</br>';
  25. }
  26. echo' Podaj X dla jakiego szukasz wartości Y: <input type=\'text\' name=\'liczb3\' class="interpolacja"/>';
  27.  
  28. $liczb3 = $_POST['liczb3'];
  29. ?>
  30. <button type="submit" class="oblicz2">Oblicz</button>
  31.  
  32. </form>
  33. </br></br>
  34. </body>
  35. </html>

3.forminter2.php
  1.  
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form action="" method="POST">
  9. <?php
  10.  
  11. $daneX = $liczb1;
  12. $daneY = $liczb2;
  13. $danex1 = $liczb3;
  14. $x_ = Array($daneX); // 1,4,9
  15. $y_ = Array($daneY); // 1,2,3
  16.  
  17.  
  18. $x = $danex1; //7
  19. $y = 0;
  20. $t = 0;
  21.  
  22.  
  23. for($k = 0; $k < count($x_); $k++)
  24. {
  25. $t=1;
  26. for($j = 0; $j < count($x_) ; $j++)
  27. {
  28. if($j != $k )
  29. {
  30. $t=$t*(($x-$x_[$j])/($x_[$k]-$x_[$j]));
  31. }
  32. }
  33. $y += $t*$y_[$k];
  34. }
  35. echo('</br>');
  36. echo ("Wynik: ");
  37. echo $y;
  38.  
  39.  
  40. ////////////////////////////////////////////////////////////////////
  41.  
  42.  
  43. echo ('</br>');
  44.  
  45. ?>
  46.  
  47.  
  48.  
  49.  
  50. </form>
  51. </br></br>
  52. </body>
  53. </html>


Nadal nie działa ale nie jestem pewny czy tak miałem zrobić
kapslokk
Po pierwsze:
W forminter1.php napisałeś:

  1. $liczb1 = $_POST['liczb1[$i]'];


$_POST['liczb1'] będziesz miał dopiero jak wyślesz formularz który tam wyświetlasz. Czyli w forminter2.php
zamiast
  1. $daneX = $liczb1;

powinieneś mieć
  1. $daneX = $_POST['liczb1'];


Po drugie:
echo' Podaj x: <input type=\'text\' name=\'liczb1[$i]\' class="interpolacja"/>';
wydaje mi się, że wyświetli "Podaj x: <input type='text' name='liczb1[$i]' class="interpolacja"/>';
Czyli po wysłaniu formularza i tak będziesz miał tablicę wyglądającą tak : $_POST[''liczb']["$i"] = 'costam';
Albo wstaw tam zmienną oddzielając zmienną od reszty stringu w ten sposób: '.$i.' albo użyj dla całości " zamiast '

Po trzecie:
Nawet gdybyś miał stworzoną zmienną:
  1. $liczb1 = $_POST['liczb1[$i]'];

To po przekazaniu tablicy w inpucie (name="liczb1[$i]") wysyłasz tablicę w formie: $_POST['liczb1'][$i]; a nie $_POST['liczb1[$i]'];


@edit
Jeżeli nie musisz tego robić (zaliczenie etc) to może warto zacząć od czegoś prostszego?
K3n0
Dzięki Ci bardzo, Niestety musze to zrobić;p.Jak bym nie musiał to zacząłbym od dużo łatwiejszych rzeczy.Jeszcze raz dzięki.

Te echo' Podaj x: <input type=\'text\' name=\'liczb1[$i]\' class="interpolacja"/>'; działa bo tworzą sie boxy do tekstu.Poprawiłem to, ale niestety znowu jakiś błąd.Przy wyniku:
Fatal error: Unsupported operand types in C:\xampp\htdocs\inter\forminter2.php on line 32

1.
  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title></title>
  5. </head>
  6. <body>
  7. <form action="forminter1.php" method="POST">
  8. Podaj n:
  9. <input type="text" name="liczb" class="interpolacja"/>
  10.  
  11. <button type="submit" class="oblicz2">Podaj N</button>
  12. </form>
  13. </br></br>
  14. </body>
  15. </html>
  16.  

2.
  1.  
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <?php
  9. $liczb = $_POST['liczb'];
  10. echo("Ilość podanych punktów przez Ciebie to:");
  11.  
  12. echo $liczb;
  13. echo ("Podaj Swoje punkty:");
  14. ?>
  15. <form action="forminter2.php" method="post">
  16. </br></br>
  17. <?php
  18. $liczb = $_POST['liczb'];
  19. for($i=0;$i<$liczb;$i++)
  20. {
  21. echo' Podaj x: <input type=\'text\' name=\'liczb1[$i]\' class="interpolacja"/>';
  22. $liczb1 = $_POST["liczb1"]["$i"];
  23. echo' Podaj y: <input type=\'text\' name=\'liczb2[$i]\' class="interpolacja"/>';
  24. $liczb2 = $_POST["liczb2"]["$i"];
  25. echo'</br>';
  26. }
  27. echo' Podaj X dla jakiego szukasz wartości Y: <input type=\'text\' name=\'liczb3\' class="interpolacja"/>';
  28.  
  29. $liczb3 = $_POST['liczb3'];
  30. ?>
  31. <button type="submit" class="oblicz2">Oblicz</button>
  32.  
  33. </form>
  34. </br></br>
  35. </body>
  36. </html>

3.
  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title></title>
  5. </head>
  6. <body>
  7. <form action="" method="POST">
  8. <?php
  9.  
  10. $daneX = $_POST['liczb1'];
  11. $daneY = $_POST['liczb2'];
  12. $danex1 = $_POST['liczb3'];
  13. $x_ = Array($daneX); // 1,4,9
  14. $y_ = Array($daneY); // 1,2,3
  15.  
  16.  
  17. $x = $danex1; //7
  18. $y = 0;
  19. $t = 0;
  20.  
  21.  
  22. for($k = 0; $k < count($x_); $k++)
  23. {
  24. $t=1;
  25. for($j = 0; $j < count($x_) ; $j++)
  26. {
  27. if($j != $k )
  28. {
  29. $t=$t*(($x-$x_[$j])/($x_[$k]-$x_[$j]));
  30. }
  31. }
  32. $y += $t*$y_[$k];
  33. }
  34. echo('</br>');
  35. echo ("Wynik: ");
  36. echo $y;
  37.  
  38.  
  39. ////////////////////////////////////////////////////////////////////
  40.  
  41.  
  42. echo ('</br>');
  43.  
  44. ?>
  45.  
  46.  
  47.  
  48.  
  49. </form>
  50. </br></br>
  51. </body>
  52. </html>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.