Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Cannot redeclare rank_adv()
gegos
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.11.2012

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


Witam, mam następujący problem
Fatal error: Cannot redeclare rank_adv() in settings.php on line 38
Kod którego to dotyczy:
  1. function rank_adv() {
  2. $total_points = mysql_result(mysql_query("SELECT total FROM points WHERE id = '$id'") ,0);
  3. $rank = mysql_result(mysql_query("SELECT level FROM users WHERE login = '$nick'"), 0);
  4. if(isset($nick)) {
  5. if ($total_points >= 800 and $total_points < 2400 and $rank == "Bronze") {
  6. $rankup = '<li><a href="rank.php"><u><b>Click here to get Silver rank</b></u></a></li><br />';
  7. }
  8. if ($total_points >= 2400 and $total_points < 7200 and ($rank == "Silver" or $rank == "Bronze")) {
  9. $rankup = '<li><a href="rank.php"><u><b>Click here to get Gold rank</u></b></a></li><br />';
  10. }
  11. if ($total_points >= 7200 and $total_points < 21600 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold")) {
  12. $rankup = '<li><a href="rank.php"><u><b>Click here to get Diamond rank</u></b></a></li><br />';
  13. }
  14. if ($total_points >= 21600 and $total_points < 43200 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond")) {
  15. $rankup = '<li><a href="rank.php"><u><b>Click here to get Emerald rank</u></b></a></li><br />';
  16. }
  17. if ($total_points >= 43200 and $total_points < 86400 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald")) {
  18. $rankup = '<li><a href="rank.php"><u><b>Click here to get Platinum rank</u></b></a></li><br />';
  19. }
  20. if ($total_points >= 86400 and $total_points < 129600 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald" or $rank == "Platinum")) {
  21. $rankup = '<li><a href="rank.php"><u><b>Click here to get Extra Diamond rank</u></b></a></li><br />';
  22. }
  23. if ($total_points >= 129600 and $total_points < 194400 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald" or $rank == "Platinum" or $rank == "Extra Diamond")) {
  24. $rankup = '<li><a href="rank.php"><u><b>Click here to get Extra Emerald rank</u></b></a></li><br />';
  25. }
  26. if ($total_points >= 194400 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald" or $rank == "Platinum" or $rank == "Extra Diamond" or $rank == "Extra Emerald")) {
  27. $rankup = '<li><a href="rank.php"><u><b>Click here to get Extra Platinum rank</u></b></a></li><br />';
  28. }
  29. }
  30. echo $rankup;
  31. }

Problem jest jeszcze dziwniejszy, ponieważ błąd ten wyskakuje losowo, tzn raz odświeżę stronę i działa a raz (rzadko) przy odświeżeniu wyskakuje błąd.
Można powiedzieć, że dopiero zaczynam swoją przygodę w PHP. Szukałem już odpowiedzi na moje pytanie jednakże nie includuję kilkukrotnie tej funkcji (gdy dam include_once błąd wyskakuje nadal).
Z góry dzięki za odpowiedzi.

odświeżam
bardzo potrzebuję pomocy (zależy mi na czasie)

Ten post edytował gegos 14.12.2012, 09:03:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
kristaps
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Wielkość znaków w nazewnictwie klas nie ma znaczenia, może masz inną, ale zaczynającą się z dużej litery?

Cytat(gegos @ 14.12.2012, 16:55:44 ) *
Szukałem już odpowiedzi na moje pytanie jednakże nie includuję kilkukrotnie tej funkcji (gdy dam include_once błąd wyskakuje nadal).


Include, a include_once nie ma znaczenia - jeżeli kilkukrotnie deklarujesz kod z powyższą funkcją. Chociaż trudno powiedzieć, skoro błąd występuje losowo.

E: Jeszcze przyszło mi do głowy, że być może w zależności od wyniku SQL wykonujesz (w określonym przypadku) pętlę, a w niej includujesz klasę - to wyjaśniałoby coś co przypomina losowy błąd.

Ten post edytował kristaps 14.12.2012, 17:23:51
Go to the top of the page
+Quote Post
gegos
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.11.2012

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


Funkcję wykorzystuję tylko w tym fragmencie
  1. $rank = rank_adv();
  2. if ( empty($rank) ) {
  3. $level = mysql_result(mysql_query("SELECT level FROM users WHERE login = '$login'"), 0);
  4. echo '<li><a href="rank.php"><u>Your rank: <b>'.$level.'</u></b></a></li><br />';
  5. } else {
  6. echo rank_adv();
  7. }

Jednakże, błąd ten występuje również na podstronach na których funkcja ta nie jest w żaden sposób wykorzystywana

Ten post edytował gegos 14.12.2012, 18:32:03
Go to the top of the page
+Quote Post
--flaku--
post
Post #4





Goście







skoro dałeś
  1. $rank = rank_adv();

to zamiast
  1. echo rank_adv();

daj
  1. echo $rank;

Albo inaczej - moim zdaniem bez sensu jest zmienna $rank. przecież można dać od razu:
  1. rank_adv();

bez echo...
Go to the top of the page
+Quote Post
gegos
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.11.2012

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


Zrobiłem tak, ponieważ przy wersji
$rank = rank_adv();
if ( empty(rank_adv()) ) {
$level = mysql_result(mysql_query("SELECT level FROM users WHERE login = '$login'"), 0);
echo '<li><a href="rank.php"><u>Your rank: <b>'.$level.'</u></b></a></li><br />';
} else {
echo rank_adv();
}
Wyskakiwał mi błąd

przy skasowaniu "echo" przy rank_adv() w powyższym kodzie problem występuje nadal

odświeżam
bardzo proszę o pomoc

Ten post edytował gegos 14.12.2012, 19:30:28
Go to the top of the page
+Quote Post
kristaps
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Cytat(gegos @ 14.12.2012, 18:30:27 ) *
Jednakże, błąd ten występuje również na podstronach na których funkcja ta nie jest w żaden sposób wykorzystywana

Funkcja nie, ale pliki includujesz, a w którymś z nich podwójnie deklarujesz klasę. Innego wyjścia nie ma, tylko nadal jestem przekonany, że ten losowy błąd - to tak naprawdę jakiś if czy pętla. Jeżeli cały czas podwójnie deklarujesz klasę, chociażby przez dołączenie pliku - strona by leżała. A skoro działa, ale wysypuje się co jakiś czas - to najbardziej prawdopodobne, że sprawdzasz wynik bazy ifami, a jeden zawiera błędny kod - chociażby ponownie deklaruje/includuje klase. To samo może być z pętlą.
Go to the top of the page
+Quote Post
gegos
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.11.2012

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


Nie deklaruje klasy podwójnie, pętli nie wykorzystuje a warunek nie includuje ani nie deklaruje na nowo funkcji :/
Go to the top of the page
+Quote Post
Damonsson
post
Post #8





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Ktoś kłamie...
"Fatal error: Cannot redeclare rank_adv() in settings.php on line 38"
"Nie deklaruje klasy podwójnie, pętli nie wykorzystuje a warunek nie includuje ani nie deklaruje na nowo funkcji :/"

Jak myślisz, kto? (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
gegos
post
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.11.2012

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


Wiem jak to wygląda, jednakże nie mam pojęcia gdzie mogę includować jeszcze raz tą funkcję (?)
  1. <?php
  2. include 'db.php';
  3. include 'settings.php';
  4. $logout = $_POST['logout'];
  5. if(isset($logout)) {
  6. header('Location: index.php ');
  7. }
  8. $uniqID = $_GET['refID'];
  9.  
  10. // reszta
  11. $towin = mysql_result(mysql_query("SELECT SUM(value) FROM jackpot"), 0);
  12. $fee = $fee * 0.01;
  13. $fee = 1 - $fee;
  14. $towin = $towin * $fee;
  15. $lastwinner = mysql_result(mysql_query("SELECT nick FROM jackpot_winners ORDER BY id DESC LIMIT 1"), 0);
  16. $lastwin = mysql_result(mysql_query("SELECT prize FROM jackpot_winners ORDER BY id DESC LIMIT 1"), 0);
  17.  
  18. // zakup lossu
  19. $buy = $_POST['buy'];
  20. if(isset($buy)) {
  21. mysql_query("INSERT INTO jackpot (id, login, value) VALUES (' ', '$nick', '$priceloss')");
  22. mysql_query("UPDATE users SET all_points = all_points - 2 WHERE login = '$nick'");
  23. header('Location: jackpot.php ');
  24. }
  25. ?>
  26. <?php if(!isset($_SESSION['login']) ){
  27. header("Location: index.php");
  28. }
  29. ?>
  30. <?php if(isset($_SESSION['login'])) {
  31. echo '<ul class="top-links">';
  32. echo "<li><a>Hello <b>".$_SESSION['login']."</b></a></li><br />";
  33. echo '<li><a>Server time '.$date.'</a></li><br />';
  34. echo '<li><a>You have '.$points.' points</a></li><br />';
  35. echo '<form action="" method="post"><li></a><input type="submit" name="logout" value="Log Out" /></a></li></form>';
  36. echo '</ul>';
  37. }
  38. ?>
  39. <?php
  40. if(!isset($_SESSION['login'])) {
  41. echo '<li><a href="register.php">Register</a></li>';
  42. echo '<li><a href="login.php">Login</a></li>';
  43. } else {
  44. echo '<li><a href="profile.php">Profile</a></li>';
  45. echo '<li><a href="points.php">Get points</a></li>';
  46. echo '<li><a href="stats.php">Statistics</a></li>';
  47. echo '<li><a href="ref.php">Refferals</a></li>';
  48. if($jackpoton == 1) {
  49. echo '<li><a>Jackpot</a></li>';
  50. }
  51. }
  52. ?>
  53.  
  54. <?php if ($jackpoton == 1) {
  55. echo 'Buy one loss ('.$priceloss.' points) <br /><br />';
  56. echo 'Winner will gain '.$towin.' points !<br /><br />';
  57. echo 'The last winner was <b>'.$lastwinner.'</b> and he gain <b>'.$lastwin.'</b> points<br /><br />';
  58. if($points >= 2) {
  59. echo '<form action = "" method = "POST" />';
  60. echo '<input style=width:200px; height:90px;" type="submit" name="buy" value = "Buy one loss for 2 points" /><br /><br />';
  61. } else {
  62. echo "<i>You don't have minimum of points</i><br />";
  63. }
  64. }
  65. ?>

to caly kod php z jednej podstrony na której błąd występuje, nie mam pojęcia gdzie może być błąd
Go to the top of the page
+Quote Post
kristaps
post
Post #10





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Wkleiłeś kod, w którym nie ma ani jednego odwołania do klasy, zbyt wiele nie pomoże. Poza tym wygląda na oko dobrze, pokaż więcej z settings.php, może w innej klasie odwołujesz się do rank_adv().

Ten post edytował kristaps 15.12.2012, 22:10:11
Go to the top of the page
+Quote Post
gegos
post
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.11.2012

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


tak wiem, ale na tej podstronie również występuje błąd
settings.php
  1. <?php
  2.  
  3. // settings
  4. $facebookprofile = "linkdoprofilu";
  5. $refbonus = 10; // refferal rate in percent
  6. $jackpoton = 1; // 1-on 0-off
  7. $priceloss = 10; // price for each jackpot loss
  8. $fee = 10; // fee will be deducted from the prize of jackpot
  9. $websitetitle = "test";
  10. $websitefoot = "test";
  11. $site = 'test.com'; // site address
  12. $bonus = 0; // bonus points for new user
  13. $adminemail = 'admin@yourdomain.com'; // admin email (contact form)
  14.  
  15. // captcha
  16. $privatekey = "xxx "; // recaptcha private key
  17. $publickey = "xxx "; // recaptcha public key
  18.  
  19. //
  20. $nick = $_SESSION['login'];
  21. global $nick;
  22. $date = date("H:i");
  23. global $date;
  24. $points = mysql_result(mysql_query("SELECT all_points FROM users WHERE login = '".$nick."'"), 0);
  25. global $points;
  26. $id = mysql_result(mysql_query("SELECT id FROM users WHERE login = '".$nick."'"), 0);
  27. global $id;
  28.  
  29. function rank_adv() {
  30. $total_points = mysql_result(mysql_query("SELECT total FROM points WHERE id = '$id'") ,0);
  31. $rank = mysql_result(mysql_query("SELECT level FROM users WHERE login = '$nick'"), 0);
  32. if(isset($nick)) {
  33. if ($total_points >= 800 and $total_points < 2400 and $rank == "Bronze") {
  34. $rankup = '<li><a href="rank.php"><u><b>Click here to get Silver rank</b></u></a></li><br />';
  35. }
  36. if ($total_points >= 2400 and $total_points < 7200 and ($rank == "Silver" or $rank == "Bronze")) {
  37. $rankup = '<li><a href="rank.php"><u><b>Click here to get Gold rank</u></b></a></li><br />';
  38. }
  39. if ($total_points >= 7200 and $total_points < 21600 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold")) {
  40. $rankup = '<li><a href="rank.php"><u><b>Click here to get Diamond rank</u></b></a></li><br />';
  41. }
  42. if ($total_points >= 21600 and $total_points < 43200 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond")) {
  43. $rankup = '<li><a href="rank.php"><u><b>Click here to get Emerald rank</u></b></a></li><br />';
  44. }
  45. if ($total_points >= 43200 and $total_points < 86400 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald")) {
  46. $rankup = '<li><a href="rank.php"><u><b>Click here to get Platinum rank</u></b></a></li><br />';
  47. }
  48. if ($total_points >= 86400 and $total_points < 129600 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald" or $rank == "Platinum")) {
  49. $rankup = '<li><a href="rank.php"><u><b>Click here to get Extra Diamond rank</u></b></a></li><br />';
  50. }
  51. if ($total_points >= 129600 and $total_points < 194400 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald" or $rank == "Platinum" or $rank == "Extra Diamond")) {
  52. $rankup = '<li><a href="rank.php"><u><b>Click here to get Extra Emerald rank</u></b></a></li><br />';
  53. }
  54. if ($total_points >= 194400 and ($rank == "Silver" or $rank == "Bronze" or $rank == "Gold" or $rank == "Diamond" or $rank == "Emerald" or $rank == "Platinum" or $rank == "Extra Diamond" or $rank == "Extra Emerald")) {
  55. $rankup = '<li><a href="rank.php"><u><b>Click here to get Extra Platinum rank</u></b></a></li><br />';
  56. }
  57. }
  58. echo $rankup;
  59. }
  60. ?>


odświeżam

odświeżam

serio nikt nie potrafi pomóc?

Odświeżam już czwarty dzień (IMG:style_emoticons/default/smile.gif)

Ten post edytował gegos 15.12.2012, 22:08:52
Go to the top of the page
+Quote Post
viking
post
Post #12





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Nie ma takiej opcji. Poszukaj jakiegoś narzędzia które we wskazanych plikach znajdzie ci wymienioną funkcję. Musisz robić gdzieś podwójny inlcude albo gdzieś jeszcze deklarację. Poza tym kod trochę bez sensu. Po co te globale? Powtarzanie $rankup zamiast tylko sam rank które jednorazowo wstawiasz na samym końcu pod li. Zauważyłeś że funkcja niczego nie zwraca więc po co niby if ( empty($rank) ) {? Dodatkowo z dokumentacji:
Cytat
Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.
Go to the top of the page
+Quote Post
gegos
post
Post #13





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.11.2012

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


Jednak funkcja była wywoływana dwa razy, kolega przy bawieniu się shoutboxem zaincludował plik bez mojej wiedzy (sam bym tego błędu nie zrobił(IMG:style_emoticons/default/smile.gif) )
Dzięki wszystkim za pomoc, temat można zamknąć (IMG:style_emoticons/default/tongue.gif)
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: 24.08.2025 - 19:53