Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z przekazywaniem zmiennych w PHP
przemo79
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.08.2007

Ostrzeżenie: (0%)
-----


Witam.
Wiem, że podobne tematy były już na forum, ale nie znalazłem tego co mi jest potrzebne lub nie umiem szukać (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) . Chodzi mi o to, że mam formularz w HTML i przekazuje z niego dane do skryptu PHP. Później ten skrypt sobie coś tam oblicza. To ta łatwa część (chociaż dopiero się uczę PHP). Następnie mam drugi formularz gdzie użytkownik wybiera czy dalej kontunuować obliczenia czy wrócić do poprzedniego okna bo np. się machnął przy wprowadzaniu danych.
Teraz chcę zrobić coś takiego, żeby po wybraniu opcji dalej wyniki obliczeń mogły być użyte w tym samym skrypcie i w tym momencie utknąłem. Więc jeśli ktoś ma jakiś pomysł będę bardzo wdzięczny.
Poniżej zamieszczam kod który stworzyłem (przy wykorzystaniu pomocy wiadomości z netu):
  1. <?php
  2. //wczytanie danych z formularza
  3. if (!empty($_POST["day1"])) {$d1 = $_POST["day1"];}
  4. if (!empty($_POST['month1'])) {$m1 = $_POST['month1'];}
  5. if (!empty($_POST['year1'])) {$y1 = $_POST['year1'];}
  6.  
  7. if (!empty($_POST['day2'])) {$d2 = $_POST['day2'];}
  8. if (!empty($_POST['month2'])) {$m2 = $_POST['month2'];}
  9. if (!empty($_POST['year2'])) {$y2 = $_POST['year2'];}
  10. //sprawdzenie warunków poczatkowych
  11. if ((!$d1) || (!$m1) || (!$y1)) {echo "Podaj dzien wjazdu";}
  12. elseif (!$d2 || !$m2 || !$y2) {echo "Podaj dzien wyjazdu";}
  13. elseif (($y1 > $y2)||($m1>$m2)||($d1>$d2)) {echo "Data wyjazdu musi byc taka sama lub pozniejsza";}
  14. else
  15. $suma = $suma+licz($d1,$m1,$y1,$d2,$m2,$y2);
  16. echo "<p>Uplynelo ", $suma, " dni.</p>";
  17. function licz($d1,$m1,$y1,$d2,$m2,$y2)
  18. {
  19. // Funkcja zwraca liczbe dni miedzy dwoma przekazanymi datami.
  20. function count_days($a, $b) 
  21. {
  22. $suma=0;
  23. $dd = 0;
  24. $rok = 0;
  25. // Najpierw nalezy przeksztalcic daty na czesci skladowe:
  26. $a_dt = getdate($a);
  27. $b_dt = getdate($b);
  28. // Funkcja sprawdza, czy okreslony rok jest przestepny, czy nie:
  29. function is_leap_year($y) 
  30. {
  31. // Jesli rok dzieli sie przez 4, ale nie dzieli sie przez 100 lub dzieli sie przez
     400:
  32. return ((($y % 4) == 0) && ((($y % 100) != 0) || (($y % 400) == 0)));
  33. }
  34. // Sprawdzenie, czy lata z podanego zakresu sa przestepne:
  35. function sprawdz_rok($a, $b)
  36. {
  37. $dd = 0;
  38. foreach(range($a,$b) as $i)
  39. {
  40. if (is_leap_year($i)) 
  41. {
  42. $dd = $dd + 1;
  43. } 
  44. }
  45.  
  46. return $dd;
  47. }
  48. if ((is_leap_year($b_dt['year']) || is_leap_year($a_dt['year'])) && (($b_dt['mon'] >=|| $a_dt['mon'] >=2) && ($a_dt['mday']>28 || $b_dt['mday']>28)))
  49. {
  50. $rok = sprawdz_rok($b_dt['year'], $a_dt['year']);
  51. print $rok;
  52. print "jestem w if!!!";
  53. }
  54. // Odtworzenie znaczników czasu z wykorzystaniem poludnia kazdego dnia.
  55. // Dokladny czas nie ma znaczenia, ale musi to byc ta sama godzina w kazdym dniu.
  56. $a_new = mktime(12, 0, 0, $a_dt['mon'], $a_dt['mday'], $a_dt['year']);
  57. $b_new = mktime(12, 0, 0, $b_dt['mon'], $b_dt['mday'], $b_dt['year']);
  58. // Odjecie dwóch liczb i podzielenie przez liczbe sekund przypadajaca na dzien.
  59. // Zaokraglenie wyniku, poniewaz przekroczenie granicy zmiany czasu z letniego na 
    zimowy (lub odwrotnie)
  60. // spowoduje róznice w czasie o godzine lub dwie.
  61. return round(abs($a_new - $b_new) / 86400)+1+$rok;
  62. }
  63. $date1 = strtotime($m1."/".$d1."/".$y1);
  64. $date2 = strtotime($m2."/".$d2."/".$y2);
  65. $suma=$suma+count_days($date2, $date1);
  66.  
  67. //if (!empty($_POST["yes"])) {licz($d1,$m1,$y1,$d2,$m2,$y2);}
  68. //if (!empty($_POST['no'])) break;
  69. return $suma;
  70. }
  71. ?>
  72. <form method="post" action="dni.htm">
  73. Obliczyc ponownie?
  74. <p>
  75. <label>
  76. <input type="radio" name="ponownie" value="1">
  77. Tak</label>
  78. <br>
  79. <label>
  80. <input type="radio" name="ponownie" value="0" checked="checked">
  81. Nie</label>
  82. <br>
  83. </p>
  84. <input type=submit value=Wyslij><br>
  85. </form>
  86. <?php 
  87. //wczytanie danych z formularza
  88. if (!empty($_POST['ponownie'][0])) {$y = $_POST['ponownie'][0];}
  89. if (!empty($_POST['ponownie'][1])) {$n = $_POST['ponownie'][1];}
  90.  
  91. ?>

oraz formularz html:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <title>Program do liczenia dni pobytu</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6.  
  7. <form action="licz_dni.php" method="POST">
  8. Dzien wjazdu:
  9. Dzień: <input type=text name=day1 maxsize=2>
  10. Miesiąc : <input type=text name=month1 maxsize=2>
  11. Rok : <input type=text name=year1 maxsize=4><br><br>
  12. Dzien wyjazdu:
  13. Dzień:<input type=text name=day2 maxsize=2>
  14. Miesiąc : <input type=text name=month2 maxsize=2>
  15. Rok : <input type=text name=year2 maxsize=4><br><br>
  16. <input type=submit value=Oblicz><br>
  17. </form>
  18. </body>
  19. </html>


Ten post edytował przemo79 5.08.2007, 08:48:39
Go to the top of the page
+Quote Post
kossa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


po wywołaniu drugiego formularza po wykonaniuobliczen przekaz do niego dane z pierwszego kroku (te wyliczone) do pol np. typu hidden lub zapisz do sesji i powyslaniu przez usera drugiego formularza (krok 2) bedziesz te dane mogl odczytac albo z sesji albo jak wszystko z drugiej formy $_POST

Łukasz
Go to the top of the page
+Quote Post
przemo79
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.08.2007

Ostrzeżenie: (0%)
-----


OKI. Zrobiłem pole typu hidden i przekazuję tam moją zmienną, ale jest mały problem. Jak chcę odpalić stronę 1 z formularzem wyskakuje następujący błąd:
Cannot modify header information - headers already sentby (output started at /home.../licz_dni.php:11) in /home.../licz_dni.php:104. Czyli oznacza to, że informacje już wysłała strona i nie może być modyfikowana(przynajmniej mi się tak zdaje) a potrzebuję tej strony do wprowadzenia kolejnych danych.
Nie wiem jak mam to ugryźć. POMOCY!!!
Go to the top of the page
+Quote Post
Cezar708
post
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat(przemo79 @ 6.08.2007, 11:33:45 ) *
Cannot modify header information - headers already sent by (output started at /home.../licz_dni.php:11) in /home.../licz_dni.php:104


to oznacza, że już coś wysłałeś do przeglądarki, a nagle chcesz zmienić nagłówek (który już jest wysłany). Szczerze mówiąc w tych kodach o tu przedstawiłeś nie ma informacji o zmianie headera (lub ja się nie zorientowałem gdzie to jest).

Możesz to trochę obejść włączając buforowanie:
np:
  1. <?php
  2. // Twój skrypt
  3. ?>


Powinno pomóc.

więcej na temat: ob_start()
Go to the top of the page
+Quote Post
przemo79
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.08.2007

Ostrzeżenie: (0%)
-----


Też tak próbowałem i niestety nic z tego. Sprawdzam w phpinfo i output buffering nie jest ustawiony. A co do kodu to on jest z wczoraj a dzisiaj dodałem kilka linijek np. wywołuję pierwszy formularz metodą header. Na początku skryptu mam ob_start(); a na końcu ob_end_flush(). Tylko zauważyłem, że jak piszę jakieś wywołanie funkcji to edytor podświetla mi ją na żółto a te dwie nie. Może tu jest jakiś problem?? MOże muszę zmienić coś w pliku php.ini??

Po wielu trudach i bojach w końcu się prawie udało (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Został tylko jeden problem do rozwiązania. Jak przekazać zmienną pomiędzy formularzami w html. Może ktoś ma jakiś pomysł. Będę wdzięczny za wszelkie idee, pomoce itp.

Ten post edytował przemo79 6.08.2007, 13:01:29
Go to the top of the page
+Quote Post
Cezar708
post
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


no zapisz ja na przykład w polu typu hidden:

przykład:

pierwszy formularz:
  1. <form action=act_1.php method=post>
  2. <input name='do_przekazania'>
  3. <input type=submit value='Kliknyj na to'>
  4. </form>


skrypt akcji act_1.php wyświetla drugi formularz:
  1. <form action=act_2.php method=post>
  2. <input type=hidden name='do_przekazania' value='<?php echo $_POST['do_przekazania'] ?>' >
  3. <input type=submit value='Kliknyj na to'>
  4. </form>


no i tak możesz w nieskończoność, a w skrypcie act_2.php możesz odczytać wartość tej zmiennej formularza:

  1. <?php
  2. echo $_POST['do_przekazania'];
  3. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:35