| 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: 12 let
|
|||
0