2012-04-01 7 views
5

私はphp/mysqlの設定で表示されるようにクエリをHTMLテーブルに入れて奇妙な問題を抱えています。クエリは常に表示されるよりも1つ多くの結果を生成します。たとえば、1組の結果が返された場合、表には何も表示されません。 5つがある場合、4つだけが表示されます。私は、クエリに基づいてテーブルを生成するために事前定義された関数を使って同じクエリを試してみました。そして正しい数の結果を持つ正しいテーブルを生成しました。ここでは例として(インデントのための謝罪、またはその欠如)である:htmlテーブルの問題へのPHP/MySQLのクエリ

$user_id = implode($_SESSION['user_id']); 
$query = "SELECT name, address 
    FROM user 
    WHERE user_id = '$user_id' 
    ORDER BY date_added DESC"; 
$result = mysql_query($query) or die ("query failed: " . mysql_error());   

echo "<table border='1' style=\"border-collapse: collapse;\"> 
<tr style=\"background-color: #000066; color: #FFFFFF;\"> 
<th>Name</th> 
<th>Address</th> 
</tr>"; 

$rowCt = 0; // Row counter 
while($row = mysql_fetch_array($result)) 
    { 
    if($rowCt++ % 2 == 0) $Style = "background-color: #00CCCC;"; 
    else $Style = "background-color: #0099CC;"; 
    echo "<tr style=\"$Style\">"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['address'] . "</td>"; 
    echo "</tr>"; 
    } 
    echo "</table>"; 

なぜこれが起こっているすべてのアイデア?どんな助けでも大いに感謝されるでしょう、私は夢中になってきて、私が上に行く前にそれを理解する必要があります!ありがとう。

EDIT

その番号が正しいこと、および表が正しいサイズである、しかし最後の結果は常に空であるように私は、行の量をループにわずかに変更されました。何か案は?

$rowCt = 0; // Row counter 
    $i = 0; 
    echo mysql_num_rows($result). ' number of rows'; 
    $num = mysql_num_rows($result); 
    //while($row = mysql_fetch_array($result)) 
    while ($i < $num) 
    { 

    $row = mysql_fetch_array($result); 

    if($rowCt++ % 2 == 0) $Style = "background-color: #00CCCC;"; 
    else $Style = "background-color: #0099CC;"; 
    echo "<tr style=\"$Style\">"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['address'] . "</td>"; 
    echo "</tr>"; 
    $i++; 

    } 
    echo "</table>"; 

おかげ

+1

echo mysql_num_rows($ result);期待する行数を返すようにしてください。 – Tom

+1

'implode($ _ SESSION [' user_id '])'で何をしようとしていますか? – mshsayem

+0

あなたのコードに間違いはありません。あなただけでは、あなたはifとelseを持っていて、コメントアウトして何が起こっているか見てみると、予期せぬことが起こる可能性があります。また、phpmyadmin(インストールされている場合)で直接$クエリを実行し、返されたデータセットを確認して返されたデータを確認することをお勧めします。 – ArendE

答えて

0

は、ページ上のDOCTYPEを宣言したことがありますか?これは私が考えることができる唯一のものです。コードが正しいように見えます。

注:!DOCTYPEを指定しないと、border-collapseプロパティは予期しない結果をもたらす可能性があります。

http://www.w3schools.com/cssref/pr_tab_border-collapse.asp

また、あなたは右のオン警告/エラーを持っていますか?最後の行に何らかのエラーがあり、それが表示されないことがあります。

+0

こんにちは、返信いただきありがとうございます。 doctypeが宣言され、その領域に関連するエラーはありません。返されたものの数を数えるためにそれを取得したとしても、実際にそこにあるものよりも1つ少なく表示されます!他のアイデア? –

0

ではなくmysql_fetch_array

0

mysql_fetch_assocを使用してみてくださいwhileループであなたの$ iと$ num個を確認してください。

while($i <= $num){ 
// Your code 
} 
0

これを試してみてください:私はあなたの中にあるべきだと思う

<?php 
$user_id = $_SESSION['user_id']; 
$query = mysql_query("SELECT * FROM `user` WHERE `user_id`='$user_id' ORDER BY `date_added` DESC")or die(mysql_error()); 
?> 
<table border="1" style="border-collapse: collapse;"> 
<tr style="background-color: #000066; color: #FFFFFF;"> 
<th>Name</th> 
<th>Address</th> 
</tr> 
<? 
$colour2 = "transparent"; 
$colour1 = "#0099CC"; 
$row_count = 0; 
while($row = mysql_fetch_array($query)){ 
$rowcolor = ($row_count % 2) ? $colour1 : $colour2; 
?> 
<tr style="background: <? echo $rowcolor; ?>;"> 
<td><? echo $row['name']; ?></td> 
<td><? echo $row['address']; ?></td> 
</tr> 
<? 
$row_count++; 
} 
?> 
</table> 
0

は、テーブルなしで出力を試してみましたか? ie

echo $row['name']." - ".$row['address']."<br />"; 

同じ結果が得られた場合は、phpMyAdminでそのクエリを適用して結果を確認していますか?最後のレコードがDB内で空である可能性がありますので、コードには何も表示されません。

0

whileループではなくforループを使用してみてください。行がそれらを取り出し、しようとしたよう

for($i=0;$i<=mysql_num_rows;$i++) 
{ 
    $row = mysql_fetch_array($query); 
    ... 
    ... 
} 
0

は、おそらくそれは

<th>Name</th> 
<th>Address</th> 

をカウントしています。

1

試してみてください.........

<style> 
#s { 
background-color: #000066; 
color: #FFFFFF; 
} 
#s1 { 
background-color: #0CC; 
} 
#s2 { 
background-color: #09C; 
} 
</style>  
<?php 
$user_id = implode($_SESSION['user_id']); 
$result = mysql_query("SELECT name, address FROM user WHERE user_id = '$user_id' ORDER BY date_added DESC", $your_connection) or die ("query failed: " . mysql_error());   
?> 
<table border="1" style="border-collapse:collapse;"> 
<tr id="s"> 
<th>Name</th> 
<th>Address</th> 
</tr> 
<?php 
$rowCt = 0; // Row counter 
while($row = mysql_fetch_assoc($result)) 
    { 
    if($rowCt++ % 2 == 0): 
    $Style = "s1"; 
    else: 
    $Style = "s2"; 
    endif; 
    ?> 
    <tr id="<?php echo $Style; ?>"> 
    <td><?php $row['name']; ?></td> 
    <td><?php $row['address']; ?></td> 
    </tr> 
    <?php } ?> 
    </table>