Autor | Zpráva | ||
---|---|---|---|
mmapro Profil |
#1 · Zasláno: 21. 2. 2014, 17:22:01
Ahoj, mam zase menší problém, který řešim a sám to asi nedám dohromady protože, jsem ty soubory přehrál asi 3x atd a furt nic, furt samá hláška. Hodim sem odkaz, kde ta chyba je a kod, takže je to zde: http://mmaprofighter.org/cron.php
a kod je zde: <?php ob_start(); session_start(); if(file_exists("./install.php")) { header("Location: ./install.php"); } include("includes/config.php"); include("includes/functions.php"); // get web settings $web = mysql_fetch_row(mysql_query("SELECT * FROM settings ORDER BY id DESC LIMIT 1")); function check_premium_expire() { $time_now = time(); $sql = mysql_query("SELECT * FROM premium_history ORDER BY id") or die(mysql_error()); if(mysql_num_rows($sql)>0) { while($row = mysql_fetch_array($sql)) { if($time_now > $row['premium_expire']) { $update = mysql_query("UPDATE users SET premium='0' WHERE id='$row[user_id]'") or die(mysql_error()); $delete = mysql_query("DELETE FROM premium_history WHERE id='$row[id]'") or die(mysql_error()); } } } } function check_tournaments_end() { $time_now = time(); $sql = mysql_query("SELECT * FROM tournaments WHERE $time_now > end_time and winner='0' ORDER BY id") or die(mysql_error()); if(mysql_num_rows($sql)>0) { while($row = mysql_fetch_array($sql)) { $tour_players = tour_players($row['id']); $get_winner = mysql_query("SELECT * FROM users WHERE id IN ($tour_players) ORDER BY total_stats DESC LIMIT 1") or die(mysql_error()); $get_winner = mysql_fetch_array($get_winner); $winner = $get_winner['id']; $update = mysql_query("UPDATE users SET tournaments_won=tournaments_won+1 WHERE id='$winner'"); $update = mysql_query("UPDATE tournaments SET winner='$winner' WHERE id='$row[id]'") or die(mysql_error()); } } } check_premium_expire(); check_tournaments_end(); ?> vůbec nevi kde by mogl být problém, je možný, že je to třeba v MySQL? |
||
Tori Profil |
#2 · Zasláno: 21. 2. 2014, 17:36:39
Funkce tour_players vrací něco jiného, než čekáte, tím vznikne druhá chyba v SQL. První chyba (s implode) je někde na řádku 82 ve functions.php
|
||
Fisir Profil |
#3 · Zasláno: 21. 2. 2014, 17:40:30
Reaguji na mmapra:
Ano, problém je v MySQL. Problém je v dotazu na řádku 31, zkus proměnnou $tour_players escapovat. Příště prosím nepoužívej rozšíření mysql_* . Jak říkala Tori, chyba s implode je v jiném souboru, ale je možné, že se po vyřešení chyby v dotazu odstraní i tahle.
|
||
mmapro Profil |
#4 · Zasláno: 21. 2. 2014, 18:24:49
muže mi stim někdo pomoct? escapovat neumim, jsem začátečník
|
||
lionel messi Profil |
#5 · Zasláno: 21. 2. 2014, 18:27:20
|
||
mmapro Profil |
#6 · Zasláno: 21. 2. 2014, 18:43:18
Nějak mi to nejde, jinak zde je ten function.php (75 až 84řádek)
} function tour_players($id) { $query = mysql_query("SELECT * FROM tournaments_players WHERE tour_id='$id'"); while($row = mysql_fetch_array($query)) { $subs[] = $row['user_id']; } return implode(',', $subs); } ?> |
||
lionel messi Profil |
Skús na začiatok cyklu:
extract($row); $subs[] = $user_id; |
||
Fisir Profil |
#8 · Zasláno: 21. 2. 2014, 18:46:54
Reaguji na lionela messiho:
To je blbost. Kde definuješ proměnnou $user_id ?
|
||
lionel messi Profil |
Fisir:
„To je blbost. Kde definuješ proměnnou $user_id?“ Upravené, pridal som funkciu extract. Vďaka za upozornenie. |
||
mmapro Profil |
#10 · Zasláno: 21. 2. 2014, 18:52:13
dal jsem to tam, kam jsi psal, že to mam dát, a vypisuje to
Warning: extract() expects parameter 1 to be array, null given in /DISK2/WWW/mmaprofighter.org/www/includes/functions.php on line 76 Warning: implode(): Invalid arguments passed in /DISK2/WWW/mmaprofighter.org/www/includes/functions.php on line 83 Va-Bąe syntaxe je nějaká divná bl-Bízko ') ORDER BY total_stats DESC LIMIT 1' na řádku 1
|
||
Tori Profil |
mmapro:
K [#6]: Před řádkem č.5 musí být $subs = array(); . Jinak totiž v případě, že SQL dotaz nic nenajde, nebyla proměnná $subs definovaná.
Druhou chybu odstraníte tím, že řádky 31-35 (v kódu v [#1]) dáte do podmínky, aby se provedly pouze pokud $tour_players je neprázdná.
A možná bych úplně vynechala funkci tour_players a spojila její SQL s dotazem na zjištění vítěze (ale to je jen návrh na vylepšení, není to nutné a s chybou to nesouvisí). Ještě poznámka: bylo by dobré si ujasnit, jestli může (z pohledu návrhu DB) existovat zápas, u kterého nejsou uloženi žádní hráči. Pokud ne, tak máte v DB nějakou nekonzistenci, že tabulka tournaments obsahuje ID zápasu, kterému v té vazební tournaments_players nejsou přiřazeni hráči. Pokud může existovat, je potřeba s touto možností v kódu počítat (např. tou definicí výchozí prázdné hodnoty do $subs ).
edit2: Z pohledu návrhu funkce by spíš měla tour_players vracet to původní pole $subs (jako výchozí dat. strukturu pro skupinu hodnot), a na csv to převádět až před vkládáním do SQL. Ale není to chyba funčnosti.
|
||
mmapro Profil |
#12 · Zasláno: 21. 2. 2014, 19:27:10
Jasný, rozhodně už je to lepší, píše to jen
Va-Bąe syntaxe je nějaká divná bl-Bízko ') ORDER BY total_stats DESC LIMIT 1' na řádku 1
<?php function protect($string) { $protection = htmlspecialchars(trim($string), ENT_QUOTES); return $protection; } function success($text) { echo '<br><div style="font-weight:bold;color:green;">'.$text.'</div><br>'; } function error($text) { echo '<br><div style="font-weight:bold;color:red;">'.$text.'</div><br>'; } function isValidUsername($str) { return preg_match('/^[a-zA-Z0-9-_]+$/',$str); } function isValidEmail($str) { return filter_var($str, FILTER_VALIDATE_EMAIL); } function percent($num_amount, $num_total) { $count1 = $num_amount / $num_total; $count2 = $count1 * 100; $count = number_format($count2, 0); return $count; } function timeago($datefrom) { global $lang; $date = $datefrom-time(); $minutes = floor($date/60); if($minutes == 1) { return '1 '.$lang[minute]; } elseif($minutes == 0) { return floor($minutes/60).' '.$lang[seconds]; } else { return $minutes.' '.$lang[minutes]; } } function expire($datefrom) { global $lang; $date = $datefrom-time(); $days = floor($date / 60 / 60 / 24); $hours = floor($date / 60 / 60); $minutes = floor($date / 60 / 10); if($days > 0) { if($days == 1) { $string_days = '1 '.$lang[day].', '; } else { $string_days = $days.' '.$lang[days].', '; } } else { $string_days = ''; } if($hours > 0) { if($hours == 1) { $string_hours = '1 '.$lang[hour].', '; } else { $string_hours = $hours.' '.$lang[hours].', '; } } else { $string_hours = ''; } if($minutes > 0) { if($minutes == 1) { $string_minutes = '1 '.$lang[minute]; } else { $string_minutes = $minutes.' '.$lang[minutes]; } } else { $string_minutes = ''; } return $string_days.$string_hours.$string_minutes; } function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } $expl = explode("/?",$pageURL); return $expl[0]; } function get_requests($user_id) { $query = mysql_query("SELECT * FROM requests WHERE request_id='$user_id'"); $subs[] = $user_id; while($row = mysql_fetch_array($query)) { $subs[] = $row['user_id']; } return implode(',', $subs); } function tour_players($id) { $query = mysql_query("SELECT * FROM tournaments_players WHERE tour_id='$id'"); $subs = array(); while($row = mysql_fetch_array($query)) { $subs[] = $row['user_id']; } return implode(',', $subs); } ?> |
||
Rfilip Profil |
#13 · Zasláno: 21. 2. 2014, 19:54:41
$tour_players má na 30 řádku úvodního kodu jakou hodnotu?
|
||
mmapro Profil |
#14 · Zasláno: 21. 2. 2014, 19:58:24
Zde je řádek 25 až 31 z cron.php (úvodní kod)
function check_tournaments_end() { $time_now = time(); $sql = mysql_query("SELECT * FROM tournaments WHERE $time_now > end_time and winner='0' ORDER BY id") or die(mysql_error()); if(mysql_num_rows($sql)>0) { while($row = mysql_fetch_array($sql)) { $tour_players = tour_players($row['id']); $get_winner = mysql_query("SELECT * FROM users WHERE id IN ($tour_players) ORDER BY total_stats DESC LIMIT 1") or die(mysql_error()); |
||
Tori Profil |
|||
mmapro Profil |
Tak to neni kodem, ale nečim v DB v tabulce turnament, když je prazdná tak cron jede, ale jak nahraju DB tak to píše zas tu chybu
a při nahrání tohle asi to je těma čárkama, píše to chybu Va-Bąe syntaxe je nějaká divná bl-Bízko ') ORDER BY total_stats DESC LIMIT 1' na řádku 1 a když smažu obsah tý tabulky turnaments tak zas vse ok |
||
Alphard Profil |
#17 · Zasláno: 22. 2. 2014, 00:32:25
Nečetl jsem celý začátek, předpokládám, že se bavíme o dotazu [#14] mmapro
mysql_query("SELECT * FROM users WHERE id IN ($tour_players) ORDER BY total_stats DESC LIMIT 1") Když je tabulka tournaments prázdná, první select vrátí prázdný výsledek výsledek a ten druhý (zde citovaný) se vůbec neprovádí..., to jen k vysvětlení příčiny. Podstatu problému vám už říkala i připomínala Tori, dokonce vám napsala i jak to vyřešit. Je třeba zajistit, aby se dotaz neprováděl s prázdným $tour_players .
|
||
Časová prodleva: 10 let
|
0