Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Cannot redeclare rank_adv()
Forum PHP.pl > Forum > Przedszkole
gegos
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)
kristaps
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.
gegos
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
-flaku-
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...
gegos
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
kristaps
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ą.
gegos
Nie deklaruje klasy podwójnie, pętli nie wykorzystuje a warunek nie includuje ani nie deklaruje na nowo funkcji :/
Damonsson
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? wink.gif
gegos
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
kristaps
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().
gegos
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ń smile.gif
viking
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.
gegos
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łsmile.gif)
Dzięki wszystkim za pomoc, temat można zamknąć tongue.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.