Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nazwa funkcji
Forum PHP.pl > Forum > PHP
qoryto
Witam. Mam taki problem. Otóż posiadam kod z funkcją:
  1. function ocena($num_amount, $num_total) {
  2. $count1 = $num_amount / $num_total;
  3. $count2 = $count1 * 100;
  4. $count = number_format($count2, 0);
  5. return $count;
  6. }


Czy da się zrobić, aby nazwę funkcji w tym przypadku to " ocena " zastąpić wygenerowanym w poście ID? tak aby każdy wpis miał inną nazwe funkcji, gdyż przy wklepaniu tego kodu
występuje błąd: Cannot redeclare percent()

Ten skrypt to ocena wpisów. Mój skrypt jest oparty na plikach testowych, każdy wpis posiada swój ID, który później deklaruje w javascript.
Wszystko działa prawidłowo, jednak gdy wpisów na stronie głównej jest załóżmy 5 - wyskakuje właśnie błąd Cannot redeclare percent() - ponieważ funkcje nie mogą się powtarzać. Czy ktoś ma pomysł w jaki sposób zrobić, aby funkcje były nazwą wygenerowanego ID postu?

function '.$post_id.' coś w tym stylu.. sporo szukałem i nnie mam pojęcia czy sie tak da zrobić
johny_s
A po co Ci 5 takich samych funkcji? Nie wystarczy Ci jedna i ją wywoływać?
pedro84
Deklarować funkcję tylko jeden raz?
qoryto
Może pojaśnię w czym rzecz ..
mam taki skrypt:
  1. include 'config.php';
  2.  
  3. $user_ip = $_SERVER['REMOTE_ADDR'];
  4. $pageID = ''.$post_id.''; /// <---- tutaj wpisuje '.$post_id.' aby pod każdym postem był inny ID
  5. //function to calculate the percent
  6. function percent($num_amount, $num_total) {
  7. $count1 = $num_amount / $num_total;
  8. $count2 = $count1 * 100;
  9. $count = number_format($count2, 0);
  10. return $count;
  11. }
  12. function ignore_divide_by_zero($count1, $count2)
  13. {
  14. return ($count2 == 'Division by zero');
  15. }
  16.  
  17. set_error_handler('ignore_divide_by_zero', E_WARNING);
  18. // check if the user has already clicked on the unlike (rate = 2) or the like (rate = 1)
  19. $dislike_sql = mysql_query('SELECT COUNT(*) FROM wcd_yt_rate WHERE ip = "'.$user_ip.'" and id_item = '.$pageID.' and rate = 2 ');
  20. $dislike_count = mysql_result($dislike_sql, 0);
  21.  
  22. $like_sql = mysql_query('SELECT COUNT(*) FROM wcd_yt_rate WHERE ip = "'.$user_ip.'" and id_item = '.$pageID.' and rate = 1 ');
  23. $like_count = mysql_result($like_sql, 0);
  24.  
  25. // count all the rate
  26. $rate_all_count = mysql_query('SELECT COUNT(*) FROM wcd_yt_rate WHERE id_item = '.$pageID.'');
  27. $rate_all_count = mysql_result($rate_all_count, 0);
  28.  
  29. $rate_like_count = mysql_query('SELECT COUNT(*) FROM wcd_yt_rate WHERE id_item = '.$pageID.' and rate = 1');
  30. $rate_like_count = mysql_result($rate_like_count, 0);
  31. $rate_like_percent = percent($rate_like_count, $rate_all_count);
  32.  
  33. $rate_dislike_count = mysql_query('SELECT COUNT(*) FROM wcd_yt_rate WHERE id_item = '.$pageID.' and rate = 2');
  34. $rate_dislike_count = mysql_result($rate_dislike_count, 0);
  35. $rate_dislike_percent = percent($rate_dislike_count, $rate_all_count);



ten kod odpowiada za konkretny ID... jak jest jeden wpis to się wyświetla wszystko OK. Natomiast gdy dodam już kilka wpisów zaczynają być jaja właśnie w postaci Cannot redeclare percent()

Więc nie mam pojęcia w jaki sposób zrobić to, aby działało pod każdym wpisem ocenianie na stronie głównej każdego jednego wpisu..

Może prościej.. adres skąd skrypt pobrałem:
  1. http://www.webcodo.net/like-dislike-system-with-jquery-ajax-and-php-youtube-like-design/
nospor
Funkcje maja byc zadeklarowane tylko raz. Nie mozesz ich wkladac w petle ani includowac pliku z nimi tysiac razy pod rząd
johny_s
przenieś sobie ta funckcję do jakiegoś pliku includowanego tylko raz
od biedy możesz użyć czegoś takiego

  1. if(!function_exists ( 'percent' )) {
  2. function percent($num_amount, $num_total) {
  3. $count1 = $num_amount / $num_total;
  4. $count2 = $count1 * 100;
  5. $count = number_format($count2, 0);
  6. return $count;
  7. }
  8. }
qoryto
Dziękuję za odpowiedźsmile.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.