質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20782questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9255questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • MySQL

    5995questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

DBに登録されているデータの抽出と表示に関して

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 972

Z-TALBO

score 481

やりたい事、ここまではやった事

[insert]
1.画面に名前を選択するセレクトボックスと、送信ボタンがある

2.名前を選択して、送信ボタンを押す

3.DBに登録される

<form action="" method="post">
<select name="staff_id">
 <option></option>
 <?php
  // DBに接続
  $stmt = $dbh->prepare(
   "SELECT staff_id, name FROM staff_master");
  $stmt->execute();
  while ($row = $stmt->fetch()) :
   $id = $row['staff_id'];
   $name = $row['name'];
 ?>
 <option value="<?= $id; ?>"><?= $name; ?></option>
 <?php endwhile; ?>
</select>
<input type="submit" name="insert" id="insert" value="登録">
</form>
if (isset($_POST['insert')) {
 $staff_id = $_POST['staff_id'];
 if ($staff_id === "") {
  $errorMessage = "×";
 }
 if (!empty($staff_id)) {
  $stamp = "○";
  // DB接続
  $stmt = $dbh->prepare(
   "INSERT INTO timestamp (staff_id, stamp, timedate) VALUES (?, ?, now())");
  $stmt->bindParam(1, $staff_id, PDO::PARAM_STR);
  $stmt->bindParam(2, $stamp, PDO::PARAM_STR);
  $stmt->execute();


[serch]
1.年と月をそれぞれセレクトボックスで選択し、名前もセレクトボックスで選択して検索ボタンを押す
※名前に関しては全員分と個別を選べるようにしておく

<form action="" method="post">
 <select name="year">
  // 省略
 </select>
 <select name="month">
  // 省略
 </select>
 <select name="staff_id">
  <option></option> // いきなり誰かの名前が出ていないように
  <option value="all">全員</option> // 全員分を出すように
  // insertでのstaff_id抽出と同様
 </select>
 <input type="submit" id="serch" name="serch" value="検索">
</form>
if (isset($_POST['serch'])) {
 $staff_id = $_POST['staff_id'];
 if ($staff_id === "") {
  // 選択されてなかったらエラーメッセージ
 }
 if ($staff_id === "all") {
  // allだったら、全員分select
  "SELECT name, timestamp.id, stamp, timedate FROM staff_master INNER JOIN timestamp ON staff_master.staff_id = timestamp.staff_id"
 }
 if ($staff_id != "all") {
  // allではなかったら、選択された人をselect
  "SELECT name, timestamp.id, stamp, timedate FROM staff_master INNER JOIN timestamp ON staff_master.staff_id = timestamp.staff_id WHERE staff_id = ?"
 }


大分省略してしまいましたが、書き方はすごく初心者の書き方です。
PDOで接続したりしています。

ここからの表示部分に関してアドバイスください。

[date_list]
上記の検索フォームからデータをとりあえず取得し、表示できるようにしたのが、、

while ($row = $stmt->fetch()) :
 $id = $row['id'];
 $name = $row['name'];
 $stamp = $row['stamp'];
 $timedate = $row['timedate'];
 list ($year, $month, $day, $hour, $minutes, $second) = preg_split('/[-: ]/', $timedate);
?>


として、表示させることはできます。
この表示方法ですが、、、、、
例えば、データとして
2016年4月のテストさんのデータを検索したとします。

// idは表示させませんが、編集など用に取得しただけです。
名前, 日, スタンプ
テスト, 3, ○
テスト, 4, ○
テスト, 7, ○
テスト, 9, ○
テスト, 11, ○


上記のようにデータを取得したとします。
これを、下記のような感じにしようと思ったら、まずどのようなことをしないといけないでしょうか?

[やりたい表示]
縦に日付の場合
  テスト  テスト2 // 全員表示なら横に増えていく
1
2
345
6

横に日付の場合
     1  2  3  4  5  6
テスト       ○  ○
テスト2
// 全員表示なら縦に増えていく


※実際は表示さえできていれば問題はないのですが、、、できればこういう見た目の表示ができるようになればと思います。

※他に必要な情報等あればご指摘ください。

※質問内容が不適切な場合はご指摘ください。

※質問の文章が猥雑になってしまい大変申し訳ございません。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

必要なデータが揃っているようなので表示部分だけですね。

以下の例はかなり非効率です。要件は満たしていると思うので、できたら改良してみて下さい。

  1. 表示したい日付分をfor文で回します
  2. 1の中で"テスト"さんのデータをforeachで回します
  3. 1の日付と2の日付が一致したら"○"を表示します。一致しなかったら空欄にします。
  4. 2~3を人数分やります

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/22 11:58

    解答ありがとうございます。
    確かに、ちょっとコードしては動くけど、、、な感じですね。

    しかし、動作的な部分は参考になりました!

    キャンセル

関連した質問

同じタグがついた質問を見る

  • PHP

    20782questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9255questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • MySQL

    5995questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。