【PHP】mysqliのプリペアドステートメント記述(SQLインジェクション対策)

2023-06-03

PHPでのSQLインジェクション対策ならプリペアドステートメントが有名です。 (プリペアド・ステートメントは静的プレースホルダ、バインド機構と呼ぶ場合もあるようです) PDO派ではなく、mysqli派の方へ向けたプリペアドステートメントの記述方法の紹介です。 コードを見ればなんとなく分かると思います。 prepare関数にて「?」を仕掛けた数だけ、bind_param関数の引数の数に関係します。 <削除 DELETE> phpStart $id = htmlspecialchars($_POST["id"]); $stmt = $mysqli->prepare("D...

RSSを自作PHPで作る為の日付をpubDateに逆変換する自作関数

2022-01-16

pubDateは独特でやっかいな表記型で扱いにくい。 <rss2.0 pubDateの書式> Sun, 16 Jan 2022 01:54:00 +0000 pubDateを通常の日時表記にする方法はネットに多く転がっているけど、逆はありませんでしたので、 特定の日付(日付指定)で通常の日時型(2022/01/16 00:00:00)をpubDateの書式に変換する関数を作成しました。 たかが日時表記の変換なので難易度が低いですが、pubDateは地味に面倒な書式です。 RSSを自力で作成する人はほとんどいないと思うので、マニアックな事象なのですが。 当ブログはブ...

【PHP】第何週目の何曜日は何日?を最短で算出する方法

2020-10-23

PHPのstrtotime関数は非常に便利で、カレンダーを使用した予約システムなどで活躍してくれます。 今回は、月毎に第一週目の水曜日、第二週目の水曜日は何日かを求める最短の方法をご紹介。 phpStart $y = 2020; //任意 $m = 10; //任意 $jd = cal_to_jd(CAL_GREGORIAN, $m, 1, $y); $month_name = jdmonthname($jd, 1); $first_wed_day = date("j", strtotime("first Wednesday of {$month_name} {$y}")...

jQuery(javascript)複数ファイルのアップロード時に容量オーバーの場合はアラートを出す

2019-08-21

2019年現在では、iPhoneとAndroidともにinputタグのfile属性が使えるようになっています\(^o^)/ 前までは、画像をアップするだけなのに、面倒なアプリ開発をしなければいけませんでした…。 スマホのカメラ機能はどんどん解像度が上がっているので、1枚の写真が6メガというのが当たり前です。それに伴いレンタルサーバーの方もスペックが上がってきました。 それでも、レンタルサーバーの場合は転送量の軽減を考えなければいけません。 むやみにファイルをアップロードし放題にしては、サーバーがもちません。 ということで、ファイルを選択した際に、ファイル容量を取得して、 ...

目に優しくて電力エコなダークモード(ナイトモード)をサイトやブログに導入する方法。ボタンで非同期切り替え

2019-07-23

今後は導入がスタンダードになりそうなダークモード 2018年頃から有名どころのアプリやサイトで ダークモード(ダークテーマ)への切り替えができるようになってきました。 ダークモードがもたらす効果は以下の2点。 「目の疲れを軽減」 「消費電力の低減」(有機ELディスプレイの場合のみ) TwitterやYoutubeを一日中見ている人にとっては、このダークモードは嬉しい。 背景が真っ白だと、目がチカチカしてきます。 クリエイティブツールのAdobe製品ではダークモードがデフォルトになっていますし、 プログラマーが使うエディタ系のツールもダークモードが人気の様子です...

ページ読込み時に下から上に移動しながらフェードインというリッチなコンテンツ表示を簡単実装

2018-10-29

ページを開いた際にフェードでページ全体を表示する方法はネットに出回っていますが、 「下から上に移動しながらのフェード」これがなかったので、自分で調整したものを残します。 単純に、jqueryのappend関数(コンテンツ追加)でbodyのmargin初期値を50pxなどにして、delay(ディレイ)後にmarginを0にする。 同時にフェード効果とのコラボとなり、非常に心地の良い効果になります。 htmlStart $(function(){ $('head').append( 'body{display:none; margin-top:50px;}' ); ...

PEAR::MailでSMTP送信に挑戦!|無事に動作したコピペで使えるコードを公開

2018-10-04

2019-07-07報告 SMTPは「PHPMailer」で行うことをオススメします PHPメーラーのライブラリ「PHPMailer」はまだまだ現役。今もなおアップデートされています。 Wordpressもメール送信周りではPHPMailerを使用されています。 SMTP送信に関してはコチラの新しい記事の方が導入が簡単です。 2019年 PHPのSMTP送信はインストール不要のPHPMailerが手軽で最短!PEAR終了 どうしてもPEARでSMTP送信をしたい場合は下記をご覧ください。 今回は前回に引き続き、PEAR関連でPEAR::Mailで「SMTP送信」を実行さ...

正規表現 値を数値のみにする

2014-08-14

電話番号をデータベースに追加する時は、「-」(ハイフン)をなくしたほうが検索の際に使い勝手がよくなる。下記は変数を半角数値のみにするユーザー定義関数で、ついでに全角数字を半角にする処理もしている。 phpStart function numOnly($str){ if($str){ $str = mb_convert_kana(trim($str),'n','utf8'); //全角数字を半角数字に $num = preg_replace("/[^0-9]+/", "", $str); } return $num; } $str = '090-9999-99...

完全な空チェック ~ 確実な0(ゼロ)判定、null判定をする方法

2014-08-14

phpStart $num = 0; if($num){ 処理されない... } phpEnd 上記の分岐分は処理されないコードの一例。「0」はfalseと判定されるのがPHPの仕様である。 しかし、「0」はtureと判定し、変数が空の場合のみfalseと判定したい時が多々出てくる。 そこで、よく出てくるなら関数化をしておくのがオススメ。 phpStart function karaChk($str){ if(!is_null($str) && $str !== ""){ $flag = true; }else{ $flag = false; ...

javascriptの足し算の演算は変数を数値型にしてから

2013-09-05

javascriptの演算子はPHPと扱いが違うようで、変数と変数を以下のように足し算すると、 htmlStart var a = 100 var b = 200 total = a + b; alert(total); //結果 100200 htmlEnd 結果は演算の値ではなく、変数と変数の結合の値が出てしまう。 PHPの変数の結合は「.」ピリオドだが、javascriptは「+」だからこうなってしまうのである。 なので、javascriptで演算する場合は、変数をparseInt関数で数値型にしなければいけない。 htmlStart var a = 100 va...

外部サイト(他ドメイン)のファイル存在確認

2013-05-05

画像ファイルがあるかないかを判断して、必要に応じてノーイメージ(now printing)を表示する時などに使用するファイル存在確認の代表的関数file_exists()。 phpStart $path = './log/item/12345.jpg'; if(file_exists($path)){ $img = $path; }else{ $img = '/img/noimage.jpg'; } phpEnd しかし、自サーバーならfile_exists関数でファイルがあるかないかを判断できるが、他ドメイン&他サーバーでは使用できないので、その場合はget_hea...

関数の引数(ひきすう)・戻り値(もどりち)について

2012-11-19

引数とは…戻り値とは…と言葉で書いてもパッとしなさそうなので、半角のカタカナを全角のカタカナに変換するmb_convert_kana関数を例として見てみよう。 phpStart $zenkaku = mb_convert_kana($hankaku, "KV"); //$hankaku が第一引数 //KV が第二引数 //$zenkaku が戻り値 phpEnd これで用語の意味は分かるかと思います。自分で関数を作る(ユーザー定義関数)時はこの引数と戻り値のことを理解しておかないと便利なものは作れない。 個人的にフレームワークの使い方を覚えるのが面倒なので、自作関数の...

現在のURLやファイル名の取得とリファラーの取得方法

2012-10-24

システムを構築中に今現在のURL(自身のURL)やファイル名を取得したいというケースがちょくちょく出てきます。サーバ環境変数に格納されているので取得は簡単です。 phpStart /* 現在のURLが以下だった場合 https://pinkmonky.net/test.php?id=47&cate=5 */ echo $_SERVER['SERVER_NAME']; echo $_SERVER['REQUEST_URI']; echo $_SERVER['PHP_SELF']; echo $_SERVER["SCRIPT_NAME"]; //表示結果 blog.p...

メールアドレスの書式が正しいかチェックする正規表現

2012-10-18

メールアドレスの書式チェックの方法をネットで調べると、preg_match関数を使用した正規表現チェックのコードがいくつか出てくるのだが、どれも同じコードではない為、どれが一番正確なのかはよく分からない。そこで、信用できそうなコードをご紹介。 (adsbygoogle = window.adsbygoogle || []).push({}); どうやら、docomoは「da.me..@docomo.ne.jp」といったRF2822非準拠の携帯メールアドレスが取得できるらしいので、docomoのせいでちょっとややこしいようだ。 ↓ドコモのメールアドレスの取得は以下が可能↓ ...

【PHP】内容に日本語が含まれているかを調べる方法

2012-10-18


メールフォームならメールアドレスは見えないのでスパムは届きにくくなるが、最近内容が英語だけのスパムメールが届くようになった。簡単な処置として、内容に日本語が含まれているかを調べて、英語だけの場合は送信しないという分岐を追加することに。 どうやって全角の文字があるかどうか調べるかというと、文字数を数える『strlen関数』と『mb_strlen関数』を使用して、マルチバイトが含まれているかどうかを調べます。 phpStart if(strlen($body) == mb_strlen($body,'utf8')) { //全部英語(全てシングルバイト) }else{ //日本...

Javascriptで数値の先頭のゼロを削除する方法と、数字の先頭にゼロつける方法

2012-10-07

例えば「01」や「02」など、先頭にゼロがついている数値を「1」という数値に直す場合は、Number関数を使用します。 htmlStart var str = "05"; var num = Number(str); //結果 num == 5 htmlEnd 逆に決まった桁数で先頭にゼロをつけなければいけないケース(ゼロパディング)もよく出くわします。その場合は下記の方法がおそらく最短コード。 htmlStart var num = 5; var str = ('0' + num).slice(-2); //結果 str == '05' htmlEnd s...

xampp環境でメールを送信できるようにする設定

2012-09-23

xampp環境の初期状態ではsendmail関数を使用してもメールが送信できません。ということで、メールを送れるように設定してみたものを見てもらいましょう。今回、送信用に使用するメールアドレスはフリーメールではないメアド(master@pinkmonky.net)で設定しました。フリーメールでも大丈夫だと思います。ちなみにこのメアドはさくらインターネットのサーバーで設定しているものです。 ↓このファイルを編集します。失敗してもいいようにコピーをしてバックアップしておきましょう。 C:\xampp\sendmail\sendmail.ini htmlStart //14行目辺り s...

cookie(クッキー)操作の便利なユーザー定義関数

2012-09-18

フォームやカートなどで重宝するcookie(クッキー)の操作を簡単にする定義関数。クッキーを配列で使用することでシンプルな組み方が実現されてます。この関数があればクッキー操作が格段にラクになるのでオススメです。 phpStart define(_TIME_OUT_,time() + 30 * 86400); //一ヶ月保持 function makeCookie($array,$cookie_name) { foreach ($array as $text => $value) { setcookie($cookie_name."[$text]",$value,_TIME_...

頻繁に使うシーンがある文字列操作群の関数

2012-08-23

文字列の一部分を取り出すsubstr関数は使用するシーンが多いです。長い文章の最初だけを表示する時や、URLから一部分を切り出す時などなど。 <substr()関数 - 最後の2文字を取り出す> phpStart $str = 'https://sample.jp/cate.php?id=06'; echo substr($str, -2); //結果「06」が出力されます。 phpEnd 第2引数にマイナス値を入れれば最後からの文字が取得できます。先頭から2文字を取得する場合は正数を書けばOK。文字列が日本語の場合はmb_substr()を使用しないとバグが起きます。...

セレクトフォームをPHPで自動生成する

2012-08-18

セレクトフォームはユーザー定義関数を作って要領よく生成しましょう。編集画面の際は$now_dataに現在のデータを代入しておけば、選択された状態になります。 phpStart //47都道府県の配列 $AREA = array('北海道','青森','岩手','宮城','秋田','山形','福島','茨城','栃木','群馬','埼玉','千葉','東京','神奈川','新潟','富山','石川','福井','山梨','長野','岐阜','静岡','愛知','三重','滋賀','京都','大阪','兵庫','奈良','和歌山','鳥取','島根','岡山','広島','山口','徳島',...

md5関数でパスワードなどを暗号化する

2012-08-16

md5関数に文字列を与えると、その文字に準じた32文字の英数字の文字列(ハッシュ値)を返してくれます。一文字でも違う値を与えれば、全く違う文字列になり、同じ文字列なら毎回同じ文字列が返ります。 <関数の使用例> phpStart echo md5('abcd'); phpEnd <結果> htmlStart e2fc714c4727ee9395f324cd2e7f331f htmlEnd 上記の文字列から元の文字列に戻す方法はありません。一度暗号化してしまうと、暗号化した本人しか答えが分からないのです。セキュリティーを重視するサイトではデータデースにそのままパスワ...

生年月日から年齢取得

2012-08-16

プロフィールを登録させる際に年齢の項目を設ける場合は、年齢を入力させるのではなく、生年月日を入力してもらうのが基本です。年齢を入力させてしまうと、データ上その人はずーっと同じ年齢のままになってしまうからです。 生年月日から年齢を求めるの方法はいくつかあるみたいですが、一番短いのが以下の計算方式です。 <計算方式> phpStart $birth = 19811007; $age = floor((date('Ymd') - $birth) / 10000); phpEnd 計算方式は「(今日の日付 - 生年月日) ÷ 10000」で求められるみたいです。floor()...

サイト内のキーワード検索で複合(AND)検索を導入する為のコード

2012-08-04

複合検索は半角スペース区切りのワードに変換して、explode関数で半角スペース区切りで配列に格納し、foreach文でWHEREのSQL文を生成します。foreach文でエラーを出さない為に、ループの前にis_array関数で配列であるかの確認しておきましょう。 htmlStart $q = str_replace(' ',' ',trim($_GET['q'])); //*1 下記説明 $array = explode(' ',$q); if(is_array($array)){ foreach($array as $val){ $str = ($sql)?' AND...

ファイル名から拡張子を取得する

2012-08-04

拡張子を取得する場合はpathinfo関数を使うのが最短のコードだと思われます。 htmlStart $filename = 'sample.jpg'; $ext = pathinfo($filename, PATHINFO_EXTENSION); htmlEnd ファイルアップ時の際に必要になることが多い技になりますね。 htmlStart $filename = $_FILES['upfile']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); htmlEnd ...

この記事がお役に立てましたら是非シェアのご協力お願いします。