タイトルが示すように、私の目的は、MySQL データベースのデータを使用して HTML テーブルを作成することです。
一連のセルを手動で作成したため、使用している一般的な方法は適切ですが、多数のフィールドを含めるようにスケーリングしようとしているため、PHP と foreach ループを使用してセルの HTML を作成しようとしています。配列で。私の問題にコンテキストを与え、同様の状況にある人々に一般的な支援を提供するために、作業のコンテキストと手順を書き留めました。ただし、私が抱えている問題は、具体的にはコードの 1 つのセクションにあることはわかっています。そのセクションにスキップする場合は、以下に明確に示します。
ステップ 1 では、フィールドに含めるタイトルと MySQL データベースの列名の配列を定義します。
$titles = array('Name', 'Age', 'Height', 'Weight');
$headers = array('q1', 'q2', 'q3', 'q4');
ステップ 2: データベースに接続します (以前に定義した $username と $password):
try {
$pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password);
$pdo->exec("SET CHARACTER SET utf8");
ステップ 3: いくつかの連結を介して SQL ステートメントを作成し、$result をフェッチします。
$sql ="SELECT";
foreach(array_combine($headers, $titles) as $header => $title) {
$sql .= "`$header` AS `$title`,";
}
$sql .= "`q5` AS `Eye Color`";
$sql .= "FROM samdata.CO_data";
$result = $pdo->query($sql);
ステップ 4: 静的 HTML と上記の SQL クエリの結果を連結して $html_table を作成する
if($result !== false) {
$html_table = '<table><tr>';
foreach($titles as $title) {
$html_table .= "<th> $title </th>";
}
$html_table .='</tr> <tr>';
//*********PROBLEM SECTION BELOW **************************
foreach(array_combine($result, $titles) as $row => $title) {
$html_table .= "<td>' .$row\['$title'\]. '</td>";
}
}
//*********PROBLEM SECTION ABOVE **************************
$html_table .= '</tr> </table>';
$conn = null;
echo $html_table;
}
他のすべての部分をテストしたため、問題が示されたセクションにあることはわかっています。たとえば、配列/ foreachループを組み合わせる代わりに手動で書き出す場合:
foreach($result as $row) {
$html_table .= '
<tr>
<td>' .$row['Names']. '</td>
<td>' .$row['Age']. '</td>
<td>' .$row['Height']. '</td>
</tr>';
}
ループの代わりに、それは正常に動作し、それらの見出しの各結果のデータを表示します。問題は、私が何百もの見出しを持っていて、それらをすべて 1 つずつ書き出すよりもエレガントに (そして怠惰に) したいということです!
どこが間違っていますか?ご協力いただきありがとうございます。