isset関数メモ
POST値の引き取り
PHPでPOST値をチェックするのにisset関数をよく使う。
実際の振る舞いについて確認のメモを残しておく。
ソース
<?php /** * isset関数 * http://php.net/manual/ja/function.isset.php * (PHP 4, PHP 5, PHP 7) * isset — 変数がセットされていること、そして NULL でないことを検査する * 変数が空文字の場合、TRUEであることに注意 * http://php.net/manual/ja/types.comparisons.php */ /** * 変数が宣言されていて、空文字であるのでTRUEになる。 */ $var =''; if(isset($var)) { echo 'TRUE'.'<br />'; } else { echo 'FALSE'.'<br />'; } /** * 変数が宣言されてるのみなので、FALSE */ $x; if(isset($x)) { echo 'TRUE'.'<br />'; } else { echo 'FALSE'.'<br />'; } /** * 変数が宣言されていないので、FALSE */ if(isset($y)) { echo 'TRUE'.'<br />'; } else { echo 'FALSE'.'<br />'; }
preg_matchによる所定の書式の文字の確認
ソース
まだ十分ではないが、書式についてはチェックできる。ただし、2018/33/33とかにもマッチしてしまうので、
その部分は修正が必要。
<?php /** * preg_matchによる日付のチェック * 「2018/12/12 00:00:00」 * $patternで正規表現のパターンを設定 * 「^」、「$」は最初と最後を固定 * \d{4} 西暦の4文字 * ([/-]?) 次の月の区切りとして/もしくは-。ただしなくてもよい。 * \d{1,2} 月の1文字もしくは2文字。 * ([/-]?) 次の日の区切りとして/もしくは-。ただしなくてもよい。 * ¥d{1,2} 日の1文字もしくは2文字 * \s スペース * \d{2}:\d{2}:\d{2} 00:00:00にマッチ。上位の桁の場合も2文字でないとマッチしない。 */ $pattern="#^\d{4}([/-]?)\d{1,2}([/-]?)\d{1,2}\s\d{2}:\d{2}:\d{2}$#"; $str_time='2018/12/22 00:00:00'; if(preg_match($pattern,$str_time,$match)){ print $str_time."は正しい書式です。"."<br>"; }else{ print $str_time."は正しくない書式です。"."<br>"; }
PDOによるテーブルやデータの操作
基本的な操作
すぐ忘れちゃうので書いておく。
<?php /** * PDOによる * 「テーブルの作成」 * 「データの挿入」 * 「データの取得」 * 「データの削除」 * 「データの取得」 * 「テーブルの削除」 * http://php.net/manual/ja/book.pdo.php */ /** * PDOでMySQLに接続するためのパラメータ */ $dsn = 'mysql:dbname=projects;host=localhost'; $user = 'admin'; $password = 'pass'; /** * MySQLに接続 */ try{ $dbh = new PDO($dsn, $user, $password); print('接続に成功しました。<br>'); }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } /** * テーブルの作成 */ $stmt = $dbh->query("CREATE TABLE projects.meibo (id INT,name TEXT)"); /* 結果の取得*/ $results = $stmt->fetchall(); /** * データの挿入 */ $stmt = $dbh->query("INSERT INTO projects.meibo VALUES(1,'名無し1')"); $results = $stmt->fetchall(); /* データの取得 * PDO::FETCH_ASSOC 連想配列で返すフラグみたいなもの */ $stmt = $dbh->query("SELECT * FROM projects.meibo"); $results = $stmt->fetchall(PDO::FETCH_ASSOC); echo '<br />データ挿入後<br />'; var_dump($results); /** * データの削除 */ $stmt = $dbh->query("DELETE FROM projects.meibo WHERE id = 1"); $results = $stmt->fetchall(PDO::FETCH_ASSOC); echo '<br />データ削除後<br />'; var_dump($results); /** * デーブルの削除 */ $stmt = $dbh->query("DROP TABLE projects.meibo"); $results = $stmt->fetchall();
strposによる検索
具体例
<?php /** * http://php.net/manual/ja/function.strpos.php * (PHP 4, PHP 5, PHP 7) * strpos — 文字列内の部分文字列が最初に現れる場所を見つける */ /** * 次の例は検索がひっかかるパターン */ // 検索対象文字列 $text = '文字列の検索'; // 検索文字列 $retrieval = '列'; // $pos = strpos($text,$retrieval); // if($pos !== false) { echo '検索一致'; } else { echo '検索不一致'; }
数値データかどうかのチェック
モチベーション
AWKの場合
プログラム
BEGIN{ FS = ',' } /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)([eE][+-]?[0-9]+)?$/{ print $0; } END{ }
- BEGIN内では、フィールドセパレータ(FS)をカンマに設定している。
概略
- 「^」:最初にマッチ
- 「$」:最後にマッチ
- 「[+-]?」:+もしくは-が付いても付かなくても構わない。
- 最初の小かっこ内は、仮数部に引っかかるようなパターンである。
- 次の小かっこ内は、指数部に引っかかるようなパターンである。ただし、カッコ後に「?」が付いているので、指数部はあってもなくても構わない。
仮数部
- [0-9]+で1コ以上の数値の並び。
- 「[.]?」で小数点があってもなくても構わない。
- [0-9]*でその後の数字が0コ以上。
- 「|」は、または、の意。整数部が0の場合省略可能。
指数部
- 指数部は「[eE]」で表記。プログラムによってはDとかでも出力されるので、[eED]としておけば、「e」もしくは「E」もしくは「D」で引っかかるようにできる。
- 「[+-]?」は指数部のプラスマイナスにマッチする。あってもなくても良い
- 「[0-9]+」は「1.0E-10」の「10」なんかに引っかかる。「+」が付いているので、1コ以上の数字が必要。
- 最後の「?」は、指数部全体にかかるので指数部はあってもなくても構わない。
この表現はPerlでも使える。
- 作者: A.V.エイホ,P.J.ワインバーガー,B.W.カーニハン,足立高徳
- 出版社/メーカー: USP研究所
- 発売日: 2010/01/01
- メディア: 単行本(ソフトカバー)
- クリック: 1回
- この商品を含むブログを見る
表組みのCSSメモ
表組みとCSS
HTML
htmlファイルは次のとおり、linkはCSSファイルのパスを書いておく。
talbleのクラスはCSSファイルを参照。
<!DOCTYPE html> <html> <head> <title>表組み</title> <link rel="stylesheet" href="./css/style.css"> </head> <body> <table class="sample"> <tr> <th>th1</th> <th>th2</th> <th>th3</th> <th>th4</th> </tr> <tr> <td>td1</td> <td>td2</td> <td>td3</td> <td>td4</td> </tr> <tr> <td>td1</td> <td>td2</td> <td>td3</td> <td>td4</td> </tr> <tr> <td>td1</td> <td>td2</td> <td>td3</td> <td>td4</td> </tr> <tr> <td>td1</td> <td>td2</td> <td>td3</td> <td>td4</td> </tr> </table> </body> </html>
CSS
CSSファイルは次のとおり。
コメントは/**/ で行う。
table, th, td { border-collapse: collapse; border: 1px solid #ccc; line-height: 1.5; } /* sampleはhtml側でclassとして指定する*/ table.sample th { width: 150px; padding: 10px; font-weight: bold; vertical-align: top; background: #3f3f3f; color: #ffffff; } table.sample td { width: 350px; padding: 10px; vertical-align: top; } /* 偶数と奇数で切り替える */ tr:nth-child(even) { background: #d9d9d9; }