ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP

PHP:empty()で少し悩む

PHP

データベースから値を読み込んで、1だったら会員、0だったら非会員のラジオボタンを設定しようとしました。 必ずデータベースに値があるとは限らなかったので、empty()で判定して、empty()の戻り値がfalseならラジオボタンに設定することにしました。 PHP: e…

PHP:セレクトボックスの選択の重複のチェック方法

セレクトボックスが4個ある画面があります。 4個のセレクトボックスには全て同じ選択肢が設定されています。 同じ選択肢を選ばれていないか、チェックが必要です。 重複を除去して、配列の数が異なっていれば、重複して選択していると判定 if文で1個目の選択…

PHP:配列の最初の要素の削除/最後の要素の削除の方法

PHP

一見すると選択肢がほぼ同じ選択項目が2箇所あります。 2箇所の選択項目の違いは、1個の選択肢の有無だけです。 一方の選択項目の選択肢の最後にある選択肢が、もう一方の選択項目の選択肢にはありません。 それ以外は選択肢は全く一緒です。PHPで選択項目の…

PHP:文字数を数える方法

PHP

帳票出力のために、出力する文字列の長さが全角で20文字を超えたら、強制的に改行をしなければならなくなりました。 文字コードがUTF-8なので、strlen()とmb_strlen()では、全角20文字が正しく数えられません。 PHP: strlen - Manual PHP: mb_strlen - Manua…

PHP:ZipArchiveを利用した際に戸惑った点

PHP

サーバー上のファイルを圧縮するために、ZipArchiveを初めて利用しました。 利用した際、以下の2点に戸惑いました。 アーカイブの作成先のパーミッションが無くてもopenに成功する $zip = new ZipArchive; $res = $zip->open("/home/usr/test/zip/test.zip")…

PHP:必ずフラグがONで更新されてしまう

PHP

昨日の記事に続いて、これまでに見たことがあるバグです。 昨日の記事はこちらです。 ajya.hatenablog.jp あるシステムで、データの更新兼削除の設定ができる画面があります。 データを更新するために入力して、更新ボタンを押すと、削除が勝手に設定されて…

PHP:ロールバックしているはずがロールバックされない

PHP

これまでに見たことがあるバグです。あるシステムで、 入力内容をデータベースに登録処理 決済処理 メール送信処理 という流れで処理をしていました。決済処理でエラーが発生した場合とは、例えばクレジットカード番号が間違っていて決済できなかったときが…

PHP:header()関数で画面遷移させる場合の注意点

PHP

Webシステムのプログラムで、ログインしていない状態なのに、なぜかデータベースの参照を行っていました。 index.phpにアクセスされると、ログインしていなければlogin.phpに遷移するようになっています。 ログインしていれば、login.phpには遷移せず、index…

PHP:小数点以下の切り捨て誤差の対処

PHP

JavaScriptの計算誤差への対処を書きました。 ajya.hatenablog.jpこのとき、同時にPHPの小数点以下の切り捨て誤差の対処もしました。 JavaScriptとは異なる箇所で誤差発生 JavaScriptでは、36.3×700=25,410になるはずのところ、25,409になっていました。 PHP…

CentOS 7.4、PHP 5.6の環境でのPHPExcelのインストール手順

CentOS 7.4、PHP 5.6の環境でPHPExcelを利用したくなったので、インストールしました。 github.com photo credit: Nguyen Vu Hung (vuhung) CentOS 7 64bit 07 via photopin (license)インストール手順こちらのページを参考にして、以下の手順でインストール…

PHP:複数ファイルのアップロードへの対応方法

PHP

ファイルアップロードが複数になった場合、どのようなコードを書けばいいのかわかりづらいので、メモとして書いていきます。 photo credit: FootMassagez Coding a program - Credit to https://costculator.com/- Credit to https://costculator.com/ via p…

PHP:Webページのフォームのラジオボタンが増えた場合に、次のページのコードをなるべく変更しないで済む方法

PHP

Webページにラジオボタンがあり、初期は2個でした。 <form method="POST" action="next.php"> <input type="radio" name="radio1" value="1">Aを希望 <input type="radio" name="radio1" value="2">Bを希望 </form> 「Bを希望」を選ばれた場合だけ処理したいときは、PHPで次のフォームを作成していた場合、 if ($_POST["radio1"] === "2") { // Bの処理 } と書けば処理ができます。この状態に対して選…

PHP:Webページのフォームの複数のラジオボタンの値を、次のページで読み込む方法

PHP

以前、チェックボックスのname属性を配列のようにして、値を取得する方法を書きました。 ajya.hatenablog.jp今回はラジオボタンを配列のようにして、値を取得する方法です。 今回もうろ覚えで作成して、よくわからなくなって、上の記事を読み直していました…

文字コードがShift_JISのページをブラウザで表示すると文字化けする

過去に作られたデータベースにデータを登録するプログラムを、XAMPPをインストールして動作させました。 動作するまでに起きた現象と対処について、以下の記事で書きました。 ajya.hatenablog.jp文字化けが発生するPHPのファイルはShift_JISで作成されていて…

PHP 7.0とApahce 2.4の組み合わせのXAMPPを利用して学んだこと

データベースにデータを登録しなければならず、2年前に利用したプログラムを確認しました。 確認した結果、PHPだけあればいいと思っていところ、ApacheとPHPが動作するWebの環境が必要なことがわかりました。手っ取り早くApacheとPHPが動作する環境を構築す…

PHP:実行時間の制限を確実に回避できるのは?

PHP

PHPの実行時間の制限について書きました。 ajya.hatenablog.jpmax_execution_timeの値を長い時間をにして止まらないのを確認するのも方法ですが、1秒という極端に短い時間にして試してみました。 確かに1秒で終了したので、max_execution_timeの値で制限がで…

PHP:実行時間の制限はどうなっているの?

PHP

以前お客さんのWindows Server環境で、PHPで作ったコマンドラインから起動するプログラムを実行していました。 半年に一度ほどの作業で、時間がかかる処理というのはわかっていました。 処理の状況から1時間半くらいで終了するかと予想して待機していました…

PHP:Webページのフォームの複数のチェックボックスの値を、次のページで読み込む方法

PHP

Webページのフォームに、久しぶりに一から複数のチェックボックスを配置して、次のページで選ばれた複数のチェックボックスの値を読み込もうとしました。 なんとなく覚えていたので作成できましたが、うろ覚えなので記録として残します。 読み込み側のページ…

PHP:TCPDFを使ってHTML形式で出力すると文字がはみ出る現象への対処

先日、TCPDFでHTML形式のデータを指定してPDF出力すると「-」で折り返してしまったので対処をしたことを書きました。 ajya.hatenablog.jpこのとき、別の現象にも気がついていました。 別の現象は、文字列をtableタグのtdタグで囲んで出力すると自動で折り返…

PHP:TCPDFを使ってHTML形式のデータからPDFを生成する際に新たに追加した機能

2年以上前に、TCPDFを使ってHTML形式のデータからPDFを生成する際に追加した機能のことを書きました。 ajya.hatenablog.jpこの機能を使ったシステムを2年以上ぶりで使用することになりました。 動作確認のテストしていると、文章上の「-」の位置によっては、…

PHP:正規表現を少しだけ学びました

PHP

2年以上前に作成したシステムをベースに、一部修正して再利用することになりました。 ソースコードを確認すると、テストサイトで利用する場合は、テスト用のデータベースへの接続文字列を手作業で有効にしていました。 本番サイトで利用する場合は、本番用の…

PHP:POSTでデータを渡すためにcURL関数を使ってみました

PHP

入力された内容を画面遷移を行わず、POSTで渡すためにPEARになかったかなと探していたときに、cURL関数でもできることに気がつきました。 PHP: cURL 関数 - Manualインストールされただけの状態ではモジュールが組み込まれていないかもしれませんので、利用…

PHP:文字列のバイト数で処理を分ける方法(2)

PHP

より短いコードにする方法がありました。 photo credit: Elephpant needs a drink via photopin (license)以前、文字列のバイト数で処理を分ける方法として、Shift-JISに変換してから判定する方法を書きました。PHP:文字列のバイト数で処理を分ける方法 - …

PHP:文字列のバイト数で処理を分ける方法

PHP

文字コード変換をしてバイト数を判定しました。 photo credit: via photopin (license)文字列が特定のバイト数を超えた場合、処理を切り分けたくて以下のようなコードを作成しました。 $work= "12あいうえおかきくけこさしすせそたちつてと漢字混合"; $workS…

PHPExcel を使わず、Excelファイルを出力

PHPの環境なら、PHPExcelを使えば簡単にexcelファイルを出力できます。 PHPExcelを使わず、HTTPヘッダを一部変更すれば、Excelファイルを出力できると聞いたので、試してみました。 photo credit: Collin Anderson via photopin cc方法HTTPヘッダとして、 he…

SQL Server:データを挿入した後の、自動でカウントアップされた値の取得方法

以前出来ていたと記憶している方法とは違う方法で出来ました。 記憶していた方法PHPでSQL Serverのテーブルにデータを挿入して、自動でカウントアップされるカラムの、カウントアップされた値を取得する方法は、 INSERT INTO table1(column1) VALUES ('abc')…

PHP:PHP 5.3以降でMicrosoft提供のSQL Server用のドライバを利用する際の注意点

Microsoft SQL Server 2012 Native Clientが必要なことはちゃんと読めばわかる内容ですが、読まずに思い込みで設定していて悩みました。 Windwos Server 2008 R2 + SQL Server 2008 + IIS 7.5 + PHP 5.3 という環境を構築しなければならなくなりました。 PHP…

入力が消えているはずなのに消えたと判断できなかった現象

PHP

セッション変数が中途半端に残っていたら発生するのかもしれません。現象ユーザー情報登録システムで、ユーザー情報がまったくない状態で登録が完了する現象が発生しました。推定原因入力された値は、post形式で入力内容確認画面に渡され、入力内容確認画面…

再読み込みボタンを押されたときにPOSTメソッドを再処理させない方法

POSTメソッドで渡された値を使って登録処理を行う画面で、処理が終わった後にブラウザの再読み込みボタンを押されると、同一処理が繰り返されて、2重登録が発生しました。 開発中のデータベースへの反映やメール送信の動作確認をするには便利ですが、本番で…

suPHPの環境で、php_valueによるphp.iniの設定を変更ができない場合の対処

今まで使えていた方法が使えないと、解決できるのかと焦ります。今までの方法が使えない.htaccessファイルに php_value include_path '.:/usr/local/share/pear:/usr/home/www/public_html/test" と書いてWebサーバーにアップロードして動作確認したところ、…