データベースを使ったサイトを作りたい⑨ ちょこちょっこ変更

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

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

基本的な機能はできたので、思いついたことをやってってみる。

まいにち詰将棋|検索サイト
スポンサーリンク

更新日を記載

require ('config.php');

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

  $sql = "SELECT MAX(date) FROM data";
  $state = $pdo->prepare($sql);
  $state->execute();
  $res = $state->fetch(PDO::FETCH_ASSOC);
  
  $latestday = $res["MAX(date)"];

  $pdo = null;

こんなん書いて、更新日表示するようにした。

スポンサーリンク

metaタグ

スマホで見るとめっちゃ小さい

<meta name="viewport" content="width=device-width,initial-scale=1.0">

これ書いたらある程度の大きさで表示されてくれた。

スマホでよく見るアドレスバーの色が変わるやつ

<meta name="theme-color" content="#864944">

小豆色にした。

chromeで見ると翻訳ダイアログが出るし、元言語が中国語

<meta name="google" content="notranslate">

一応出なくなったっぽい。

スポンサーリンク

tableタグの枠線?罫線?の太さを変える

今までは

<table border="1">

で指定してたけどHTML5じゃ廃止されてCSSで指定するみたい。CSSわかんないからコピペる。headタグ内に書くみたい。

【CSS】table の border (枠線)の太さを指定する
CSS で table(テーブル)の border(ボーダー・枠線)の「太さ」を指定するには border プロパティ、又は border-width プロパティを使用します。border プロパティは「太さ」の他に、「スタイル」や「色」も指定できます。
<style>
    table {
    border-collapse: collapse;
    }
    th {
        border: 1px solid black;
    }
    td {
        border: 1px solid black;
    }
</style>

線1本になった。

スポンサーリンク

ファイルの一覧(Index of /)が丸見えだった

index.htmlを置こうかなと思ったら、index.phpでもいいらしい。更にPHPにはリダイレクトの機能を作ることもできるらしい。.htaccessとかでもできるそうだけどせっかくなのでPHPで書いてみると

<?php
header('Location: https://dalomo.net/shogi/form.php');
exit();
?>

まいにち詰将棋|検索サイト
日本将棋連盟で公開されている「まいにち詰将棋」の検索サイトです。

にアクセスすると

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

に飛ぶ。

スポンサーリンク

作成者の項目をDBから引っ張る

今は項目をベタ書きしてる。これだともし新たに作成者が追加された時に手動で対応しないとそのままになっちゃうなと思ったので、ここも動的に変更できるといいなと思った。で、作成者だけのテーブルを作ってdataテーブルの作成者の列から検索してなかったら追加とか考えたけど、Viewっていうのがあるみたいで、楽そうなのでそっちにする。

MariaDB [shogi]> create view makers as select distinct maker from data;
Query OK, 0 rows affected (0.003 sec)

MariaDB [shogi]> select * from makers;
+-----------------+
| maker           |
+-----------------+
| 内藤國雄        |
| 中村修          |
|                 |
| 藤井聡太        |
| 西村一義        |
略
| 村田智弘        |
| 服部慎一郎      |
+-----------------+
90 rows in set (0.014 sec)

できた。けど順番めちゃくちゃや。order by でソートできるらしい。もっかい

MariaDB [shogi]> create view makers as select distinct maker from data order by maker;
Query OK, 0 rows affected (0.001 sec)

MariaDB [shogi]> select * from makers;
+-----------------+
| maker           |
+-----------------+
|                 |
| 三枚堂達也      |
| 三浦弘行        |
| 上田初美        |
| 上野裕和        |
略
| 飯島栄治        |
| 黒田尭之        |
+-----------------+
90 rows in set (0.015 sec)

ならん。。。ていうか文字コード順なんですねこれ。いつもはエクセルさんに助けられていたわけか…!漢字の読み順にするには、じゃあどうすればいいんだろということで色々試してみる。

cast

MariaDB [shogi]> create view makers_cast as select distinct maker from data orde
r by cast(maker as char);
Query OK, 0 rows affected (0.002 sec)

MariaDB [shogi]> select * from makers_cast;
+-----------------+
| maker           |
+-----------------+
|                 |
| 三枚堂達也      |
| 三浦弘行        |
| 上田初美        |
| 上野裕和        |
略
| 飯島栄治        |
| 黒田尭之        |
+-----------------+
90 rows in set (0.013 sec)

変わらず…

collate

照合順序、というのがあるみたいで、なんか鬼門らしい。mariaDBでcollateに使える照合順序の一覧はどっかにないのかと探したらDB内で表示できるみたい。

ariaDB [shogi]> show collation like 'utf8mb4%';
+------------------------------+---------+------+---------+----------+---------+
| Collation                    | Charset | Id   | Default | Compiled | Sortlen |
+------------------------------+---------+------+---------+----------+---------+
| utf8mb4_general_ci           | utf8mb4 |   45 | Yes     | Yes      |       1 |
| utf8mb4_bin                  | utf8mb4 |   46 |         | Yes      |       1 |
| utf8mb4_unicode_ci           | utf8mb4 |  224 |         | Yes      |       8 |
| utf8mb4_icelandic_ci         | utf8mb4 |  225 |         | Yes      |       8 |
| utf8mb4_latvian_ci           | utf8mb4 |  226 |         | Yes      |       8 |
| utf8mb4_romanian_ci          | utf8mb4 |  227 |         | Yes      |       8 |
| utf8mb4_slovenian_ci         | utf8mb4 |  228 |         | Yes      |       8 |
| utf8mb4_polish_ci            | utf8mb4 |  229 |         | Yes      |       8 |
| utf8mb4_estonian_ci          | utf8mb4 |  230 |         | Yes      |       8 |
| utf8mb4_spanish_ci           | utf8mb4 |  231 |         | Yes      |       8 |
| utf8mb4_swedish_ci           | utf8mb4 |  232 |         | Yes      |       8 |
| utf8mb4_turkish_ci           | utf8mb4 |  233 |         | Yes      |       8 |
| utf8mb4_czech_ci             | utf8mb4 |  234 |         | Yes      |       8 |
| utf8mb4_danish_ci            | utf8mb4 |  235 |         | Yes      |       8 |
| utf8mb4_lithuanian_ci        | utf8mb4 |  236 |         | Yes      |       8 |
| utf8mb4_slovak_ci            | utf8mb4 |  237 |         | Yes      |       8 |
| utf8mb4_spanish2_ci          | utf8mb4 |  238 |         | Yes      |       8 |
| utf8mb4_roman_ci             | utf8mb4 |  239 |         | Yes      |       8 |
| utf8mb4_persian_ci           | utf8mb4 |  240 |         | Yes      |       8 |
| utf8mb4_esperanto_ci         | utf8mb4 |  241 |         | Yes      |       8 |
| utf8mb4_hungarian_ci         | utf8mb4 |  242 |         | Yes      |       8 |
| utf8mb4_sinhala_ci           | utf8mb4 |  243 |         | Yes      |       8 |
| utf8mb4_german2_ci           | utf8mb4 |  244 |         | Yes      |       8 |
| utf8mb4_croatian_mysql561_ci | utf8mb4 |  245 |         | Yes      |       8 |
| utf8mb4_unicode_520_ci       | utf8mb4 |  246 |         | Yes      |       8 |
| utf8mb4_vietnamese_ci        | utf8mb4 |  247 |         | Yes      |       8 |
| utf8mb4_croatian_ci          | utf8mb4 |  608 |         | Yes      |       8 |
| utf8mb4_myanmar_ci           | utf8mb4 |  609 |         | Yes      |       8 |
| utf8mb4_thai_520_w2          | utf8mb4 |  610 |         | Yes      |       4 |
| utf8mb4_general_nopad_ci     | utf8mb4 | 1069 |         | Yes      |       1 |
| utf8mb4_nopad_bin            | utf8mb4 | 1070 |         | Yes      |       1 |
| utf8mb4_unicode_nopad_ci     | utf8mb4 | 1248 |         | Yes      |       8 |
| utf8mb4_unicode_520_nopad_ci | utf8mb4 | 1270 |         | Yes      |       8 |
+------------------------------+---------+------+---------+----------+---------+
33 rows in set (0.001 sec)

utf8mb4_general_ci, utf8mb4_bin, utf8mb4_unicode_ciてのがよく使われるらし。

utf8mb4_bin

MariaDB [shogi]> create view makers_bin as select distinct maker from data order
 by maker collate utf8mb4_bin;
Query OK, 0 rows affected (0.003 sec)

MariaDB [shogi]> select * from makers_bin;
+-----------------+
| maker           |
+-----------------+
|                 |
| 三枚堂達也      |
| 三浦弘行        |
| 上田初美        |
| 上野裕和        |
略
| 飯島栄治        |
| 黒田尭之        |
+-----------------+
90 rows in set (0.014 sec)

む。

utf8mb4_general_ci

MariaDB [shogi]> create view makers_gen as select distinct maker from data order
 by maker collate utf8mb4_general_ci;
Query OK, 0 rows affected (0.004 sec)

MariaDB [shogi]> select * from makers_gen;
+-----------------+
| maker           |
+-----------------+
|                 |
| 三枚堂達也      |
| 三浦弘行        |
| 上田初美        |
| 上野裕和        |
略
| 飯島栄治        |
| 黒田尭之        |
+-----------------+
90 rows in set (0.013 sec)

むむ。

utf8mb4_unicode_ci

MariaDB [shogi]> create view makers_uni as select distinct maker from data order
 by maker collate utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.002 sec)

MariaDB [shogi]> select * from makers_uni;
+-----------------+
| maker           |
+-----------------+
|                 |
| 三枚堂達也      |
| 三浦弘行        |
| 上田初美        |
| 上野裕和        |
略
| 飯島栄治        |
| 黒田尭之        |
+-----------------+
90 rows in set (0.014 sec)

むむむ。全部変わらない…。なんか間違ってんのかな。MySQLの方だと、utf8mb4_ja_0900_as_csとかutf8mb4_ja_0900_as_cs_ksもあるみたいなんだけど、MariaDBにはないから試せない…。

convert

convertで文字コードを変換できるらしい。日本語といえばShift-JISだな!今そう決めた!それに変換してしまえばいいのでは?と思い、将棋棋士の中に名前に絵文字使ったり、ダメ文字使ったりする親を持っていないことを祈りながらやってみる。

MariaDB [shogi]> create view makers_sjis as select distinct maker from data orde
r by convert(maker using sjis) collate sjis_japanese_ci;
Query OK, 0 rows affected (0.002 sec)

MariaDB [shogi]> select * from makers_sjis;
+-----------------+
| maker           |
+-----------------+
|                 |
| 阿部光瑠        |
| 安西勝一        |
| 安用寺孝功      |
| 伊藤果          |
略
| 有森浩三        |
| 脇謙二          |
+-----------------+
90 rows in set (0.013 sec)

おー変わった。音読み順になった。まぁぶっちゃけ振り仮名列を作ってそれをソートするってのが一番ちゃんとソートされるんだろうけど、結局メンテ必要になるだけなのでこれで十分かなー。でもーSJISに変換してるわけで、こっからPHPでDBからこれを引っ張って加工して表示するけど、HTMLのcharsetはutf8だし、てなると文字化けの匂いがプンプンする。UTF8のままであってくれ…!うーん、いきあたりばったりだけどこのまま進んでみて、またぶつかったら対策を考えよう。

コード書く

結果画面の時とほぼ一緒。

// makers
  $sql = "SELECT maker FROM makers_sjis";
  $state = $pdo->prepare($sql);
  $state->execute();
  $res = $state->fetchAll(PDO::FETCH_ASSOC);

  $optmaker = "";
  foreach ($res as $r) {
    $optmaker .= ''.$r["maker"].''."\n";
  }

変数の使い回しはホントはダメ。はい。結果なんかうまく表示されてる。viewとして作ったからSELECTで抽出時は元テーブルからデータ取得するとかなのかな(調べてない)。しかし項目数多いな…名前探すの大変。なんかいい方法ないかな?

とりあえずここまで!

コメント

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