2017-12-10 15 views
-1

要するに、私が先週実施したことは、SQLテーブルからデータを取り出してHTMLテーブルの特定の列に挿入することです。それは完了しました、私は知っている、私はフォーラム、マニュアル、ビデオの束を拾ってきましたが、私の問題に答えるものは何も見つかりませんでした。私が何をしたいかSQLデータベースからHTMLテーブルへのヘッダーとデータのインポート

は、下記のような表を作成することです:

html table

簡単な説明がある:彼らは約束を作りたいときに、ユーザは、日付を入力します。 SQLテーブルは、選択日の3日前と3日後(この場合、ユーザは12月6〜17日に水曜日を選択)に加えて、ユーザが選択した日付の両方を取得します。ヘッダーは曜日を表し、下のタイムスロットはその日に予約可能な利用可能なタイムスロットを表します(これは17:00までになります)。タイムスロットが利用可能でない場合、そのタイムスロットはそこに表示されるべきではなく、次に利用可能なタイムスロットに置き換えられるべきである。

これは(非機能)PHPコードである:

<?php 
 
require 'connection.php'; 
 
$conn = Connect(); 
 

 
$sql1 = 'SELECT DATE_b FROM daysofweek'; 
 
$query1 = mysqli_query($conn,$sql1); 
 

 
$sql2 = 'SELECT TIME FROM daysofweek'; 
 
$query2 = mysqli_query($conn, $sql2); 
 
?> 
 

 
<table class="bookAppointment"> 
 
    <thead> 
 
     <?php 
 
     while ($row = mysqli_fetch_array($query1)) { 
 
     echo '<tr> 
 
       <th>'.date('D, M d-y',strtotime($row['DATE_b'])).'</th> 
 
       </tr>'; 
 
     } 
 
     ?> 
 
    </thead> 
 
     <?php 
 
     while ($row = mysqli_fetch_array($query2)){ 
 
     echo '<tr> 
 
       <td>'.$row['TIME'].'</td> 
 
       </tr>'; 
 
     } 
 
     ?> 
 
    </table>

その結果が上下各ヘッダーはプリント(別未満の)ことであると私は印刷にヘッダを希望水平に

ほとんどの場合、他のリソースでカバーされているのは、SQLヘッダーではなくSQLヘッダーのようにテーブルヘッダーを修正する必要があることです。ただし、この場合、各日付に属するタイムスロットに加えて、これらのヘッダーもデータベースから取得する必要があります。

この点に関するお手伝いをさせていただきます。たとえPHPコードを作ることができるか、またはこれがデータベース設計の問題であるかどうかについて、私がもっと読むことができる方向に私を指し示しているだけです。

ありがとうございます!

+0

を生成し、 を削除してwhileループの外に置くか、テーブルの最後のIDを確認して、コードをもっときれいにするためにforループを作成してください。 –

答えて

0

問題は単純に、あなたのwhileループでは、列に加えて行をループしていることです。ループが実行されるたびに、新しい行が作成されます。あなたが現在持っている

while ($row = mysqli_fetch_array($query1)) { 
    echo '<tr> 
      <th>'.date('D, M d-y',strtotime($row['DATE_b'])).'</th> 
      </tr>'; 
} 

出力する:

<tr> 
    <th>One</th> 
</tr> 
<tr> 
    <th>Two</th> 
</tr> 

をすべて同じ行にヘッダーセルを持つために、あなたは、単にあなたの外<tr>のごechoを持参する必要がありますwhileループ:

echo '<tr>'; 
while ($row = mysqli_fetch_array($query1)) { 
    echo '<th>'.date('D, M d-y',strtotime($row['DATE_b'])).'</th>'; 
} 
echo '</tr>'; 

結果は:

<tr> 
    <th>One</th> 
    <th>Two</th> 
</tr> 

これは役に立ちます。 :)

+0

ありがとう@Obsidian時代の説明違う。それは本当に便利です!私は今すぐ自分のコードを修正することができました。再度、感謝します! – spoons

0

あなたのオリジナルコードが記載された直接的な回答ではありませんが、以下は、あなたがどのようにして目標を達成できるかを明確にしてください。配列$rsdates$rstimesは、データベースを照会し、それぞれのレコードセットを反復処理によって取られるだろう。このコードでは

- 回、実際には、すべてのデータベースから引き出される必要がない - あなたが示すように rangeを使用することができます。表のセルにIDを割り当てることにより

$html=array(); 
$rsdates=array('Mon','Tues','Wed','Thurs','Fri'); 
$rstimes=range(09.00, 17.00, 0.5); 


$html[]="<table border=1 width='100%' cellpadding='1rem' cellspacing='1rem'>"; 
$html[]="<tr>"; 
foreach($rsdates as $date){ 
    $html[]="<th>$date</th>"; 
} 
$html[]="</tr>"; 

foreach($rstimes as $i => $time){ 
    $html[]="<tr>"; 
    foreach($rsdates as $index => $header){ 
     if(is_float($time)){ 
      list($hour, $min)=explode('.', strval($time)); 
      if($min==5) $min=30; 
     } 
     $html[]="<td id='day_{$index}_time_{$i}'>".date('H.i',mktime($hour, $min, 0, 1, 1, date('Y')))."</td>"; 
    } 
    $html[]="</tr>"; 
} 

$html[]="</table>"; 


echo implode(PHP_EOL, $html); 

あなたはまた、日/時間がクリックされたかを識別することができるはずである(いくつかのJavaScriptの相互作用を仮定して)

これは、次のHTMLテーブル enter image description here

+0

ありがとう@RamRaider。これは本当に良い解決策であり、PHPをよりよく理解するのに役立ちます! – spoons

+0

良い - それが助けてうれしい。私はおそらくあなたがデータベースからこのテーブルにデータを追加したいと思いますか? – RamRaider

関連する問題