データベースを使ったサイトを作りたい⑤ フォームと結果画面

スポンサーリンク
スポンサーリンク

フォームと結果の画面

フォームと検索画面を作りたい。多分この2つさえあれば体裁は整うはず。もうちょっと詰めてみる。

スポンサーリンク

こんな感じになるといいな

絵を描く。

フォーム画面

検索条件を指定する画面。日付は始まりが2017年4月1日なのでそれより前の日付入れられないようにしたい。全期間を検索できるようにして負荷とか大丈夫なのかな。経験がないからよく分かんない。製作者はDBに入ってる製作者をまとめて、ドロップダウンで指定できるようにしたい…けどとりあえずは手作業で製作者のリスト作って選択できるようにしたい。ゆくゆくはここも自動でリストを作成できるようになればいいな。手数は見た感じ3,5,7,11手詰めしかなさ気なのでそれだけ選択できればいいかな。製作者と手数は空白もあり得るからそれにも対応したい。。。日付は必須のほうがいいのかな…?んー、理想は何も指定がない時は検索できないようにして、なにかしらの指定があったらそれに合わせるみたいなのがいいんだけど、そこまでできるかちょっと微妙なので、できれば、やれたら、おいおい、かな。

結果画面

ほんとは、フォーム画面の下に結果を表示させて、一画面で完結する方が格好良いかなぁって思うんだけどそこまで自分にできるかは分からない、ていうか想像ができない。だからPHPのチュートリアルでやったみたいな、ボタンを押したら違うphpファイルを呼び出して、そっちで表示する、みたいなのが、一回やってるし想像しやすかったのでそんな感じにしたい、したいっていうかこれならできそうっていうか。検索結果の件数を表示して、その下に結果をテーブルで表示できればいいかなぁ。もっと言うとテーブルヘッダをクリックすると昇順・降順にソートしてくれるみたいな機能もほしい。でもそこまではまだ望まない。ていうかやり方分からんちんだし。まずは基本というか、最低限の基礎になるものを作ってみたい。

スポンサーリンク

フォーム画面

なんかHTMLタグ含むコードがうまく貼れない。いいや。

まいにち詰将棋|検索サイト

こんな感じになった。一発result.phpを作って、POSTデータを受けてみる。

<?php
echo $_POST['date-from'];
echo $_POST['date-to'];
echo $_POST['maker'];
echo $_POST['steps'];
?>

結果。

いいのでは。じゃあresult.phpの方を作っていく。

スポンサーリンク

結果画面

やっぱしなんかHTMLのタグを含むコードが上手く貼れないのでPHPの部分だけ。

<?php
require ('config.php');

  try {
    $pdo = new PDO($dsn, $user, $password);
  } catch (PDOException $ext) {
  }

  $countsql = <<< EOD
              SELECT COUNT(*) FROM data
              WHERE date BETWEEN :date_from AND :date_to  
  EOD;

$df = htmlspecialchars($_POST['date-from'], ENT_QUOTES|ENT_HTML5, "UTF-8");
$dt = htmlspecialchars($_POST['date-to'], ENT_QUOTES|ENT_HTML5, "UTF-8");
$maker = htmlspecialchars($_POST['maker'], ENT_QUOTES|ENT_HTML5, "UTF-8");
$steps = htmlspecialchars($_POST['steps'], ENT_QUOTES|ENT_HTML5, "UTF-8");

if($maker <> ""){
  $countsql .= " AND maker = :maker";
}

if($steps <> ""){
  $countsql .= " AND steps = :steps";
}

$state = $pdo->prepare($countsql);
$state->bindValue(':date_from',$df);
$state->bindValue(':date_to',$dt);

if($maker <> ""){
  $state->bindValue(':maker',$maker);
}

if($steps <> ""){
  $state->bindValue(':steps',$steps);
}

$state->execute();
$res = $state->fetchAll(PDO::FETCH_ASSOC);

$num = $res[0]["COUNT(*)"];

$sql = str_replace("COUNT(*)","*",$countsql);

$state = $pdo->prepare($sql);
$state->bindValue(':date_from',$df);
$state->bindValue(':date_to',$dt);

if($maker <> ""){
  $state->bindValue(':maker',$maker);
}

if($steps <> ""){
  $state->bindValue(':steps',$steps);
}

$state->execute();
$res = $state->fetchAll(PDO::FETCH_ASSOC);

$pdo = null;
?>
<?php
$restbl = "";
      
      foreach ($res as $r) {
        $restbl .= "";
        $restbl .= "".$r["date"]."";
        $restbl .= "".$r["maker"]."";
        $restbl .= "".$r["steps"]."";
        $restbl .= "'.$r["url"]."";
        $restbl .= "";
      }

      $restbl .= "";

      echo $restbl
?>

えっと、まー汚いコードだ…。同じような処理繰り返してるし、良くはないと思う。。。まぁそれでも初めて形にしたのだし頑張ったからいいよね。フォームからのPOSTで送られたデータをhtmlspecialcharsで受けて、入力内容によってSQL文の組み立てを変えて、COUNTで件数取って、結果も取って、それを基に<table>の内容を作ってく。

ちゃんと表示されてるよ~!!すごい嬉しい、やっとなんかちゃんと形になった。とりあえず基本の形はできたよ!次はデータの自動更新をやりたいなぁ。

まいにち詰将棋|検索サイト

コメント

タイトルとURLをコピーしました