adamgonge Posted April 29, 2014 Share Posted April 29, 2014 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 More sharing options...
bsmither Posted April 29, 2014 Share Posted April 29, 2014 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. Link to comment https://forums.phpfreaks.com/topic/288107-not-sure-how-to-position-these-tables/#findComment-1477586 Share on other sites More sharing options...
Psycho Posted April 29, 2014 Share Posted April 29, 2014 <?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"; } ?> Link to comment https://forums.phpfreaks.com/topic/288107-not-sure-how-to-position-these-tables/#findComment-1477588 Share on other sites More sharing options...
adamgonge Posted April 30, 2014 Author Share Posted April 30, 2014 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"; } ?> Link to comment https://forums.phpfreaks.com/topic/288107-not-sure-how-to-position-these-tables/#findComment-1477674 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.