Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Własna funkcja w php przestała działać
Forum PHP.pl > Forum > Przedszkole
rulfy
Witam.
Napisałem własną funkcję do wyboru nazw drużyn z bazy danych za pomocą: <select name=""> o nazwie drużyna.
Kiedy użyłem ją we wcześniejszym pliku działała bez zarzutu, ale po próbie wykorzystania jej w następnym już nie. Jak ktoś jest wstanie mi powiedzieć dlaczego to by było super smile.gif

Ciąg Dalszy Postu smile.gif

Kod Funkcji druzyna($a) z pliku o nazwie druzyna.php:

  1. <?php
  2. function druzyna($a)
  3. {
  4.  
  5.  
  6. $zapytanie = mysql_query("SELECT nazwa FROM druzyny");
  7. if($a == 2)
  8. {
  9. echo '<select name="goscie">';
  10. echo '<option> --- </option>';
  11. while($wynik = mysql_fetch_array($zapytanie))
  12. {
  13. echo '<option value="'.$wynik['nazwa'].'">';
  14. echo $wynik['nazwa'];
  15. echo '</option>';
  16. }
  17.  
  18. if(isset($_POST['goscie']))
  19. {
  20. $dr = $_POST['goscie'];
  21. }
  22.  
  23. echo '</select>';
  24. }
  25.  
  26. if($a == 1)
  27. {
  28. echo '<select name="gospodarze">';
  29. echo '<option> --- </option>';
  30. while($wynik = mysql_fetch_array($zapytanie))
  31. {
  32. echo '<option value="'.$wynik['nazwa'].'">';
  33. echo $wynik['nazwa'];
  34. echo '</option>';
  35. }
  36.  
  37. if(isset($_POST['gospodarze']))
  38. {
  39. $dr = $_POST['gospodarze'];
  40. }
  41.  
  42. echo '</select>';
  43. }
  44.  
  45. return $dr;
  46. }
  47. ?>

Hpsi
Cytat
Kiedy użyłem ją we wcześniejszym pliku działała bez zarzutu, ale po próbie wykorzystania jej w następnym już nie. Jak ktoś jest wstanie mi powiedzieć dlaczego to by było super smile.gif

jakis blad? albo cos?
rulfy
Ciąg Dalszy Postu smile.gif

Kod z którym ta funkcja nie działa o nazwie pan_podsumowanie.php:

  1. <?php
  2. include "include/druzyna.php";
  3.  
  4. $sezon = $_GET['sezon'];
  5. $runda = $_GET['runda'];
  6.  
  7. $flaga = $_POST['flaga'];
  8. $nazwa = $_POST['nazwa'];
  9. $id = $_POST['id'];
  10. $punkty = $_POST['punkty'];
  11.  
  12.  
  13. if(isset($_POST['ok']))
  14. {
  15. if($flaga == p)
  16. {
  17. ...
  18. }
  19.  
  20. if($flaga == s)
  21. {
  22. ...
  23. }
  24.  
  25. if($flaga == k)
  26. {
  27. if(is_numeric($punkty))
  28. {
  29. zap_upd = mysql_query("UPDATE krol SET nazwisko = '$nazwisko', imie = '$imie', zespol = '$nazwa', pkt = '$punkty' WHERE id = '$id'");
  30. if($zap_upd = true)
  31. {
  32. echo "<script>setTimeout(function(){document.location.href='index.php?go=$go&sezon=$sezon&runda=$runda';alert('Operacja Zakończona Sukcesem');}, 0);</script>";
  33. }
  34. else
  35. {
  36. echo "<script>setTimeout(function(){document.location.href='index.php?go=$go&sezon=$sezon&runda=$runda';alert('Operacja Nieudana');}, 0);</script>";
  37. }
  38. }
  39. else
  40. {
  41. echo "<script>setTimeout(function(){document.location.href='index.php?go=$go&sezon=$sezon&runda=$runda';alert('Błędne Dane');}, 0);</script>";
  42. }
  43. }
  44. }
  45.  
  46. if(isset($_POST['edit']))
  47. {
  48. if($flaga == p)
  49. {
  50. ...
  51. }
  52.  
  53. if($flaga == s)
  54. {
  55. ...
  56. }
  57.  
  58. if($flaga == k)
  59. {
  60. echo '<h1>Król Strzelców - Edycja</h1>';
  61. echo '<br/>';
  62.  
  63. echo '<div>';
  64. echo '<form action="" method="post">';
  65.  
  66. echo '<p>Nazwisko</p>';
  67. echo '<input type="text" name="nazwisko" size="50" />';
  68.  
  69. echo '<p>Imię</p>';
  70. echo '<input type="text" name="imie" size="20" />';
  71.  
  72. echo '<p>Zespół</p>';
  73. $nazwa = druzyny(1);
  74.  
  75. echo '<p>Kosze</p>';
  76. echo '<input type="text" name="punkty" size="4" />';
  77.  
  78. echo '<input type="hidden" name="flaga" value="'.$flaga.'" />';
  79. echo '<input type="hidden" name="id" value="'.$id.'" />';
  80. echo '<p><input class="przycisk" type="submit" name="ok" value="Zapisz" /></p>';
  81.  
  82. echo '<br />';
  83. echo '</form>';
  84. echo '</div>';
  85. }
  86.  
  87. echo '<br />';
  88. echo "<a href='index.php?go=$go&sezon=$sezon&runda=$runda'>Anuluj</a>";
  89. echo '<br />';
  90. }
  91. else
  92. {
  93. ...
  94.  
  95. echo '<h1>Król Strzelców - Edycja'.$sezon.'</h1>';
  96. echo '<br/>';
  97.  
  98. $zapytanie_k = mysql_query("SELECT * FROM krol WHERE sezon='$sezon'");
  99. echo '<table style="table-layout: auto; width: 100%; border: 3px solid #000000;">';
  100. echo '<tr>';
  101. echo '<th style="border: 3px solid #000000;">Nazwisko</th>';
  102. echo '<th style="border: 3px solid #000000;">Imie</th>';
  103. echo '<th style="border: 3px solid #000000;">Zespół</th>';
  104. echo '<th style="border: 3px solid #000000;">Kosze</th>';
  105. echo '</tr>';
  106. while($wynik = mysql_fetch_array($zapytanie_k))
  107. {
  108. echo '<tr>';
  109. echo '<td style="border: 3px solid #000000;">'.$wynik['nazwisko'].'</td>';
  110. echo '<td style="border: 3px solid #000000;">'.$wynik['imie'].'</td>';
  111. echo '<td style="border: 3px solid #000000;">'.$wynik['zespol'].'</td>';
  112. echo '<td style="border: 3px solid #000000;">'.$wynik['pkt'].'</td>';
  113. echo '<td style="border: 3px solid #000000;">';
  114. echo '<form action="" method="post">';
  115. echo '<input type="hidden" name="flaga" value="k" />';
  116. echo '<input type="hidden" name="id" value="'.$wynik['id'].'" />';
  117. echo '<input class="przycisk" type="submit" name="edit" value="Edytuj" />';
  118. echo '</form>';
  119. echo '</td>';
  120. echo '</tr>';
  121. }
  122. echo '</table>';
  123.  
  124. echo '<br />';
  125. echo "<a href='index.php?go=$go&sezon=$sezon'>Powrót</a>";
  126. echo '<br />';
  127. }
  128. ?>
sarxos
Cytat(rulfy @ 15.06.2011, 16:16:16 ) *
ale po próbie wykorzystania jej w następnym już nie


W jakim sensie, że już nie? Znaczy się dokładnie "co jest objawem niedziałania tej funkcji".

Może to off-topic, ale powiem tylko, że uzywanie tak notorycznie echo nie jest zbyt eleganckim rozwiązaniem.
rulfy
Ciąg Dalszy postu smile.gif

Kod z którym ta funkcja działa o nazwie pan_wyniki.php:

  1. <?php
  2.  
  3. include "include/druzyna.php";
  4.  
  5.  
  6. $sezon = $_GET['sezon'];
  7. $runda = $_GET['runda'];
  8.  
  9. $gosp_pkt_m1 = $_POST['gosp_pkt_m1'];
  10. $gosc_pkt_m1 = $_POST['gosc_pkt_m1'];
  11. $gosp_pkt_m2 = $_POST['gosp_pkt_m2'];
  12. $gosc_pkt_m2 = $_POST['gosc_pkt_m2'];
  13. $gospodarze = $_POST['gospodarze'];
  14. $goscie = $_POST['goscie'];
  15. $id = $_POST['id'];
  16.  
  17. if($runda == 'J')
  18. {
  19. echo '<h1>Runda Jesienna</h1>';
  20. }
  21. else
  22. {
  23. echo '<h1>Runda Wiosenna</h1>';
  24. }
  25.  
  26. echo '<br />';
  27.  
  28. if(isset($_POST['edit']))
  29. {
  30. echo '<div>';
  31. echo "<p>$gospodarze - $goscie</p>";
  32. echo '</div>';
  33.  
  34. echo '<form action="" method="post">';
  35. if($go == 6)
  36. {
  37. ...
  38. }
  39.  
  40. if($go == 5)
  41. {
  42. ...
  43. }
  44.  
  45.  
  46. echo '<div>';
  47. echo '<input type="hidden" name="id" value="'.$id.'" />';
  48. echo '<p><input class="przycisk" type="submit" name="ok" value="Zapisz" /></p>';
  49. echo '</div>';
  50. echo '</form>';
  51.  
  52. echo "<a href='index.php?go=$go&sezon=$sezon&runda=$runda'>Anuluj</a>";
  53. }
  54. else
  55. {
  56. ...
  57.  
  58. if($go == 5)
  59. {
  60. echo '<h2 style="text-align: left;">Dodaj Mecz</h2>';
  61.  
  62. echo '<div>';
  63. echo '<form action="" method="post">';
  64. $kolejka = kolejka();
  65. $data = data();
  66.  
  67. echo '<p>Gospodarze</p>';
  68. $gospodarze_add = druzyna(1);
  69.  
  70. echo '<p>Goście</p>';
  71. $goscie_add = druzyna(2);
  72.  
  73. echo '<div>';
  74. echo '<p><input class="przycisk" type="submit" name="add" value="Dodaj" /></p>';
  75. echo '</div>';
  76. echo '</form>';
  77. echo '</div>';
  78. }
  79.  
  80. echo "<a href='index.php?go=$go&sezon=$sezon'>Powrót</a>";
  81.  
  82. }
  83.  
  84. if(isset($_POST['ok']))
  85. {
  86. if($go == 6)
  87. {
  88. ...
  89. }
  90.  
  91. if($go == 5)
  92. {
  93. ...
  94. }
  95.  
  96.  
  97. }
  98.  
  99. if(isset($_POST['add']))
  100. {
  101. $zap_add = mysql_query("INSERT INTO `wyniki` (`id`, `sezon`, `kolejka`, `data`, `gospodarze`, `goscie`, `runda`) VALUES ('', '$sezon', '$kolejka', '$data', '$gospodarze_add', '$goscie_add', '$runda')")or die(mysql_error());
  102. if($zap_add == true)
  103. {
  104. echo "<script>setTimeout(function(){document.location.href='index.php?go=$go&sezon=$sezon&runda=$runda';alert('Operacja Zakończona Sukcesem');}, 0);</script>";
  105. }
  106. else
  107. {
  108. echo "<script>setTimeout(function(){document.location.href='index.php?go=$go&sezon=$sezon&runda=$runda';alert('Operacja Nieudana');}, 0);</script>";
  109. }
  110. }
  111.  
  112.  
  113.  
  114.  
  115.  
  116. ?>


Dodam jeszcze że w pliku pan_podsumowanie działa to po napisaniu kodu funkcji w miejscu jej wywołania :

  1. $zapytanie = mysql_query("SELECT nazwa FROM druzyny");
  2. echo '<select name="nazwa">';
  3. echo '<option> --- </option>';
  4. while($wynik = mysql_fetch_array($zapytanie))
  5. {
  6. echo '<option value="'.$wynik['nazwa'].'">';
  7. echo $wynik['nazwa'];
  8. echo '</option>';
  9. }
  10.  
  11. if(isset($_POST['nazwa']))
  12. {
  13. $nazwa = $_POST['nazwa'];
  14. }
  15. echo '</select>';


Bardzo proszę o pomoc. smile.gif

P.S.: Ale się rozpisałem tongue.gif
Hpsi
OMFG. sorry 99% kodu jest niepotrzebna tego co dałeś.
Co do tego, że nie jest elegancko dawać tak notorycznie echo zgodze się...
Jakiś błąd wywala Ci? jeśli nie to czy masz włączone error_raporting ?
Cytat
Dodam jeszcze że w pliku pan_podsumowanie działa to po napisaniu kodu funkcji w miejscu jej wywołania :
nic dziwnego w koncu kazaleś mu zrobić bezpośrednio to co masz w funkcji smile.gif
rulfy
Nie wyskakują żadne błędy, ale wygląda na to jak by funkcja przestała zwracać wybraną drużynę. Zmienna $nazwa jest cały czas pusta.
Sam formularz się pojawia tylko nie zapisuje tego co powinna ta funkcja zwrócić do zmiennej do której jest przypisana.

Cytat(Hpsi+ @ 15.06.2011, 16:32:23 ) *
Jakiś błąd wywala Ci? jeśli nie to czy masz włączone error_raporting ?


Jak sprawdzić czy to jest włączone ? tongue.gif
Hpsi
A przyczepionych tematów się nie czyta?
Temat: Jak poprawnie zadac pytanie nospor bardzo dobrze Tam wytłumaczył smile.gif
rulfy
Po włączeniu będów wyskoczyło takie coś.

Notice: Undefined variable: dr in c:\.\.\.\.\.\.\druzyna.php on line 45

tylko ze wydaje mi sie ze to blad związany z tym ze zmienna $dr jest pusta. Trudno żeby była wypełniona jak błąd wyskakuje przed dokonaniem wyboru.
modern-web
To nie błąd tylko informacja, która nie ma prawa spowodować jakiegokolwiek błędu.
Dodaj znacznik @ przed definiowaniem zmiennej dr -> @$dr = ...
Jest to operator tłumienia błędów.

Co do Twojego problemu.. nie wiem. To błąd logiczny, a nie problem ze składnią.
Przeanalizuj kod od początku do końca.
Ja w tym momencie nie mam na to czasu dlatego nie wyręczę Cię z tego obowiązku.
Hpsi
Cytat
Dodaj znacznik @ przed definiowaniem zmiennej dr -> @dr = ...

zły nawyk wg mnie ....
Co do reszty to sie zgodze, czytalem kod i tez nie zauwazlem bledu.
modern-web
Owszem, zły nawyk ale gdy włącza się wyświetlanie wszystkich komunikatów i błędów warto nie zaśmiecać sobie ekranu (w przypadku rozbudowanych skryptów) i tymczasowo dodać @ przed definiowaniem zmiennej, na którą wskazuje informacja (Notice). Błędy (Warning) należy od razu usuwać - oczywiście w miarę możliwości.
Tak czy inaczej @ nie robi wielkiej różnicy gdy E_NOTICE jest wyłączone wink.gif
rulfy
No cóż po patrze jeszcze trochę w kod może coś znajdę, ale jak byście coś jednak do juta znaleźli to piszcie. Dzięki z pomoc smile.gif
Fifi209
A połączenie z bazą masz w momencie wywołania funkcji?
rulfy
Połączenie z bazą mam na pewno bo inne aktualizowane dane z tego formularza się dodają tylko jest problem z tą funkcja.
mortus
Ale Panie. Przecież Twoja funkcja zwraca zawartość $_POST['gospodarze'] lub $_POST['goscie'], a w pliku pan_podsumowanie.php nigdzie z tablicy $_POST takich danych nie odbierasz, bo zapewne ich nie ma, w przeciwieństwie do pliku pan_wyniki.php.

Wniosek: funkcja zwraca nie to, co trzeba!
aachi
Ja patrzę w ten plik w którym funkcja nie działa i nie widzę żadnego jej wywołania.... Możesz podać numer linii w której ją wywołujesz?

Jest tylko jakaś druzyny(1) w linii 74.... więc to nie to wink.gif Ty przecież zdefiniowałeś druzyna()
rulfy
Cytat(mortus @ 16.06.2011, 09:02:01 ) *
Ale Panie. Przecież Twoja funkcja zwraca zawartość $_POST['gospodarze'] lub $_POST['goscie'], a w pliku pan_podsumowanie.php nigdzie z tablicy $_POST takich danych nie odbierasz, bo zapewne ich nie ma, w przeciwieństwie do pliku pan_wyniki.php.

Wniosek: funkcja zwraca nie to, co trzeba!


To chyba nie to bo próbowałem dodać do funkcji ten sam kod tylko z $_POST['nazwa']; i przypisać go parametrowi 3 ,tak jak to jest zrobione w pan_wyniki.php. (parametr 1 - gospodarze, 2 - goscie, 3 - nazwa) Niestety w ten sposób tez nie chciało działać :/

Cytat(aachi @ 16.06.2011, 10:35:15 ) *
Ja patrzę w ten plik w którym funkcja nie działa i nie widzę żadnego jej wywołania.... Możesz podać numer linii w której ją wywołujesz?

Jest tylko jakaś druzyny(1) w linii 74.... więc to nie to wink.gif Ty przecież zdefiniowałeś druzyna()


Wywołanie funkcji jest w linii 73:

Cytat(rulfy @ 15.06.2011, 16:24:39 ) *
  1. <?php
  2. if($flaga == k)
  3. {
  4. ...
  5. echo '<p>Zespół</p>';
  6. $nazwa = druzyny(1);
  7.  
  8. ...
  9. }
  10. ?>


Jeśli chodzi o definicje funkcji to:

Cytat(rulfy @ 15.06.2011, 16:16:16 ) *
  1. <?php
  2. function druzyna($a)
  3. {
  4. ...
  5. }
  6. ?>
mortus
W funkcji druzyna() masz przypisania:
  1. // ...
  2. $dr = $_POST['gospodarze'];
  3. // ...
  4. $dr = $_POST['goscie'];

Jeśli w tablicy $_POST nie przekażesz choćby pustej wartości zmiennej $_POST['gospodarze'] lub/i $_POST['goscie'], to do przypisania nigdy nie dojdzie. Dodatkowo zmienna $dr nie jest nigdzie zainicjowana domyślną wartością. Tak na dobrą sprawę funkcja zwraca to, o czym pisałem w poprzednim poście. Jest to błąd logiczny, ponieważ w tablicy $_POST nie zawsze będą znajdować się odpowiednie dane. Poza tym sama funkcja ze zmiennych $_POST['gospodarze'] i $_POST['goscie'] nie korzysta, a jedynie je zwraca - bez sensu, bo tutaj funkcji nie potrzeba.

Przeanalizuj cały skrypt jeszcze raz, bo ewidentnie coś jest nie tak z logiką biznesową aplikacji.

Poza tym niby tworzysz funkcję, ale nadal nie przestrzgasz reguły DRY. Przecież ta funkcja może wyglądać lepiej:
  1. <?php
  2. function druzyna($a) {
  3. $zapytanie = mysql_query("SELECT nazwa FROM druzyny");
  4. $name = ($a == 2 ? 'goscie' : 'gospodarze');
  5. echo '<select name="'.$name.'">';
  6. echo '<option> --- </option>';
  7. while($wynik = mysql_fetch_array($zapytanie)) {
  8. echo '<option value="'.$wynik['nazwa'].'">';
  9. echo $wynik['nazwa'];
  10. echo '</option>';
  11. }
  12. echo '</select>';
  13. // Uważam, że poniższy kod jest bez sensu i nie ma prawa bytu, a przepisałem go tylko po to, żeby pokazać, jak może wyglądać Twoja funkcja
  14. if(isset($_POST[$name])) {
  15. $dr = $_POST[$name];
  16. }
  17. return $dr;
  18. }
  19. ?>

Co do uwagi aachi: Twoja funkcja nazywa się druzyna() a wywołujesz funkcję druzyny().
rulfy
Zmieniłem trochę funkcję druzyna($a) i zaczęło działać.
Błędem było złe przekazywanie tablicy $_POST tak jak to opisał mortus:

Cytat(mortus @ 17.06.2011, 11:17:55 ) *
W funkcji druzyna() masz przypisania:
  1. // ...
  2. $dr = $_POST['gospodarze'];
  3. // ...
  4. $dr = $_POST['goscie'];

Jeśli w tablicy $_POST nie przekażesz choćby pustej wartości zmiennej $_POST['gospodarze'] lub/i $_POST['goscie'], to do przypisania nigdy nie dojdzie. Dodatkowo zmienna $dr nie jest nigdzie zainicjowana domyślną wartością. Tak na dobrą sprawę funkcja zwraca to, o czym pisałem w poprzednim poście. Jest to błąd logiczny, ponieważ w tablicy $_POST nie zawsze będą znajdować się odpowiednie dane. Poza tym sama funkcja ze zmiennych $_POST['gospodarze'] i $_POST['goscie'] nie korzysta, a jedynie je zwraca - bez sensu, bo tutaj funkcji nie potrzeba.


Teraz funkcja jako parametr przyjmuję odpowiednie odwołanie do tablicy $_POST. A oto kod:

  1. <?php
  2. function druzyna($a)
  3. {
  4. $zapytanie = mysql_query("SELECT DISTINCT nazwa FROM druzyny");
  5. echo '<select name="'.$a.'">';
  6. echo '<option> --- </option>';
  7. while($wynik = mysql_fetch_array($zapytanie))
  8. {
  9. echo '<option value="'.$wynik['nazwa'].'">';
  10. echo $wynik['nazwa'];
  11. echo '</option>';
  12. }
  13.  
  14. if(isset($_POST[''.$a.'']))
  15. {
  16. @$dr = $_POST[''.$a.''];
  17. }
  18.  
  19. echo '</select>';
  20.  
  21. return @$dr;
  22. }
  23. ?>


I przykładowe wywołanie (z pliku pan_wynik.php):

  1. $gospodarze_add = druzyna('gospodarze');


Napiszcie co myślicie o tym rozwiązaniu.

Jeśli chodzi o pozbycie się tego fragmentu kodu o którym pisze mortus:

Cytat(mortus @ 17.06.2011, 11:17:55 ) *
  1. <?php
  2. ...
  3. // Uważam, że poniższy kod jest bez sensu i nie ma prawa bytu, a przepisałem go tylko po to, żeby pokazać, jak może wyglądać Twoja funkcja
  4. if(isset($_POST[$name])) {
  5. $dr = $_POST[$name];
  6. }
  7. return $dr;
  8. }
  9. ?>


To bez tego funkcja nie działa. Pozdrawiam smile.gif

P.S: mortus, a oco chodzi w tej regule DRY questionmark.gif
mortus
Jak pisałem, trochę bez sensu jest przepisywanie zmiennej z tablicy $_POST w wyniku funkcji. Przecież to samo osiągasz w taki sposób:
  1. <?php
  2. function druzyna($a) {
  3. $zapytanie = mysql_query("SELECT DISTINCT nazwa FROM druzyny");
  4. echo '<select name="'.$a.'">';
  5. echo '<option> --- </option>';
  6. while($wynik = mysql_fetch_array($zapytanie)) {
  7. echo '<option value="'.$wynik['nazwa'].'">';
  8. echo $wynik['nazwa'];
  9. echo '</option>';
  10. }
  11. echo '</select>';
  12. }
  13.  
  14. // i wywołanie
  15. druzyna('gospodarze');
  16. if(isset($_POST['gospodarze']) && $_POST['gospodarze'] != '') {
  17. $gospodarze_add = $_POST['gospodarze'];
  18. }

Naprawdę nie ma sensu przekazywanie zmiennej $_POST['gospodarze'] poprzez funkcję - na około.
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.