2015-07-23 2 views
2

Я изучаю создание php веб-страниц с MySQL. хотел запустить сценарий, но я терпел неудачу. Я получаю белый экран смерти. Можете ли вы посмотреть на код и рассказать мне, что делать и в каком направлении мне идти. спасибо за ваше время.Белый экран смерти на динамической странице sql php

<?php 
include 'include.php'; 
// PHP Class bracket 
// Bracket builder for GotGames 
// Author Benjamin Thomas 
// October 2009 
class bracket { 
//Bring In Database Details From Include.PHP 
var $username = DB_USER; 
var $password = DB_PASS; 
var $database = DB_NAME; 
//Init Class Variables 
var $tournament_name; 
var $tournament_size; 
var $tournament_format; 
var $tournament_id; 
var $result_servers; 
var $result_stvs; 
var $result_matches; 
var $result_teams; 
//************************************************************************************* 
// schedule bracket 
// Input - The tournament ID used to identify which tournament we are scheduling for 
// Operation - This constructor reads the required information from the  databas and assigns the following class values: 
// tournament_name; 
// tournament_size; 
// tournament_format; 
// tournament_id; 
// result_servers; 
// result_stvs; 
// result_matches; 
// result_teams; 
//************************************************************************************* 
function bracket($tourn_id) { 
//Save the Tournament ID 
$this->tournament_id = $tourn_id; 
//Collect All Required Information To Draw a Bracket 
mysql_connect('localhost',$this->username,$this->password); 
@mysql_select_db($this->database) or die("Unable to select database"); 
$query = "SELECT * FROM tms_tournament WHERE id = ".$tourn_id; 
$result_tournament = mysql_query($query) or die('Error, query failed'); 
$row = mysql_fetch_assoc($result_tournament); 
$this->tournament_name = $row['name']; 
$this->tournament_size = $row['size']; 
$this->tournament_format = $row['format']; 
mysql_free_result($result_tournament); 
//read and save information from database 
$query = "SELECT * FROM tms_servers WHERE id_tournament = ".$tourn_id; 
$this->result_servers = mysql_query($query) or die('Error, query failed'); 
$query = "SELECT * FROM tms_stvs WHERE id_tournament = ".$tourn_id; 
$this->result_stvs = mysql_query($query) or die('Error, query failed'); 
$query = "SELECT * FROM tms_matches WHERE id_tournament = ".$tourn_id; 
$this->result_matches = mysql_query($query) or die('Error, query failed'); 
$query = "SELECT * FROM tms_teams_".$tourn_id." WHERE id_tournament = ".$tourn_id; 
$this->result_teams = mysql_query($query) or die('Error, query failed'); 
} 
//************************************************************************************* 
// Function draw 
// Operation - Called to display a single elimination bracket 
//************************************************************************************* 
function draw() { 
$total_rounds = log($this->tournament_size,2)+1; //total rounds 
$row = array(); 
$col = array($row); //create a data type to hold our bracket information 
//Generate a datastructure to hold all the information required to layout the bracket 
for($i = 1; $i <= $total_rounds; $i++) { 
$round_matches = $this->getmatches($i); 
$matches = pow(2,$total_rounds-$i); //calc how many matches for this round 
$interval = pow(2,$i); // calc the interval for layout spacing 
$offset = pow(2,$i-1); // each round is offset by a differnt amount to form the bracket pyramid 
for($c = 1; $c <= ($this->tournament_size*2)+1; $c++) { 
if ($c < $offset) { // blank space 
$col[$i][$c] = 0; 
} elseif ($c > (($this->tournament_size*2)+1)-$offset) { // blank space 
$col[$i][$c] = 0; 
} elseif ($c==$offset) { 
if ($i==$total_rounds) { //No match but tournament winner 
$col[$i][$c] = "Champion"; 
}else { //print a team here 
$tmp_array=array_shift($round_matches); 
$col[$i][$c] = $tmp_array['print_team']; 
    } 
} elseif ((($c-$offset) % $interval) == 0) { //print a team here 
$tmp_array=array_shift($round_matches); 
$col[$i][$c] = $tmp_array['print_team']; 
} elseif ($c==($offset*2)) { //print match here 
$col[$i][$c] = "Match".$tmp_array['id']; 
} elseif ((($c-$offset*2) % ($interval*2)) == 0) { //print match here 
$col[$i][$c] = "Match".$tmp_array['id']; 
} else { 
$col[$i][$c] = 0; // blank space 
} 
print("<br>"); 
} 
// layout the bracket using html tables and the data struct created above: col 
print("<table width='100%' border='5'>"); 
print("<tr>"); 
for($i = 1; $i <= $total_rounds-1; $i++) { 
print("<th>Round ".(string)$i."</th>"); 
} 
print("</tr>"); 
for($c=1;$c<=($this->tournament_size*2);$c++) { 
print("<tr>"); 
for($i = 1; $i <= $total_rounds+1; $i++) { 
if (strcmp(substr($col[$i][$c],0,5),"Match")==0) { 
$tmp_array = $this->getmatch(substr($col[$i][$c],5)); 
$datetime = new DateTime($tmp_array['timestamp']); 
print("<td align='center' bgcolor='#FFE4E1'><table><tr><td 
align='center'>".$datetime->format("D, jS F Y gA")."</td></tr><tr><td  align='center'>stv - ".$this->getstvdetails($tmp_array['id_stv'])."</td></tr></table> </td>"); 
} elseif (strcmp(substr($col[$i][$c],0,5),"Teams")==0) { 
print("<td align='center' bgcolor='#dddddd'>".$this->getteamname(substr($col[$i] [$c],5))."</td>"); 
} elseif ($col[$i][$c]) { 
print("<td align='center' bgcolor='#dddddd'>".$col[$i][$c]."</td>"); 
} else { 
print("<td height='40'></td>"); 
} 
} 
print("</tr>"); 
    } 
print("</table>"); 
} 
} 
//************************************************************************************* 
// Function getmatch 
// Input - match_id 
// Operation - Retrives all the information saved for the parsed match_id 
//************************************************************************************* 
function getmatch($match_id) { 
$query = "SELECT * FROM tms_matches WHERE id = ".(string)$match_id; 
$result = mysql_query($query); 
$row = mysql_fetch_assoc($result); 
mysql_free_result($result); 
return $row; 
} 
    //************************************************************************************* 
// Function getteamname 
// Input - team_id 
// Operation - Returns the name of the team with the parsed team ID 
//*********************************************************************************** ** 
function getteamname($team_id) { 
$query = "SELECT name FROM tms_teams_".(string)$this->tournament_id." WHERE id =  ".(string)$team_id;$result = mysql_query($query) or die('Error, query failed'); 
return mysql_result($result, 0); 
} 
//************************************************************************************* 
// Function getstvdetails 
// Input - stv_id 
// Operation - Returns the IP Address of the parsed stv id 
//************************************************************************************* 
function getstvdetails($stv_id) { 
$query = "SELECT address FROM tms_stvs WHERE id = ".(string)$stv_id; 
$result = mysql_query($query); 
return mysql_result($result, 0); 
} 
//************************************************************************************* 
// Function getmatches 
// Input round_no 
// Operation - Returns an array of all the matches for the parse round. The array is sorted by the position field. 
//************************************************************************************* 
function getmatches($round_no) { 
$matches_avail = array(); 
$tmp_row = array(); 
$query = "SELECT * FROM tms_matches WHERE id_tournament = ".$this->tournament_id." 
AND round = ".(string)$round_no." ORDER BY position"; 
$result = mysql_query($query); 
while($row = mysql_fetch_assoc($result)) 
{ 
$tmp_row = $row; 
if ($row['status'] == 1) { 
$row = array_merge($row,array("print_team"=>"Winner of 
".$row['id_match_parent_a'])); 
} else { 
$row = 
array_merge($row,array("print_team"=>"Teams".$row['id_team_a']));//team A 
} 
$matches_avail[] = $row; 
$row = $tmp_row; 
if ($row['status'] == 1) { 
$row = array_merge($row,array("print_team"=>"Winner of 
".$row['id_match_parent_b'])); 
} else { 
$row = 
array_merge($row,array("print_team"=>"Teams".$row['id_team_b']));//team B 
} 
$matches_avail[] = $row; 
unset($tmp_row); 
}return $matches_avail; 
} 
//************************************************************************************* 
// destructor 
// Operation - Frees memory held by SQL result sets 
//************************************************************************************* 
function __destruct() { 
mysql_free_result($this->result_servers); 
mysql_free_result($this->result_stvs); 
mysql_free_result($this->result_matches); 
mysql_free_result($this->result_teams); 
mysql_close(); 
} 
} 
?> 
+9

Включите 'error_reporting (-1)' и, пожалуйста, укажите свой код, желательно с 4 пробелами. Это совершенно нечитаемо. – Daan

+5

Поскольку вы начинаете и все, я предлагаю отходить от mysql_ * и использовать PDO для соединений db. – Rob

+0

По мере того как вы начали путешествие сюда, в stackoverflow только что прочитали рекомендации –

ответ

0

Я не мог найти никаких проблем, но я очистил ваш код, возможно, это поможет кому-то найти вашу проблему.

<?php 
    include('include.php'); 
    // PHP Class bracket 
    // Bracket builder for GotGames 
    // Author Benjamin Thomas 
    // October 2009 
    class bracket 
      { 
        //Bring In Database Details From Include.PHP 
        var $username = DB_USER; 
        var $password = DB_PASS; 
        var $database = DB_NAME; 
        //Init Class Variables 
        var $tournament_name; 
        var $tournament_size; 
        var $tournament_format; 
        var $tournament_id; 
        var $result_servers; 
        var $result_stvs; 
        var $result_matches; 
        var $result_teams; 
        //************************************************************************************* 
        // schedule bracket 
        // Input - The tournament ID used to identify which tournament we are scheduling for 
        // Operation - This constructor reads the required information from the  databas and assigns the following class values: 
        // tournament_name; 
        // tournament_size; 
        // tournament_format; 
        // tournament_id; 
        // result_servers; 
        // result_stvs; 
        // result_matches; 
        // result_teams; 
        //************************************************************************************* 
        function bracket($tourn_id) 
          { 
            //Save the Tournament ID 
            $this->tournament_id = $tourn_id; 
            //Collect All Required Information To Draw a Bracket 
            mysql_connect('localhost', $this->username, $this->password); 
            @mysql_select_db($this->database) or die("Unable to select database"); 
            $query = "SELECT * FROM tms_tournament WHERE id = " . $tourn_id; 
            $result_tournament = mysql_query($query) or die('Error, query failed'); 
            $row      = mysql_fetch_assoc($result_tournament); 
            $this->tournament_name = $row['name']; 
            $this->tournament_size = $row['size']; 
            $this->tournament_format = $row['format']; 
            mysql_free_result($result_tournament); 
            //read and save information from database 
            $query = "SELECT * FROM tms_servers WHERE id_tournament = " . $tourn_id; 
            $this->result_servers = mysql_query($query) or die('Error, query failed'); 
            $query = "SELECT * FROM tms_stvs WHERE id_tournament = " . $tourn_id; 
            $this->result_stvs = mysql_query($query) or die('Error, query failed'); 
            $query = "SELECT * FROM tms_matches WHERE id_tournament = " . $tourn_id; 
            $this->result_matches = mysql_query($query) or die('Error, query failed'); 
            $query = "SELECT * FROM tms_teams_" . $tourn_id . " WHERE id_tournament = " . $tourn_id; 
            $this->result_teams = mysql_query($query) or die('Error, query failed'); 
          } 
        //************************************************************************************* 
        // Function draw 
        // Operation - Called to display a single elimination bracket 
        //************************************************************************************* 
        function draw() 
          { 
            $total_rounds = log($this->tournament_size, 2) + 1; 
            //total rounds 
            $row   = array(); 
            $col   = array(
                $row 
            ); 
            //create a data type to hold our bracket information 
            //Generate a datastructure to hold all the information required to layout the bracket 
            for($i = 1; $i <= $total_rounds; $i++) 
              { 
                $round_matches = $this->getmatches($i); 
                $matches  = pow(2, $total_rounds - $i); 
                //calc how many matches for this round 
                $interval  = pow(2, $i); 
                // calc the interval for layout spacing 
                $offset  = pow(2, $i - 1); 
                // each round is offset by a differnt amount to form the bracket pyramid 
                for($c = 1; $c <= ($this->tournament_size * 2) + 1; $c++) 
                  { 
                    if($c < $offset) 
                      { 
                        // blank space 
                        $col[$i][$c] = 0; 
                      } //$c < $offset 
                    elseif($c > (($this->tournament_size * 2) + 1) - $offset) 
                      { 
                        // blank space 
                        $col[$i][$c] = 0; 
                      } //$c > (($this->tournament_size * 2) + 1) - $offset 
                    elseif($c == $offset) 
                      { 
                        if($i == $total_rounds) 
                          { 
                            //No match but tournament winner 
                            $col[$i][$c] = "Champion"; 
                          } //$i == $total_rounds 
                        else 
                          { 
                            //print a team here 
                            $tmp_array = array_shift($round_matches); 
                            $col[$i][$c] = $tmp_array['print_team']; 
                          } 
                      } //$c == $offset 
                    elseif((($c - $offset) % $interval) == 0) 
                      { 
                        //print a team here 
                        $tmp_array = array_shift($round_matches); 
                        $col[$i][$c] = $tmp_array['print_team']; 
                      } //(($c - $offset) % $interval) == 0 
                    elseif($c == ($offset * 2)) 
                      { 
                        //print match here 
                        $col[$i][$c] = "Match" . $tmp_array['id']; 
                      } //$c == ($offset * 2) 
                    elseif((($c - $offset * 2) % ($interval * 2)) == 0) 
                      { 
                        //print match here 
                        $col[$i][$c] = "Match" . $tmp_array['id']; 
                      } //(($c - $offset * 2) % ($interval * 2)) == 0 
                    else 
                      { 
                        $col[$i][$c] = 0; 
                        // blank space 
                      } 
                    print("<br>"); 
                  } //$c = 1; $c <= ($this->tournament_size * 2) + 1; $c++ 
                // layout the bracket using html tables and the data struct created above: col 
                print("<table width='100%' border='5'>"); 
                print("<tr>"); 
                for($i = 1; $i <= $total_rounds - 1; $i++) 
                  { 
                    print("<th>Round " . (string) $i . "</th>"); 
                  } //$i = 1; $i <= $total_rounds - 1; $i++ 
                print("</tr>"); 
                for($c = 1; $c <= ($this->tournament_size * 2); $c++) 
                  { 
                    print("<tr>"); 
                    for($i = 1; $i <= $total_rounds + 1; $i++) 
                      { 
                        if(strcmp(substr($col[$i][$c], 0, 5), "Match") == 0) 
                          { 
                            $tmp_array = $this->getmatch(substr($col[$i][$c], 5)); 
                            $datetime = new DateTime($tmp_array['timestamp']); 
                            print("<td align='center' bgcolor='#FFE4E1'><table><tr><td 
    align='center'>" . $datetime->format("D, jS F Y gA") . "</td></tr><tr><td  align='center'>stv - " . $this->getstvdetails($tmp_array['id_stv']) . "</td></tr></table> </td>"); 
                          } //strcmp(substr($col[$i][$c], 0, 5), "Match") == 0 
                        elseif(strcmp(substr($col[$i][$c], 0, 5), "Teams") == 0) 
                          { 
                            print("<td align='center' bgcolor='#dddddd'>" . $this->getteamname(substr($col[$i][$c], 5)) . "</td>"); 
                          } //strcmp(substr($col[$i][$c], 0, 5), "Teams") == 0 
                        elseif($col[$i][$c]) 
                          { 
                            print("<td align='center' bgcolor='#dddddd'>" . $col[$i][$c] . "</td>"); 
                          } //$col[$i][$c] 
                        else 
                          { 
                            print("<td height='40'></td>"); 
                          } 
                      } //$i = 1; $i <= $total_rounds + 1; $i++ 
                    print("</tr>"); 
                  } //$c = 1; $c <= ($this->tournament_size * 2); $c++ 
                print("</table>"); 
              } //$i = 1; $i <= $total_rounds; $i++ 
          } 
        //************************************************************************************* 
        // Function getmatch 
        // Input - match_id 
        // Operation - Retrives all the information saved for the parsed match_id 
        //************************************************************************************* 
        function getmatch($match_id) 
          { 
            $query = "SELECT * FROM tms_matches WHERE id = " . (string) $match_id; 
            $result = mysql_query($query); 
            $row = mysql_fetch_assoc($result); 
            mysql_free_result($result); 
            return $row; 
          } 
        //************************************************************************************* 
        // Function getteamname 
        // Input - team_id 
        // Operation - Returns the name of the team with the parsed team ID 
        //*********************************************************************************** ** 
        function getteamname($team_id) 
          { 
            $query = "SELECT name FROM tms_teams_" . (string) $this->tournament_id . " WHERE id =  " . (string) $team_id; 
            $result = mysql_query($query) or die('Error, query failed'); 
            return mysql_result($result, 0); 
          } 
        //************************************************************************************* 
        // Function getstvdetails 
        // Input - stv_id 
        // Operation - Returns the IP Address of the parsed stv id 
        //************************************************************************************* 
        function getstvdetails($stv_id) 
          { 
            $query = "SELECT address FROM tms_stvs WHERE id = " . (string) $stv_id; 
            $result = mysql_query($query); 
            return mysql_result($result, 0); 
          } 
        //************************************************************************************* 
        // Function getmatches 
        // Input round_no 
        // Operation - Returns an array of all the matches for the parse round. The array is sorted by the position field. 
        //************************************************************************************* 
        function getmatches($round_no) 
          { 
            $matches_avail = array(); 
            $tmp_row  = array(); 
            $query   = "SELECT * FROM tms_matches WHERE id_tournament = " . $this->tournament_id . " 
    AND round = " . (string) $round_no . " ORDER BY position"; 
            $result  = mysql_query($query); 
            while($row = mysql_fetch_assoc($result)) 
              { 
                $tmp_row = $row; 
                if($row['status'] == 1) 
                  { 
                    $row = array_merge($row, array(
                        "print_team" => "Winner of 
    " . $row['id_match_parent_a'] 
                    )); 
                  } //$row['status'] == 1 
                else 
                  { 
                    $row = array_merge($row, array(
                        "print_team" => "Teams" . $row['id_team_a'] 
                    )); 
                    //team A 
                  } 
                $matches_avail[ ] = $row; 
                $row    = $tmp_row; 
                if($row['status'] == 1) 
                  { 
                    $row = array_merge($row, array(
                        "print_team" => "Winner of 
    " . $row['id_match_parent_b'] 
                    )); 
                  } //$row['status'] == 1 
                else 
                  { 
                    $row = array_merge($row, array(
                        "print_team" => "Teams" . $row['id_team_b'] 
                    )); 
                    //team B 
                  } 
                $matches_avail[ ] = $row; 
                unset($tmp_row); 
              } //$row = mysql_fetch_assoc($result) 
            return $matches_avail; 
          } 
        //************************************************************************************* 
        // destructor 
        // Operation - Frees memory held by SQL result sets 
        //************************************************************************************* 
        function __destruct() 
          { 
            mysql_free_result($this->result_servers); 
            mysql_free_result($this->result_stvs); 
            mysql_free_result($this->result_matches); 
            mysql_free_result($this->result_teams); 
            mysql_close(); 
          } 
      } 
    ?> 
+0

благодаря расположению. Я попытался поставить отчет об ошибках, но все еще имею wsod. –

+1

@IvanVukoja - Худшая часть - это, наверное, что-то очень простое, что нас всех не хватает. Я не думаю, что это будет проблемой. Я бы предложил сделать то, что предложил Луча, и комментировать разделы, пока вы не найдете источник, узкий для нас, а затем опубликуйте то, что вы придумали, и, возможно, мы сможем помочь больше. –

0

К сожалению, у меня нет ответа еще одного, но хотел, чтобы дать вам подсказку о том, как вы можете начать поиск проблемы.

Когда я получаю белый экран без сообщений об ошибках, я начну пытаться сузить часть кода, содержащую проблему, комментируя БОЛЬШИЕ суммы кода, а затем медленно не комментируя все больше и больше, чтобы точно видеть где происходит ошибка.

Например, я могу прокомментировать все функции внутри класса. Затем я медленно добавлял каждую функцию до тех пор, пока не произошла ошибка.

Таким образом, вы найдете меньшую часть кода, чтобы начать разбираться.

Смежные вопросы