Re: table appears with empty rows, and row data appears before table. Code seems ok. What is going on? [message #178172 is a reply to message #178168] |
Thu, 17 May 2012 11:27 |
IRC
Messages: 6 Registered: April 2012
Karma:
|
Junior Member |
|
|
On May 16, 9:23 pm, Denis McMahon <denismfmcma...@gmail.com> wrote:
> On Wed, 16 May 2012 07:37:22 -0700, ku...@pobox.com wrote:
>> I have code which displays a HTML <table>. The data in the rows comes is
>> read from a file. But the row data is appearing (minus the <tr></tr>
>> tags) on the web page before the table. The table displays with empty
>> rows below what was supposed to be the row data.
>
>> In other words this php...
>
>> echo "<table>\n<thead>\n<tr><th>number</th><th>date</th><th>First
>> Name</th><th>Last
>> Name</th><th>state</th><th>country</th><th>remarks</th></tr>\n</thead >
> \n<tbody>\n";
>
>> try {
>
>> $fileh = fopen("data/petition-051512.csv", "r");
>
>> while ($text = fgets($fileh)) {
>
>> $tok = strtok($text, ",");
>
>> while ($tok !== FALSE) {
>
>> echo "<tr>" . $tok . "</tr>\n";
>
>> $tok = strtok(",");
>> }
>> }
>> echo "</tbody></table>\n";
>> return;
>
>> produces html that looks like one big mass of text, consisting of the
>> 560 rows of data, minus any table tags, followed by a table with 560
>> empty rows.
>
>> I can't figure this out.
>
> The content of each "$tok" is being wrapped by a "tr" element. A "tr"
> element in html can not contain content directly, just table cell
> elements (td or th usually). So your browser finds text in an illegal
> place, and places it before the table (other browsers might do other
> things with it).
>
> Try on of the following:
>
> while ( $arr = fgetcsv( $fileh ) ) {
> echo "<tr>";
> for ( $tok in $arr )
> echo "<td>$tok</td>"
> echo "</tr>";
>
> }
>
> or
>
>> while ($text = fgets($fileh)) {
>
> echo "<tr>\n";> $tok = strtok($text, ",");
>> while ($tok !== FALSE) {
>> echo "<td>" . $tok . "</td>\n";
>> $tok = strtok(",");
>> }
>
> echo "</tr>\n";
>
>> }
>
> Note also that your code will split a csv field that contains a comma in
> text, eg for the following two csv fields:
>
> "this is text, and text, and text","this,is,more,text"
>
> Your code will generate 7 table cells from the two csv fields.
>
> This may be what you want, or it may not. Your code will also include the
> " marks in the output, which might not be what you want?
>
> Rgds
>
> Denis McMahon
You don't even need to include '\n', its doesn't make any sense
putting outside '</td>\n', if you are using table structure.
Please try this:
try {
$fileh = fopen("data/petition-051512.csv", "r");
while ($text = fgets($fileh)) {
$tok = strtok($text, ",");
echo '<tr>';
while ($tok !== FALSE) {
echo "<td>" . $tok . "</td>";
$tok = strtok(",");
}
echo '</tr>';
}
echo "</tbody></table>\n";
return;
|
|
|