- 1. 要件
- 2. パスワード管理ページの構築
- 3. 各商品に割引額の入力欄をつける
- 3.1. 基礎⑤〜論理演算子について〜 php
- 3.2. ローカル環境とリモート環境のDockerfileを共通化する
- 3.3. 【PHP】ポートフォリオ
- 3.4. PHPの配列について【PHP入門】
- 3.5. ブログ投稿機能作成 新規データの登録 PHP
- 3.6. コンテナ内で作られたファイルがrootとなり権限エラーで編集できなくなってしまう問題の処方箋
- 3.7. 基礎④〜配列、連想配列〜 php
- 3.8. WordPress MW WP formプラグインの電話番号 半角数字バリデーション不備問題
- 3.9. PHP学習備忘録
- 3.10. 【PHP】IDを採番し直すやり方
- 3.11. PHP 正規表現を使って文字列を比較する
- 3.12. 基礎③〜for文、while文〜 php
基礎⑥〜関数について〜 php
#はじめに
関数の作り方について書いてみる。
#内容
##関数とは
プログラミングにおける関数は、実行したい一連の処理をまとめ、機能を表わす名前をつけて定義したものであり、プログラム中で関数を呼び出すと、関数に記述された処理を実行して呼び出し元に戻る。
関数の書き方や形式は、プログラミング言語によって異なるが、一般に引数(ひきすう)を使って呼び出し元から関数に情報を渡し、戻り値(もどりち)や引数で関数から呼び出し元に処理の成否や結果を返すことができる。C言語や PHP など多くのプログラミング言語で、処理内容を「関数」として記述し、関数でプログラムを構成する。汎用性のある機能群は、標準関数として標準ライブラリに提供されている。
参考:https://edu.clipper.co.jp/wd-43.html
例:
“`php
echo strlen (‘ringo’);//結果:5
“`上の例を説明すると
・strlenという関数をしようしています。これは文字列の文字数を返す組み込み関数です。
・その後ろの(‘ringo’)が引数となります。引数は変数
【Laravel】Circle CIでPHPUnitテストの実行結果を分析する
## 背景
Circle CIにはPHP Unitの実行結果を読み取り、実行結果をダッシュボードで表示する機能がある。
PJチーム内で活用し、テストを書く機運上昇を狙ってメモ。
## 実装
テストの実行結果をxmlで出力させればよい。
“`yaml:.circleci/config.yml(抜粋)
– run:
name: run php unit tests
command: |
mkdir -p phpunit
phpdbg -qrr vendor/bin/phpunit –log-junit phpunit/junit.xml –coverage-html phpunit/coverage-report
– store_test_results:
path: phpunit
– store_artifacts:
path: phpunit/coverage-report
“`注
laravel エラーの対処法
#vendor配下のファイルがエラー
“`
$ dc exec web composer install
“`#storage配下のファイル
“`
$ dc exec web php artisan config:cache
“`dc exec web npm installとかもある・・・?
投稿にユーザーIDを紐づけたい
# 投稿時に下記のエラーが出る
## laravel sql エラー: SQLSTATE[HY000]: General error: 1364 Field ‘user_id’ doesn’t have a default value
user_idは初期値をもっていないとあるが、つまりはuser_idが入力できていない(空っぽ)ということ。![スクリーンショット 2021-08-12 15.43.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1880772/b7176577-3484-77c3-b119-95e211090f7d.png)
エラーが出たときのコントローラーの記述。
“`php:BlogController.php
public function store(Request $request){
// ブログのデータ(BlogPostRequest)を$requestで受け取る
$inputs = $request->all()
wordpress https (secure backend)
# https://wordpress
## wordpress が https のバックエンドに対応していないので対応してみた。
### 成果物
– [GitHub](https://github.com/jobscale/wordpress)
### 手順
#### どっかに `http://` って書いてあるのが原因なので全置換
> `http://`
> → `//`– コミットハッシュ: 963dec59
#### ドメインの先頭が削られるので `substr 7` を見つけ出す
> `substr($uri, 0, 7)`
> → `substr($uri, 0, strlen($protocol))`– コミットハッシュ: afb37416
### 成功した
– [WordPress](https://cms.jsx.jp)
### その他
`$_SERVER[‘X-FORWARDED-PROTO’]` とか使ってもできそう
【WordPress】カスタム投稿やアーカイブに一括で共通のパスワードをつける。
要件
・パスワード認証画面は別途固定ページで作成する。
・閲覧ページ(パスワードをかけるページ)と認証ページのURLを関連づける。
・閲覧ページにアクセスしたとき、
パスワード未認証なら関連づけられた固定ページに自動で飛ばす。・パスワード認証後、関連づけられた閲覧ページに自動で飛ばす。
(認証済みで認証用固定ページにアクセスした場合も同様。)・認証済み情報をユーザーIDで管理。
(今回のサイトが会員制サイトだったため)・管理画面にパスワード管理ページを追加する。
パスワード管理ページの構築
管理画面にパスワード管理用のページを追加します。
“`php:function.php
Laravelでテーブルをロックする
“`php
DB::unprepared( ‘LOCK TABLES tmp_1 WRITE, tmp_2 WRITE;’ );// something want to do
DB::unprepared( ‘UNLOCK TABLES’ );
“``DB::statement()` や `DB::raw()` では動きませんでした。
トランザクション化のケース。
“`php
DB::transaction(function (){
DB::unprepared( ‘LOCK TABLES tmp_1 WRITE, tmp_2 WRITE;’ );
// something want to do
DB::unprepared( ‘UNLOCK TABLES’ );
});
“`## 参考
https://stackoverflow.com/questions/53522444/how-to-lock-table-with-laravel/53523102#53523102
https://qiita.com/zackey
WordPressのWelcartで商品ごとに割引額を設定する方法
WordPressのプラグイン「Welcart」に関する記事です。
デフォルトでは全ての商品に同じ割引額が適応されます。
以下は、商品ごとに割引額を設定する方法です。各商品に割引額の入力欄をつける
カスタムフィールドを追加して、割引額を設定できるようにします。
“`php:function.php
// カスタムフィールドの追加
add_action( ‘admin_menu’, ‘add_custom_field’ );
function add_custom_field() {
add_meta_box( ‘custom-discount’, ‘商品個別の割引率’, ‘create_discount’, ‘post’, ‘normal’ );
}
// カスタムフィールドのHTML
function create_discount() {
global $post;
$keyname = ‘item_discount’;
// 保存されているカスタムフィールドの値を取得
$get_value = get_post
基礎⑤〜論理演算子について〜 php
#はじめに
論理演算子について詳しく書いてみた。
#内容
##論理演算子とは
複数の条件を1つにまとめる時に使います。
&&が「かつ」という役割をしており、||が「または」という意味になります。例:
“`php
$a=100;
if($a > 50 && $a <200){ echo "$aは50より大きい、かつ30より小さい"; } if($a < 50 || $a >30 ){
echo “$aは10より小さい、または30より大きい”;
}
//結果:$aは50より大きい、かつ30より小さい“`
上の例題を説明すると
if($a > 50 && $a <200) この部分で50より大きいかつ30より小さいと表記しており if($a < 50 || $a >30 )
ここでは$aは10より小さい、または30より大きいと表記しています。$aの中身は100なので50より大きいかつ30より小さいという結果になります。
他にも「!」も論理演算子の1つです。
意味は条件式を否定するとこりで使われます。例:
“`php
$a = 100
ローカル環境とリモート環境のDockerfileを共通化する
# 動機
リモート環境をAmazon ECSにし、ローカル環境もDockerで構築していましたが、このときDockerfileの運用に悩みました。ローカル環境とリモート環境では、コンテナ化したいものが違ったからです。
– ローカル環境
– 主にランタイムをコンテナ化したい
– 手元のIDEでコーディングしたいので、コードはミュータブルで良い
– リモート環境
– アプリケーションも含めてコンテナ化したい
– コードは書き換えられなくて良い上記のような欲求のため、Dockerfileを分けていましたが、管理が複雑になってきたため一つにまとめたいと思いました。
# TL;DR
– マルチステージビルドでリモート環境とローカル環境を分ける
– FROM句を複数書くやり方
– 共通な部分とローカル環境・リモート環境で分けるものを別々で記載すると良い# [マルチステージビルド](https://docs.docker.jp/develop/develop-images/multistage-build.html)を使う
## 概要
【PHP】ポートフォリオ
##はじめに
プログラミング学習の成果物として今回のポートフォリオを制作いたしました。
アウトプットとしてこちらに投稿します。
##ポートフォリオについて
『MusicRoot』 という名前でCDのECサイトを開発いたしました。
なぜなら私は音楽が好きなのですが、
最近はコロナの影響でライブが中止になり路上やライブハウスで販売していた
インディーズアーティストのCDを買う手段があまりないと感じからです。
開発に当たって出品者はアピールをしやすいように紹介文の機能や在庫管理しやすい出品履歴機能を、
買い手にはスムーズに取引できるようにコメント機能を付けて
自分と同じように音楽を好きな人が利用したくなるよう意識しました。
##開発環境
・PHP7.32.4
・MySQL
・Github
・Visual Studio Code
##実装機能
| No| 機能 | 機能について |
|:-:|:—————–:|:———————–:|
| 1 |新規登録機能|
PHPの配列について【PHP入門】
配列とは変数名が同じで、複数のデータを1つの箱のことです。
配列が便利な場合を見ていきましょう
“`index.php
“`ブラウザには以下のように表示される
“`
一郎二郎三郎四郎五郎
“`プログラミングは楽するためにコードを書きたい!!と思う人が多い
これをより簡潔にするのが配列になる先ほどのコードを配列で表すと以下のようになる
“`index.php
ブログ投稿機能作成 新規データの登録 PHP
#■新規データの登録の流れ
①フォームから値を渡す。
②フォームから値を受け取る。
③バリデーションする。
④トランザクションを開始
⑤データをDBに登録する。#■① フォームから値を渡す。
htmlのフォーム等から登録したい値を渡す。“` html
//action=’値を渡すファイル名’ method=”渡し方送信するのでPOST”“`
#■② フォームから値を受け取る。
受け取るファイルでPOSTで受け取る。“` php
//例 blog_create.php
“`#■③バリデーションす
コンテナ内で作られたファイルがrootとなり権限エラーで編集できなくなってしまう問題の処方箋
# はじめに
https://qiita.com/nagareboshi/items/e09cf8305654efbf9899こちらの記事でUbuntu内ですべて完結すると処理が速くなると紹介しましたが、そうした場合デメリットがあります。
コンテナ内で作られたファイルは特に何もしなければrootユーザーとしてファイルが作られてしまうため、ホスト側からはファイル権限エラーとなり、編集することができなくなってしまいます。今回はファイル権限まわりについて調べたことを記事としてまとめたいと思います。
# 動作確認環境
– Windows10 Home
– wsl2
– Docker Desktop for Windows
– Ubuntu20.04 LTS
– Laravel8
– PhpStorm# Ubuntu側にコードの実体があり、それをコンテナにマウントした場合
先の記事で紹介した通り、こちらの方法の場合、無駄な変換処理などが行われないため処理がとても速くなります。
しかしながらこちらの方法の場合、特に何もしなければコンテナ内の操作はすべてroot権限で実行されるため、
基礎④〜配列、連想配列〜 php
#はじめに
配列について書いてみた。#内容
###配列とは
配列には添字配列と連想配列があり、これまでの変数が一つしか値を扱えなかったのに対し、配列を用いると複数の値をまとめて保存することができます。
例:
“`php
$a = array(‘ringo’,’banana’,’mikan’);echo $a[0];
//結果:ringoecho $a[1];
//結果:banana“`
上の例題の説明をすると
・$a = array(‘ringo’,’banana’,’mikan’);
配列のデータには先頭から0, 1, 2…と数えていきます。
この場合
ringoは[0]
bananaは[1]
mikanは[2]
となります。echoでringoを結果としてだしたかったのでecho $a[0];と書き結果ringoという値がでました。
###連想配列
連想配列は、配列と同じく複数のデータをまとめて管理するのに用いられます。配列との違いは、個々の要素を管理するのにインデックス番号ではなく、「キー」と呼ばれる文字列などの値を指定することができる点
WordPress MW WP formプラグインの電話番号 半角数字バリデーション不備問題
# WordPress MW WP formプラグインの電話番号 半角数字バリデーション不備問題
Wordpressでメール送信機能を実装する際に、MW WP formプラグインで簡単に実装できる。しかし、
xxx-xxx-xxxのような電話番号で、半角数字のバリデーションを指定したところ、半角数字を入力したにもかからわず、半角数字と認識されずエラーメッセージが表示される場合がある。
解決方法を示したサイトが他なかったので、ここでその原因と暫定処置ではあるが解決方法を示す。## 環境の整理
– WordPress 5.8
– MW WP Form プラグイン 4.4.0## WP管理画面
1.MW WP Form にて、name=”tel”というフォームタグがあるとする。
![スクリーンショット 2021-08-11 070946.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/5f3f7302-2bbd-8679-1192-79c2bc3ecef7.jpeg)
2.telのバリデー
PHP学習備忘録
#はじめに
現在PHPを学習中
大切だと感じたことや少し複雑と感じたこと、疑問に感じたことを解決し備忘録として残す#PHPビルトイン関数
##requireとinclude
外部ファイルを呼び出すという同じ動作をするがファイル読み込み失敗時の挙動が異なる
・ **require** : E_ERRORを発行し処理を停止
・ **include** : E_WARNINGを発行し処理は継続コアな実装には`require`、画面描画など該当箇所のみ表示させないことによりエラーをわかりやすくしたい場合は`include`など、実装内容に応じて使い分けたい
##requierとrequire_once
両者ともに外部ファイルを呼び出すという同じ動作をするが`require_once`は既にファイルが読み込まれているかPHPがチェックする
思いがけない関数の再定義や変数の際代入を回避することができる##filter_input
指定した名前の変数を外部から受け取り、オプションでそれをフィルタリングする
フォームから送信された値を取得する際に用いる
**文法**“`php
fi
【PHP】IDを採番し直すやり方
“`PHP
[ ‘id’ => 89, ‘language’ => ‘PHP’],
1 => [ ‘id’ => 23, ‘language’ => ‘Java’],
2 => [ ‘id’ => 11, ‘language’ => ‘VBA’ ],
3 => [ ‘id’ => 17, ‘language’ => ‘Ruby’ ]
];$i = 0;
foreach ($rows as $row) {
$data[] = [
‘id’ => $i,
‘language’ => $row[‘language’]
];
$i++;
}var_dump($data);
?>
“`
PHP 正規表現を使って文字列を比較する
# 目的
– 正規表現を用いた文字列比較ができる関数`preg_match()`の使用方法をメモ的にまとめる
# 方法
– 下記のように記載することで正規表現を用いて文字列を比較する事ができる。
“`php
preg_match(‘/パターン文字列(正規表現を含む検索したい文字列)/’, ‘比較対象文字列’);
“`– パターン文字列が比較対象にマッチした時はintの`1`を返す。
– パターン文字列が比較対象にマッチしなかった時はintの`0`を返す。
– エラーが発生した時は`false`を返す。
– 必ずfalseを返す訳ではなく「falseとして評価される値を返す」場合もある。
– 当該関数の戻り値を評価する時は`===演算子`を使用しないと行けないらしい。# 参考文献
https://www.php.net/manual/ja/function.preg-match.php
基礎③〜for文、while文〜 php
# はじめに
前回はif文について触れたので今回はfor文とwhile文について触れてみたいと思います。# 内容
## for文について
・for文とは繰り返し処理を行うことを意味します。例:
“`php
for($i = 1; $i<=100; $i++){ echo $i; } ``` 結果: 123456789101112131415.....100 1〜100までが出力されることになります。 上記の例を説明すると ・$i = 1 というのは1から始まります。 ・$i=100は100までループするよというループ条件を表しています。 ・$i++は条件を満たすまで更新し続けることを表しています。 ##while文について ・while文もfor文と同様に繰り返し処理ができる1つです。 例: ```php $i = 1; while($i <= 100){ echo $i; $i++ } ``` 結果: 123456789101112131415.....100 上記の例を説明すると ・$iに1という変数を代入する ・($i