Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: redeclaret ! dwa wywolania => sonda i error
Forum PHP.pl > Forum > PHP
invx
mam funcje wyswietlajaca sondy ...
no i stonke, na ktorej chce sobie takich sond wyswietlic 2 (no bo dlaczego by nie tongue.gif )

wiec wywoluje funkcje jak logika nakazuje 2x. Robie to tak

  1. <?php
  2. echo"<div style="float:left">";
  3.  
  4. echo sonda_m( 1, "." );
  5.  
  6. echo"</div>";
  7. echo"<div style="float:left">";
  8.  
  9. echo sonda_m( 2, "." );
  10.  
  11. echo"</div>";
  12. ?>


i ku mojemu ogromnemu zdziwieniu, dostaje nie dwie piekne sondy biggrin.gif a jedna sonde, i do pary errora, ktory jakrze wyjatkowo psuje mi cala kompozycje strony, jak i swiateczny nastroj ...
a error wyglada tak

Kod
Fatal error: Cannot redeclare wyswietl_sonde() (previously declared in c:\usr\krasnal\www\rcx\sonda\kernel\sonda_wyswietl.php:3) in c:\usr\krasnal\www\rcx\sonda\kernel\sonda_wyswietl.php on line 3


no i czemuz to sie tak zle dzieje sadsmiley02.gif ?
nospor
komunikat glosi ze poraz kolejny probujesz zdefiniowac funkcje o nazwie wyswietl_sonde(). Pewnie w funkcji sonda_m() includujesz jeszcze jakies pliki? Pokaz kod funckji sonda_m();
Ale pewnie twoj problem mozna rozwiazac w ten sposob, ze zamiast include, uzywaj include_once
invx
include_once() zalatwia sprawe errora nie dostaje ... ale drugiej sondy tez nie tongue.gif

sonda_m.php
  1. <?php
  2.  
  3. function sonda_m ( $id=0, $katalog_gl=)
  4. {
  5. $url2 = $katalog_gl;
  6. $url1 = $katalog_gl."/sonda/kernel/";
  7.  
  8. if( isset( $_SESSION["sonda"][$id] ) )
  9. {
  10. include( "$url2/sonda/kernel/sonda_wyniki.php" );
  11. echo sonda_wyniki( $id, $url1 );
  12. }
  13. else
  14. {
  15. include( "$url2/sonda/kernel/sonda_wyswietl.php" );
  16. echo wyswietl_sonde( $id, $url1 );
  17. }
  18. }
  19.  
  20. ?>
nospor
1) czy na pewno jest sonda o id=2?
2)Bo include_once powoduje, ze juz drugi raz nie includuje pliku sonda_wyswietl.php. On podczas includowania cos wyswietla, wylicza? Czy jest tam tylko zestaw funckji , ktore ty potem sam recznie wywolujesz?
invx
napewno istnieje sonda o id=2.

znaczy sie jak podczas includowania mialo by cos wyliczac questionmark.gif plik sonda_m.php wyglada jak napisalem. No a te includy co tam sa to pobieraja dane z bazy, przeksztalcaja je.
nospor
ale one to robią same automatycznie podczas includowania? No to musisz to jakos przeorganizowac. Moze stworz jeszcze jedna funckje, ktora zbierze wywolania wszystkich tych co sie wykonuja podczas includowania i przed wyswietleniem sondy sam recznie wywolaj tą funkcję.
Bo teraz masz konflikt w pliku co includujesz. Deklarujesz w nim funkcje, czyli nie mozesz go dwa razy includnoąć, ale tez jednoczesnie podczas includowania wykonujesz jakies tam operacje, a ze nie mozesz includnac drugi raz, to sie one nie wykonuja dla drugies sondy smile.gif
invx
uuhhhh to ladnie ... php wysypalem ? biggrin.gif

pomysle ... ale bedzie ciezko bo zdburzy to strukture ...

P.S.
ale to znaczy ze nie moge wogule includowac 2x funckji ktore cos w sobie wylicza questionmark.gif czy nie moze miec ten includ poincludow w sobie ?
nospor
Cytat
uuhhhh to ladnie ... php wysypalem
laugh.gif, niestety w bledzie jestes smile.gif

Nie mozesz dwa razy deklarowac jedenj funkcji. Jesli plik includowany zawiera deklaracje funkjci, to przy drugim include dostaniesz errora. To oczywiste. Zazwyczaj w porządnym kodzie (bez obrazy) robi sie pliki z zestawem funckji, raz sie go includuje i po sprawie. A ty mieszasz deklaracje funkcji z wywolywaniem skryptow i masz babo placek.

Ewentualnie przed deklaracja funkcji moglbys sprawdzic czy ona istnieje i dopiero deklarowac
http://pl.php.net/manual/pl/function.function-exists.php
ale to malo elegancki sposob
invx
Cytat
Zazwyczaj w porządnym kodzie (bez obrazy) robi sie pliki z zestawem funckji, raz sie go includuje i po sprawie. A ty mieszasz deklaracje funkcji z wywolywaniem skryptow i masz babo placek.


to jak mial bym taki zestaw zrobic ? i raz go zaincludowac ? przeciez includuje go raz .. ?
nospor
o rety. no includujesz raz przez include_once. ale sam mowilesz ze podczas includowania wykonywany jest kod, ktory dla danej sondy cos tam wylicza. no askoro includujesz go tylko raz to ten kod wykona sie tylko dla sondy pierwszej, tak?

No, czyli jak mowilem. wez ten kod co sie wykonuje w includowaniu wsadź do jeszcze jednej funkcji. Po zincludowaniu, on sie nie wykona, ty go bedziesz musial wywolac recznie poprzez wykonanie tej funkji i bedzie git. Rozumiesz?W ostatecznosci pokaz zawartosc pliku sonda_wyswietl.php
invx
czyli mam o funkcje, includowane wsadzic do pliku sonda_m.php ?

  1. <?php
  2.  
  3. function wyswietl_sonde ( $id=0, $url2=)
  4. {
  5.  
  6. $sql = "SELECT * FROM sonda_b WHERE id='$id'";
  7. $wykonaj = mysql_query ( $sql );
  8. while ( $sonda_b = mysql_fetch_array ( $wykonaj ) )
  9. {
  10. <table class='tabela_gl' cellpadding='2' cellspacing='1' width='150'>
  11. <form action='".$url2."zapis.php' method='POST'>
  12. <input name='id_sondy' type='hidden' value='$sonda_b[id]'>
  13. <tr>
  14. <th>
  15. $sonda_b[nazwa]
  16. </th>
  17. </tr>
  18. ";
  19.  
  20. #wyswietlania sondy
  21. $sql3 = "SELECT * FROM sonda_c WHERE id_b = $sonda_b[id]";
  22. $wykonaj3 = mysql_query ( $sql3 );
  23. while ( $sonda_c = mysql_fetch_array ( $wykonaj3 ) )
  24. {
  25. if ( $sonda_b[rodzaj] == 0 )
  26. {
  27. if ( $sonda_c[status] == 1 )
  28. {
  29. $status="checked";
  30. }
  31. <tr>
  32. <td class='kol1'>
  33. <input name='radio' type='radio' value='$sonda_c[id]' $status><span class='zw2'>$sonda_c[nazwa]</span></br>";
  34. }
  35. elseif ( $sonda_b[rodzaj] == 1 )
  36. {
  37. if ( $sonda_c[status] == 1 )
  38. {
  39. #$status="value='ON'";
  40. }
  41. elseif ( $sonda_c != 1 )
  42. {
  43. #$status="value='ON'";
  44. }
  45.  
  46. <tr>
  47. <td class='kol1'>
  48. <input name='check[]' type='checkbox' value='$sonda_c[id]' $status><span class="zw2">$sonda_c[nazwa]</span></br>";
  49. }
  50.  
  51. }
  52. }
  53.  
  54. <tr>
  55. <td class='kol1' align='center'>
  56. <input type='submit' value='Zagłosuj'>
  57. </td>
  58. </tr>
  59. </form>
  60. </table>";
  61. }
  62.  
  63. ?>
nospor
mowisz o kilku funkcjach a pokazujesz tylko jedna. czy plik sonda_wyswietl.php zawiera tylko funckje wyswietl_sonde() i nic wiecej?
nie, masz do funkcji wsadzic kod, ktory sie wykonuje poza funkcja. moze to byc w pliku sonda_wyswietl.php. tylko potem tą funkcje wywolaj recznie. chyba sie nie rozumiemy smile.gif pokaz caly ten plik jak nie jest za duzy (sonda_wyswietl.php), bo ty mi chyba ciagle tylko jego kawalek pokazujesz. ewentualnie przeslij na maila. Ja poki co spadam.
invx
pokazuje cale pliki, zarowno sonda_wyswietl, jak i sonda_m.

tj jeszce plik pokazujacy wyniki sonda_wyniki

  1. <?php
  2. function sonda_wyniki ( $id=0, $url1=0 )
  3. {
  4.  
  5. /*Pobieranie tutułu sondy*/
  6. $sql = "SELECT * FROM sonda_b WHERE id='$id'";
  7. $wykonaj = mysql_query ( $sql );
  8. while ( $sonda_b = mysql_fetch_array ( $wykonaj ) )
  9. {
  10. <table class="tabela_gl" cellpadding="2" cellspacing="1" width="150">
  11. <form action="zapis.php" method="POST">
  12. <input name="id_sondy" type="hidden" value="$sonda_b[id]">
  13. <tr>
  14. <th>
  15. $sonda_b[nazwa]
  16. </th>
  17. </tr>
  18. ";
  19.  
  20. /*zliczanie całkowitej ilości oddanych głosów*/
  21. $sql3 = "SELECT * FROM sonda_c WHERE id_b = $sonda_b[id]";
  22. $wykonaj3 = mysql_query ( $sql3 );
  23. while ( $sonda_c = mysql_fetch_array ( $wykonaj3 ) )
  24. {
  25. $suma_glosow = $suma_glosow + $sonda_c[odslony];
  26. }
  27. /**/
  28.  
  29. /*Wyświetlanie wyników sondy*/
  30. $sql3 = "SELECT * FROM sonda_c WHERE id_b = $sonda_b[id]";
  31. $wykonaj3 = mysql_query ( $sql3 );
  32. while ( $sonda_c = mysql_fetch_array ( $wykonaj3 ) )
  33. {
  34. $procent=($sonda_c[odslony]*100)/$suma_glosow;
  35. $procent = round ( $procent, 1 );
  36.  
  37. /*Sprawdzanie czy został podany kolor opcji*/
  38. if ( empty ( $sonda_c[kolor] ) )
  39. {
  40. $sonda_c[kolor] = gray;
  41. }
  42. /**/
  43.  //<hr align='left' width='".$procent."' size='6' color='".$sonda_c[kolor]."'><span class='zw3'>".$procent."%</span>
  44.  
  45. <tr>
  46. <td class="kol1" id="sonda">
  47. <span class="zw2b">".$sonda_c['nazwa']."</span><span class="zw4"> (".$sonda_c[odslony].")
  48.  
  49. <div id="sonda_wys" style="width:".($procent+10)."; background: ".$sonda_c['kolor'].";">
  50. </div>
  51. <div style="width:2; float:right">
  52. <span class="zw3">".$procent."%</span>
  53. </div>
  54.  
  55.  </td>
  56. </tr>
  57. ";
  58.  
  59. }
  60. /**/
  61. }
  62. /**/
  63.  
  64. <tr>
  65. <td class="kol1" align="center">
  66. <hr width="90%">
  67. <span class="zw3">Łącznie głosów:</span><span class="zw3b">
  68.  ".$suma_glosow."</span>
  69. </td>
  70. </tr>
  71. </form>
  72. </table>
  73. ";
  74.  
  75. }
  76. ?>
php programmer
nie czytałem wszystkich powyższych postów,
ale może zamiast include użyć include_once
a zamiast require użyć require_once
invx
juz byl taki pomysl kolegi @nospora.
i niepowiodl sie on.
nospor
@invx. on sie powiodl. nie wywala errorow. problem tkwi w tym co mowilem
ten plik sonda_wyniki to on zawiera tylko i wylacznie tą jedną funkcję?
gam3r
witam, sory ze nie na temat pisze ale moglibyście looknąć tutaj biggrin.gif sesje - prooblem


----edit----
Jaja sobie robisz?
Balansujesz na granicy ostrzeżenia. Za następny taki wybryk je dostaniesz.
~mike_mech
invx
to jak rozwiazac sprawe z tym errorem, tak zeby wilk byl syty (2 sondy zebym mial) i owca byla cala (errora zeby nie bylo) smile.gif
nospor
zacznik w koncu udzielac odpowiedzi dokladnych na zadane ci pytania:
Cytat
ten plik sonda_wyniki to on zawiera tylko i wylacznie tą jedną funkcję?
jesli nie to podaj reszte

cos czuje ze to sie skonczy na gg lub cos, bo tak to mozemy sie bawic w nieskonczonosc
invx
napisalem ze to jest calosc. Pliki zawieraja tylko po jednej funkcji. tongue.gif

P.S.
moje gg: 817939
bede kolo 19 biggrin.gif
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.