Category: PHP+MySQL

  • PHP の DateTime で月初と月末の取得

    検索すると date と strtotime の組み合わせでの記事が多いので、DateTime の記述例を記載。 可能であれば と記述したいところだけど「今日」が月末になったとき、おかしな動きをするのではないかと懸念がありまして。ただ、検証はしていません。 [mokurenCB]

  • PHP でのスマホ判定

    タブレットの普及や新しい OS の誕生など時代の流れにあわせないと・・・。 [mokurenCB]

  • SplFileObject で Shift_JIS の CSVファイルを読み込む

    PHP で CSVファイルといえば、fopen() で指定して fgetcsv() でデータを取得する方法がすぐに頭に浮かび、検索してもその方法が多くヒットされます。で、途中に改行が含まれる CSVファイルを取り扱う場合は・・・。お断りしたいくらいです。 そんな思いに反して「途中に改行が含まれる CSVファイル(Shift_JIS)をPHP(UTF-8)でデータベース(utf8)に保存」というステキなご要望があり、奮闘した記録をここに載せようかと。 SplFileObject 冒頭にも記載した通り、PHP で CSVファイルといえば、fgetcsv() ばかりなのですが、そんな中、見つけたのが「SplFileObject クラス」。そうです。オブジェクト指向です! 5.1 から! 知りませんでした。(^^; 早速、様々なサンプルを拝見し、次のように組んでみました。 上のスクリプトで、ほとんどは意図した通りに動きました。「ほとんど」・・・です。 希に隣り合う項目が結合されることが見受けられます。 具体的には、「”試験”,”動作”,”042-812-7728″,”神奈川県”」が正しいところ「”試験”,”動作”,042-812-7728″”,”神奈川県”」となり「”動作”,042-812-7728″”」が1つのデータと認識されてしまうことがあります。 原因は、Shift_JIS ローカルでCSVファイルを UTF-8 で保存し、上のスクリプトで mb_convert_encoding を外して動作チェックを行ったところ、全て意図した通りに動きましたので、原因は文字コードの変換部分。しかも、上記の現象ですから、疑うのは1~2行目の部分。PHP が UTF-8 で CSVファイルが Shift_JIS なのだから、無理があるのは当然かと。 対応策 はじめに一時保存用のファイルを作成し、サーバーにアップ。適切なパーミッションに設定。 csvファイルを file_get_contents で読み込み、文字コードを変換。その後、一時保存用のファイルに保存。 一時保存用のファイルで上のスクリプトを実行させる。 一時保存用のファイルの中身を空にする。 Excel や Access からの CSVファイルは、UTF-8 にして欲しいと思うこの頃です。 [mokurenCB]

  • お問い合わせフォームを WordPress のプラグインとして制作

    当オフィスの既存のお問い合わせフォームの仕様と同じく WordPress のプラグインとしてお問い合わせフォームを制作しました。 お問い合わせフォーム for WordPress 入力項目毎に正規表現による入力内容のチェックを実施するなどで汎用性がないことから、WordPress の公式ディレクトリへの登録は実施しない予定です。 当お問い合わせフォームは、同じ URL で「入力」→「確認」→「送信」の流れになっています。また、フォームに入力されたデータは、指定のメールアドレス宛にメールを送信するだけです。データベースへの保存は行っておりません。 WordPress でお問い合わせや資料請求などのフォームでこだわったものをお探しの際は、当オフィスまでお気軽にご相談ください。 [mokurenCB]

  • DateTime で 0000-00-00

    PHP で日時を取り扱う場合、DateTime を使用するわけですが、日付の入力必須や登録して当然のシステムを多く携わっていたためか、入力が任意のケースにあたってしまい戸惑ったので忘れないようここに載せます。 調べるとすぐに見つけることができるのですが、MySQL にありがちな ‘0000-00-00’ および ‘0000-00-00 00:00:00’ の場合、DateTime を使うと format( ‘Y-m-d’ ) で ‘-0001-11-30’ が出力されます。エラーや空白などではないのですよね。 ‘-0001-11-30′ が画面に表示されては困りますので、’0000-00-00’ および ‘0000-00-00 00:00:00’ は、if文で分岐させた処理が必要になります。 [mokurenCB]