2012-04-12 3 views
-1

Ich weiß, dass mein Code ist chaotisch, ich bin sehr neu dazu und lerne, wie ich gehe.PHP XML Fehler

Meine Website ist dies: http://itsalllegit.com (läuft derzeit von meinem Computer zu Hause und mit der TV-API, so dass es manchmal ein bisschen langsam ist).

Das meiste scheint zu funktionieren, derzeit ist das einzige, was nicht NCIS ist, wie hier gezeigt: http://itsalllegit.com/season.php?sid=72108&season=1.

Ich weiß es ist schlecht und lang, aber hier ist mein Code ... Ich stecke hart auf diesem und Hilfe wäre sehr geschätzt (so würden alle Tipps, um es im Allgemeinen besser zu machen).

btw ... wenn ich echo $url3 es kommt mit "(*#YR&(^#R(@$#%$&^@#%$*@#%$&^@$#&" und so weiter.

<html> 
    <head> 
     <title>Saars - Homepage</title> 
      <link rel="stylesheet" type="text/css" href="default.css" /> 
    </head> 
     <body> 
      <?php 

       $series_id = $_GET["sid"]; 
       $season_number = $_GET["season"]; 
       $local_path = "images/Banner/".$series_id."-Banner.jpg"; 
       $url1 = file_get_contents("http://thetvdb.com/api/E676DF9578EF38D7/series/".urlencode($series_id)); 
       $xml = simplexml_load_string($url1); 
       $series_name = $xml->Series[0]->SeriesName; 
       $series_rating = $xml->Series[0]->Rating; 
       $series_network = $xml->Series[0]->Network; 
       $series_status = $xml->Series[0]->Status; 
        echo '<img src="'.$local_path.'"><br />'; 
        echo "Name: ".$series_name."<br />"; 
        echo "Rating: ".$series_rating."<br />"; 
        echo "Network: ".$series_network."<br />"; 
        echo "Status: ".$series_status."<br />"; 
        echo "<hr />"; 
         echo '<table bgcolor="#000000">'; 
          echo '<tr>'; 
           echo '<td width="30">'; 
            echo '<font color="white">#</font>'; 
           echo '</td>'; 
           echo '<td width="500">'; 
            echo '<font color="white">Episode Name</font>'; 
           echo "</td>\n"; 
           echo '<td width="100">'; 
            echo '<font color="white">First Aired</font>'; 
           echo "</td>\n"; 
          echo "</tr>\n"; 
         echo "</table>"; 
       for ($episode_number = 1; $episode_number <= 200; $episode_number++) { 
        $url2 = "http://thetvdb.com/api/E676DF9578EF38D7/series/".$series_id."/default/".urlencode($season_number)."/".urlencode($episode_number)."/en.xml"; 
        $handle = @fopen($url2, 'r'); 
        if ($handle === false) { 
         return; 
        } else { 
         $url3 = file_get_contents("http://thetvdb.com/api/E676DF9578EF38D7/series/".$series_id."/default/".urlencode($season_number)."/".urlencode($episode_number)."/en.xml"); 
         $xml = simplexml_load_string($url3); 
         $episode_name = $xml->Episode[0]->EpisodeName; 
         $episode_rating = $xml->Episode[0]->Rating; 
         $episode_firstaired = $xml->Episode[0]->FirstAired; 
         $episode_overview = $xml->Episode[0]->Overview; 
         $column1 = '<a href="episode.php?sid='.$series_id.'&season='.$season_number.'&episode='.$episode_number.'">'.$episode_number.'</a>'; 
         $column2 = '<a href="episode.php?sid='.$series_id.'&season='.$season_number.'&episode='.$episode_number.'">'.$episode_name.'</a>'; 
         $column3 = '<a href="episode.php?sid='.$series_id.'&season='.$season_number.'&episode='.$episode_number.'">'.$episode_firstaired.'</a>'; 
          echo '<table>'; 
           echo "<tr>\n"; 
            echo '<td width="30">'; 
             echo $column1; 
            echo "</td>\n"; 
            echo '<td width="500">'; 
             echo $column2; 
            echo "</td>\n"; 
            echo '<td width="100">'; 
             echo $column3; 
            echo "</td>\n"; 
           echo "</tr>\n"; 
          echo "</table>"; 
        fclose($handle); 
        } 
       } 
       ?> 
     </Body> 
    </html> 

Antwort

0

Sie öffnen jede URL zweimal, lesen aber nur einmal die Daten. Der Server kann dieses Verhalten nach einiger Zeit ablehnen und die zweite Verbindung ablehnen. Versuchen Sie den Inhalt der Schleife zu dieser Veränderung:

// Define the URL 
$url2 = "http://thetvdb.com/api/E676DF9578EF38D7/series/$series_id/default/".urlencode($season_number)."/".urlencode($episode_number)."/en.xml"; 

// Try and fetch the XML 
// You are returning a value - are you in a function? Should you maybe break; instead? 
if (!$xmlStr = file_get_contents($url2)) return FALSE; 
if (!$xml = simplexml_load_string($xmlStr)) return FALSE; 

// Get data 
$episode_name = $xml->Episode[0]->EpisodeName; 
$episode_rating = $xml->Episode[0]->Rating; 
$episode_firstaired = $xml->Episode[0]->FirstAired; 
$episode_overview = $xml->Episode[0]->Overview; 

// Output HTML 
// A single-row table per record? Maybe you should have one table with multiple rows? 
$epURL = htmlspecialchars("episode.php?sid=$series_id&season=$season_number&episode=$episode_number"); 
echo " 
<table> 
    <tr> 
    <td width='30'><a href='$epURL'>$episode_number</a></td> 
    <td width='500'><a href='$epURL'>$episode_name</a></td> 
    <td width='100'><a href='$epURL'>$episode_firstaired</a></td> 
    </tr> 
</table>"; 

Wenn es immer noch nicht funktioniert, versuchen, Echo $url2 in der Schleife, um zu sehen, was es enthält, wenn Sie die Fehlermeldungen erhalten.

+0

danke, werde ich tun, aber ich erwarte nicht, dass es viel helfen wird, denn bisher scheint es nur NCIS zu sein das ist fehlgeschlagen – Saars

+0

Ich weiß, dass das seltsam scheint, aber wenn ich die URL laden, sollten Sie mit Ihrem Code generieren (der erste, der nicht funktioniert, wenn ich die Seite geladen habe, war ep 3: http://thetvdb.com/api/E676DF9578EF38D7/series/72108/default/1/3/en.xml) in einem Browser funktioniert es. – DaveRandom

+0

ich weiß ... irgendwann funktioniert, manchmal nicht. Ich denke, ich könnte eine if-Anweisung in das downloads, wenn nicht bereits lokal – Saars