2011-11-09 8 views
-2

助けてください。 私のデータベースから関数内のデータを呼び出していて、それをテーブル形式でユーザに表示したいとします。私はこのような何か見て、私のデータベース内のすべての名前を取得している達成することを目指しています:PHPを使用してデータベースにデータを出力する際に​​問題が発生する

John Peter James Steven 
Jess Syndey Monique Lynda 

しかし、私は取得していますと、この次のとおりです。ここで

John John John John 
Peter Peter Peter Peter 
James James James James 
etc etc etc etc 

は私のコードです:

function public_navigation($sel_subject, $sel_page, $public = true) { 
    $output = "<table border=\"1\">"; 
    $subject_set = get_all_subjects($public); 
    $column_count = mysql_num_fields($subject_set); 
    while ($subject = mysql_fetch_array($subject_set)) { 
    $output .= "<tr>"; 
    for($column_num = 0; $column_num < $column_count; $column_num++) { 
     $output .= "<td><a href=\"index.php?subj=" . urlencode($subject["id"]) . 
       "\">{$subject["menu_name"]}</a></td>"; 
    }   
    } 
    $output .= "</tr></table>"; 
    return $output; 
} 
+0

これは、forループによって引き起こされます。何を反復しようとしていますか? – chchrist

+0

私のウェブサイトにあるデータベースにあるすべての名前を表示しようとしています。 1 2 3 4そして次の行5 6 7 8に移動しますが、私が得ているものはすべて1 1 1 1と次の行2 2 2 2などで何が間違っているかです。 – user1002749

+0

DB内の内容と実際のクエリの内容を示すサンプルコードを追加してください。 –

答えて

0

データベースクエリの問題が発生した場合は、必ずクエリをそのクエリとともに投稿する必要があります。フィールド名などを偽装しても問題ありませんが、詳細を知らないと問題を特定するのは難しいです。

初心者にとっては、あなたがしたくない場合でも名前でソートしているようです。クエリから「ORDER BY [FIELDNAME]」を削除すると、これが解決されます。

第2に、あなたは何かをグループ化しているか、または2重の結果を除外せずに何かに参加しているようです。少なくとも、同じ行が複数回ポップアップするのが最も一般的な問題です。これは、クエリでDISTINCT([FIELDNAME])を使用することで修正できます。

そして、サイドノートで、なぜmysql_query()の代わりにget_all_subjects()とmysql_num_fields()を使用していますか?実際には、次の2つのネストされたループを持って

function public_navigation($sel_subject, $sel_page, $public = true) { 
    $RowCount = 1; 
    $SQL = mysql_query("YOUR QUERY"); 
    while ($Row = mysql_fetch_array($SQL) { 
    $RowHTML = '<td>[CONTENTS OF CELL]</td>'.(($RowCount % 4) ? '</tr><tr>' : ''); 
    $RowCount++; 
    } 

return eregi_replace('<tr></tr>','','<table><tr>'.$output.'</tr></table>'); 
} 
+0

私の側からその愚かなことについて申し訳ありません、あなたの時間と助けてくれてありがとう、それは今動作します。 – user1002749

0

...私は、php.netがそれを持っていないん何get_all_subjects()してもわからないんだけど、それは間違いなく、標準のPHPの関数ではありません、 whileは常に新しい行を読み、forは行があるときと同じくらい頻繁に出力します。 whileの前に

<tr> 

を開き、しばらくしてから閉じます。次に、設定する前に、

$i=0; 

を設定してください。しばらく

は、次の操作を行います。

if ($i%5 == 0) 
{ 
    echo "</tr><tr>"; 
} 
$i++; 

これはそれを行う必要があります。

+0

Floさん、ありがとうございましたコードがついに復活しました – user1002749

1

試してみてください。

function public_navigation ($sel_subject, $sel_page, $public = true, $column_count = 4) { 
    $output = '<table border="1">'; // Start table element 
    $subject_set = get_all_subjects($public); // Get data 
    for ($i = 1; $subject = mysql_fetch_array($subject_set); $i++) { // Loop data witha counter 
    if ($i == 1) { 
     // Start of a new row 
     $output .= '<tr>'; 
    } 
    // Cell for this record 
    $output .= '<td><a href="index.php?subj='.htmlspecialchars(urlencode($subject["id"])).'">'.htmlspecialchars($subject["menu_name"]).'</a></td>'; 
    if ($i >= $column_count) { 
     // End of this row 
     $i = 0; 
     $output .= '</tr>'; 
    } 
    } 
    if ($i > 1 && $i <= $column_count) { 
    // Pad with an empty cell if needed 
    $colspan = ($column_count + 1) - $i; 
    $output .= "<td colspan=\"$colspan\" /></tr>"; 
    } 
    $output .= '</table>'; // End of table 
    return $output; // Return output 
} 
+0

ありがとうございました。 – user1002749

+0

forとの建設は賢いものです、以前はそれを見たことはありませんでしたが、私の内なるものは%の方が好きです – Flo

+0

ねえ、私はもう1つの問題を手伝ってくれます。初心者はこれだけで、あなたはプロです。私はこのリンクに私の問題を掲載(http://stackoverflow.com/questions/8064170/sending-a-variable-in-php-with-a-form-to-the-same-page-but-i-am-エラーを出して)これも私に手伝ってもらえますか? – user1002749

関連する問題