Jump to content

Not sure how to position these tables


adamgonge

Recommended Posts

Hi! I wrote this script that takes a nflstats.csv file reads it and then does some stuff to show the player name  and corresponding pass rating. when I put it into tables the tables show up really far down the page and Im not sure why. If I remove the tables the info is displayed at the top but for some reason the tables move it down drastically. Here is my code:

<?php
// this script reads data from a text file

// open file and read data
 $fp=fopen("nflstats.csv", "rw");
if (!$fp){
        echo "Could not open the file!";
exit();
}
//read the first line
$line1 = fgets($fp, 256);

 displayData($fp);

function displayData($fp){

$ratings = array();


while(!feof($fp)){ // as long as it is not the end of the file.
        //read one line at a time
        $line= fgets($fp, 256 );
        $total= 0;
       //Split the data using explode() function
    if($line !=""){
       $info=explode(",", $line);
   $player_name = $info[0];


        $c_value = ($info[2]*100/$info[3] - 30)/20;
        $y_value = ($info[4]/$info[3] - 3)/4;
        $t_value = $info[5]*20/$info[3];
        $i_value = 2.375 - $info[6]*35/$info[3];
        $pass_rating = ($c_value + $y_value + $t_value + $i_value)*100/6;
        $ratings[$player_name]= $pass_rating;

}}


 echo "<h2>"."NFL Player Pass Ratings"."</h2>";
 arsort($ratings);
 echo"<table>";

   foreach ($ratings as $player_name=>$pass_rating){
   echo "<tr><td>Name: </td><td>".$player_name."</td><td> Pass Rating: </td><td>".round($pass_rating,2)."</td></tr><br/>";
   }
 echo"</table>";
 echo "<h2>"."NFL Player Pass Ratings: Great, Good, Mediocre"."</h2><br/>";
  arsort($ratings);
   echo"<table>";
   foreach ($ratings as $player_name=>$pass_rating){

        // display name and team
   if($pass_rating > 85&& $pass_rating <=90)
   echo "<tr><td>Name: </td><td>".$player_name."</td><td>Pass Rating: </td><td>".round($pass_rating, 2)."<b> --Mediocre</b></td></tr><br/>";
   elseif ($pass_rating > 90 && $pass_rating <=95)
   echo "<tr><td>Name: </td><td> ".$player_name."</td><td> Pass Rating: </td><td>".round($pass_rating, 2)."<b> --Good</b></td><td><br/>";
        elseif($pass_rating > 95)
        echo "<tr><td>Name: </td><td>".$player_name."</td><td> Pass Rating: </td><td>".round($pass_rating, 2)."<b> --Great</b></td></tr><br/>";        
}
         echo"</table>";
}
?>

Link to comment
https://forums.phpfreaks.com/topic/288107-not-sure-how-to-position-these-tables/
Share on other sites

Make absolutely sure you have the <tr>, <td>, </td>, and </tr> sequence correct.

 

Also, browsers know to start another row when the sequence </tr><tr> is found.

 

A few browsers (some versions of IE in particular) will collect all extraneous HTML that should not be between the table parts close/open tag sequences, and show them above the table. Thus, all the <br/> tags, being outside of cells, will be collected and 'displayed' above the table.


<?php
 
function displayData($fp)
{
    $ratings = array();
    while(!feof($fp))
    {
        // as long as it is not the end of the file.
        //read one line at a time
        $line = fgets($fp, 256);
        //Split the data using explode() function
        if($line !="")
        {
            $info = explode(",", $line);
            $player_name = $info[0];
            $c_value = ($info[2]*100/$info[3] - 30)/20;
            $y_value = ($info[4]/$info[3] - 3)/4;
            $t_value = $info[5]*20/$info[3];
            $i_value = 2.375 - $info[6]*35/$info[3];
            $pass_rating = ($c_value + $y_value + $t_value + $i_value)*100/6;
            $ratings[$player_name] = round($pass_rating, 2);
        }
    }
    arsort($ratings);
    
    echo "<h2>NFL Player Pass Ratings</h2><br/>\n";
    echo"<table>\n";
    echo "<tr><th>Name</th><th>Pass Rating</th></tr>\n";
    foreach ($ratings as $player_name => $pass_rating)
    {
        echo "<tr><td>{$player_name}</td><td>{$pass_rating}</td></tr>\n";
    }
    echo"</table>\n";
    
    echo "<h2>NFL Player Pass Ratings: Great, Good, Mediocre</h2><br/>\n";
    echo"<table>\n";
    echo "<tr><th>Name</th><th>Pass Rating</th></tr>\n";
    foreach ($ratings as $player_name => $pass_rating)
    {
        //Determine rating label
        if($pass_rating > 95) {
            $rating_label = "Great";        
        } elseif ($pass_rating > 90) {
            $rating_label = "Good";
        } elseif($pass_rating > 85) {
            $rating_label = "Mediocre";
        } else {
            $rating_label = "Terrible";
        }
        echo "<tr>\n";
        echo "<td>{$player_name}</td>\n";
        echo "<td>{$pass_rating}<b> -- {$rating_label}</b></td>\n";
        echo "</tr>\n";
    }
    echo"</table>\n";
}
?>

Hey thanks for the help it seemed to be the <br/> tags, thanks for the rewrite I compared to mine and made adjustments accordingly. the final code takes your style which I am lacking in and and also your for each block. I appreciate it because im really trying to become a great programmer, not just capable of doing it.  If you have any suggestions on how I could improve please let me know, and again thanks for the help.

final code:

<?php
// this script reads data from a text file
// open file and read data
$fp=fopen("nflstats.csv", "rw");
 if (!$fp){
 echo "Could not open the file!";
 exit();
 }
 displayData($fp);

function displayData($fp){
    $line1 = fgets($fp, 256);
    $ratings = array();
    while(!feof($fp)){
        //read one line at a time
        $line= fgets($fp, 256 );
        $total= 0;
       //Split the data using explode() function
        if($line !=""){
            $info=explode(",", $line);
            $player_name = $info[0];
            $c_value = ($info[2]*100/$info[3] - 30)/20;
            $y_value = ($info[4]/$info[3] - 3)/4;
            $t_value = $info[5]*20/$info[3];
            $i_value = 2.375 - $info[6]*35/$info[3];
            $pass_rating =round(($c_value + $y_value + $t_value + $i_value)*100/6, 2);
            $ratings[$player_name]= $pass_rating;
        }
    }
    arsort($ratings);

    echo "<table border=1>";
    echo "<tr><td colspan=\"3\" ><h2>"."NFL Player Pass Ratings"."</h2></td></tr>";
    echo "<tr><th>Name</th><th>Pass Rating</th></tr>\n";

    foreach ($ratings as $player_name=>$pass_rating){
    echo "<tr><td>{$player_name}</td><td>{$pass_rating}</td></tr>\n";
    }
    echo"</table>\n";

    echo"<table border=1>";
    echo "<tr><th colspan=\"22\" ><h2>"."NFL Player Pass Ratings: Great, Good, Mediocre"."</h2></td></tr>";
    echo "<tr><th>Name</th><th>Pass Rating</th></tr>\n";

    foreach ($ratings as $player_name=>$pass_rating){
        if($pass_rating > 95) {
            $rating_label = "Great";
        } elseif($pass_rating >90){
            $rating_label = "Good";
  } elseif($pass_rating >85){
            $rating_label = "Mediocre";
        } else{
            $rating_label = "Terrible";
        }
        echo "<tr>\n";
        echo "<td>{$player_name}</td><td>{$pass_rating}<b> -- {$rating_label}</b></td>\n";
        echo "</tr>\n";
}
   echo"</table>\n";
}
?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.