PHP関連のことを調べてみた2021年06月23日

PHP関連のことを調べてみた2021年06月23日
目次

laravel 任意のフィールドの値が指定したものと一致していない時に除外するバリデーションルールを記載する方法

# 目的

– laravelで任意のフィールドの値が指定したものと一致していない時に当該フィールドのバリデートをスキップする方法をまとめる

# 方法

– フィールド`check`の値に「true」という文字列以外が格納されたとき以外に、フィールド`input_str`の値のバリデーションをスキップしたい時は下記のように記載する。
– `input_str`の値のバリデーションルールは「必須」と「文字列であること」とする。
– 下記はリクエストファイルの`rules()`メソッドの内容のみ抜粋して記載する。

“`HogeRequest.php
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
‘check’ => ‘required’,
‘input_str’ => ‘

元記事を表示

PHP8以降の比較とmatch文について

便利だけど使う前に挙動をしっかり理解しておきたいので。
予習メモです。

# 環境構築
PHP8の環境を用意します。
開発環境を汚したくない場合は[Docker](https://docs.docker.com/get-docker/)がおすすめです。

簡単なスクリプトならDockerfileを作成する必要もありません。
rmオプションを使用することにより、スクリプト実行後にコンテナが削除されます。

“`bash
$ mkdir php8_test
$ cd php8_test
$ vi mytest.php
$ docker run -it –rm –name my-running-script -v “$PWD”:/usr/src/php8_test -w /usr/src/php8_test php:8.0-cli php mytest.php
“`

[公式ドキュメント](https://github.com/docker-library/docs/tree/master/php)にも紹介されています。

# 数値と文字列の比較
数値と文字列の比較について、“文

元記事を表示

ララベルで久々にプロジェクトをクローンしたのでつまづきポインの備忘録(forMac)

自分のプロジェクトをクローンしてデータベースのモックアップ(テスト環境)をローカルに作成しようと思ったのですが、前にプロジェクトをクローンした時と同じ轍を踏んでいる気がしたのでいい加減覚えようと戒めの意味も込めて備忘録を作成します。

#1.プロジェクトのクローン

これは簡単ですねサクッとローカルにクローンします。

“`vim

simple_db_mockup % git clone https://github.com/mar-gitacount/simple.git

“`

うまくいったぽいです。

“`vim
Cloning into ‘simple’…
remote: Enumerating objects: 554, done.
remote: Counting objects: 100% (554/554), done.
remote: Compressing objects: 100% (307/307), done.
remote: Total 554 (delta 304), reused 463 (delta 213), pack-reused

元記事を表示

【Php】フォームからDBへデータ保存(2)

# 初めに
phpでフォームの入力内容をDBに保存する方法について学習した内容のoutput用記事です。

※内容に間違いなどがある場合はご指摘をよろしくお願いします。
※こちらの記事はあくまでも個人で学習した内容のoutputとしての記事になります。

前回の記事:
https://qiita.com/redrabbit1104/items/a6e57aa1fd1771ef90ff
https://qiita.com/redrabbit1104/items/a3eaf2bba51fac0b3c51
https://qiita.com/redrabbit1104/items/6e9c85c7503ed9043f38
https://qiita.com/redrabbit1104/items/c9b7bb7a89922521c003
https://qiita.com/redrabbit1104/items/3c83883ab811d7bd1337

# phpファイルの読み込みとDB保存のための関数
入力フォームの完了画面のあたりに前回作成したデータベースへ保存処理が書かれているphp

元記事を表示

レトロなゲーム風の掲示板を作った

8ビットゲーム風の掲示板を作りました。

データベースが面倒だったので、CSVファイルを使いました。

一応スレッドも立てられます。

CSSはNES.cssを使いました。

フォントはPress + Start + 2Pを使いました。

ご使用の際はモラルを守って使用してください。

![10907D5F-1FCB-45BF-9F9A-B9566B6C811E.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795753/d5563275-930a-f454-7d85-350a895227da.png)

![5FBADC20-6640-4682-A0DE-7684D955FFAD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795753/6057fa30-2abd-21ad-aa4a-aa0c215a2339.png)

![83D43C75-01D4-4B7D-A425-9D27894439C6.png](http

元記事を表示

PHPの変数のスコープについてまとめてみた

そもそもスコープとは?

スコープ(Scope)は「範囲」という意味がある。
そのため、PHPの変数のスコープとは変数が適応できる範囲という意味 :whale2:

:house: ローカルスコープ

変数を定義している関数内でしか使えない変数のスコープ
関数の外で定義した変数を関数の中で使ったり、逆に関数の中で定義した変数を関数の外で使ったりすることはできない

“`php
function localScope()
{
$localValue = “これはローカルスコープの変数です。”;
return $localValue ;
}

echo $localValue ;
echo localScope();
“`
“`
  // 実行結果
> //echo $localValue;の実行結果
>これはローカルスコープの変数です。  //echo localScope();の実行結果
“`

元記事を表示

laravel 任意のフィールドの値が指定したものと一致していた時に除外するバリデーションルールを記載する方法

# 目的

– laravelで任意のフィールドの値が指定したものと一致していた時に当該フィールドのバリデートをスキップする方法をまとめる

# 方法

– フィールド`check`の値に「false」という文字列が格納されたときに、フィールド`input_str`の値のバリデーションをスキップしたいときは下記のように記載する。
– `input_str`の値のバリデーションルールは「必須」と「文字列であること」とする。
– 下記はリクエストファイルの`rules()`メソッドの内容のみ抜粋して記載する。

“`HogeRequest.php
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
‘check’ => ‘required’,
‘input_str’ => ‘exc

元記事を表示

【Laravel】スケジューラ(Lravelの定期バッチ)を手動実行する。

自分用のメモとして残します。

開発環境とかになると、タスクスケジューラに登録してないことが多いです。
そこで手動でLaravelのスケジューラを実行して動作を確認する方法をメモ。

#やり方
“`shell
php artisan schedule:run
“`

以上。

元記事を表示

SQLのCRUDについて再確認してみる

CRUDとは?

プログラミングでアプリを作る際の4大機能の頭文字を取ったもの。
CRUDはクラッドと読めば良いらいしい!

C・・・create(新規作成)
R・・・read(読み込む)
U・・・update(更新する)
D・・・delete(削除する)
の頭文字を取ったものになる。

SQL文でのCRUDの使い方

① CREATE

SQL文では新規作成のCREATEは“`INSERT“`という言葉で書く。(insertの直訳は差し込む)

“` 
INSERT INTO テーブル名(カラム名) VALUES(値);

//実際の使用例
INSERT INTO contacts(id,name,created_at)VALUES(1,”三宅”,now());
“`
使用例を実行した結果、“`contact“`テーブルには以下のデータが新規作成(追加)される。

PDOクラスのprepareメソッドについて勉強してみた

PDOのprepareメソッドでSQL文を実行する手順

①DBに接続
②実行したいSQL文をprepareメソッドにセット
③bindValueメソッドを実行して、SQLにパラメーターをセット
④executeメソッドで実際にSQLを実行
⑤返り値を取得

prepareメソッドとは

変動値を含むSQL文を実行するのに使うPDOクラス内のメソッド。
変動値を含むため、悪意のあるユーザーが変動値を入力する箇所に攻撃をしてきても大丈夫なようにSQLインジェクション対策としてプレースホルダを使って安全にSQL文を割り当てる必要がある。
プレースホルダーの書き方は、変数が入る箇所に「?」または「:(任意の名前)」をつければOK!

“`
$sql = ‘select * from contacts where id = ?’;      //疑問符プレースホルダー
$sql = ‘select * from contacts where id = :id’; //名前付きプレースホルダー
“`

bindValueメソッドとは

・・・そ

PDOクラスのqueryメソッドについて勉強してみた

:mushroom: PDOクラスとは

PDOは PHP Data Object の頭文字をとったもので、
データベースに接続するための機能

:mushroom: queryメソッドとは

データベースに接続した後、SQL文を発行してデータを取得するが、
queryメソッドではSQL文に変数を割り当てずに(POST,GETなどで取得した値によって動的に処理せずに)固定ページなどにデータベースの値を取得したいときに用いる関数。
返り値はPDOStatementオブジェクトとして返ってくるので、値を取り出すにはPDOStatementクラスで用意されているfetchを使う必要がある。

“`
$sql = ‘select * from samples where id = 1’;
$stmt = $pdo->query($sql); //$sqlに格納したSQL文が実行される
$result = $stmt->fetchAll();

/*
$stmtには返り値としてPDOStatementオブジェクトが入っているので、
PDOStatementオブ

prepareメソッドを使う時にbindValueを省略する記述法があるらしい…!

bindValueを省略しない書き方

prepareメソッドは変動値を持つSQLを実行したいときに使うメソッド。
基本的な流れは
変動値にプレースホルダーを持たせてprepareメソッドを記述
  ↓
prepareメソッドの返り値のPDOExeptionの中にあるbindValueメソッドで、
設定しているプレースホルダーに割り当てたい値、$PDOデータ型定数を設定する
  ↓
executeで実行する
  ↓
fetchで実行結果の返り値を取得

“`
$sql = ‘select * from contacts where id = :id’;
$stmt = $pdo->prepare($sql);
$stmt->bindValue(‘id’, 3, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll();
“`

bindValueを省略する書き方

基本的な流れは
変動値にプレースホルダーを持たせてprepareメソッドを記述
  ↓
bindValueを使わない代わ

【Php】フォームからDBへデータ保存(1)

# 初めに
phpでフォームの入力内容をDBに保存する方法について学習した内容のoutput用記事です。

※内容に間違いなどがある場合はご指摘をよろしくお願いします。
※こちらの記事はあくまでも個人で学習した内容のoutputとしての記事になります。

前回の記事:
https://qiita.com/redrabbit1104/items/a6e57aa1fd1771ef90ff
https://qiita.com/redrabbit1104/items/a3eaf2bba51fac0b3c51
https://qiita.com/redrabbit1104/items/6e9c85c7503ed9043f38
https://qiita.com/redrabbit1104/items/c9b7bb7a89922521c003

# データを保存するテーブルを準備する
テーブル名はcontactsでidからcreated_atまでの8項目が用意されています。
![スクリーンショット 2021-06-20 16.53.54.png](https://qiita-image-store

short_open_tagを有効にする方法【php7.2以上】

php勉強して数ヶ月…

“`php

“`

「php」って毎度書くのめんどくない?!
と気付いたので、ショートカットできる方法を探した。
当方、**PHP Version 7.2.33**。
> `php.ini` ファイル内の `short_open_tag ` を `On `にすれば良い

とのことで早速実践!

1つ目の段落では、デフォルトで↓
>; short_open_tag
; **Default Value: On**
; Development Value: Off
; Production Value: Off

だけど、phpをショートカットできていない(現状そうだった
では次の段落。

>; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
**short_open_tag=Off**

↑この `short_open_tag` が怪しいので早速 `On` へ変更!

無事

LaravelでモデルのUnitテストを書く時の注意

# はじめに

以下の記事にあるように、インスタンス化したモデルに自分で値をセットすることで、Unitテストを行うことができます。
ですが、この時プロパティを`date`へキャストする設定を行うとエラーが発生します。その時の解決法です。

https://qiita.com/ggg-mzkr/items/507c2921e442ad3ccab9

# TL;DR
* モデルのプロパティを`Datetime`へキャストするときは

“`php
‘datetime’ // active_fromカラムの値をDatetimeへキャストする
];

public function isActive(): bool
{
return $this->active_from < Carbon::now(); } } ``` * `setDateFor

Laravelで違う文字(濁点/半濁点/平仮名/片仮名)が同じ文字として使われてしまう問題の対処法

## はじめに
Laravelで日本語の比較処理をしようとしたところ、違う文字列であるにも関わらず同じものとして扱われてしまうことがありました。
その時の対処法を忘れないように記事にしたいと思います。

## 動作確認環境
– PHP 8.0
– Laravel 8.0
– MySQL 8.0

※下位環境でも動作する場合がございます

## テーブル構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1490767/d74a503e-6891-a7fd-f186-37cc45134653.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1490767/fac676c1-f138-e5e3-226c-394b767305f6.png)

## 問題点
“`php
$nana = Sample::where(‘name’, ‘バッグ’)->get();
“`

この処理。一見だと

【PHP】PHP課題14-8 ジャンケンゲーム 難易度(高)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954863/94cd6c7f-2233-f347-177d-1d1e92680e5f.png)

“`
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954863/04b768fa-3780-2eff-bc8e-08422eca0f65.png)

“`
“`

1・画面のレイアウトは画像の通り
2・ユーザーはグー・チョキ・パーのいずれかをラジオボタンで入力する
3・submitされたら、ユーザーの手を表示する
4・submitされたら、コンピュータの手をグー・チョキ・パーからランダムに選択し、表示する
5・submitされたら、じゃんけんの勝敗を判定し、出力する
6・利用するクラスは public/object_sample/classes 内に作成し、適宜読み込む。
7・JankenGameクラスとHandクラスを作成す

ユーザーエージェントを判別するAgentをLaravelにインストールする

![68747470733a2f2f6a656e737365676572732e636f6d2f7374617469632f6d656469612f6167656e742e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47882/bc9f18d2-f2fb-528f-e6e2-e163b667cc57.png)

「Agent」のロゴ。ダンディですね。

# UserAgentを識別するライブラリ「Agent」
https://github.com/jenssegers/agent

PHPでユーザーのOSやブラウザの種類を判別したいときには「Agent」が便利です。

## 使い方

“`php
isAndroidOS();

// ブラウザのチェック
$agent->isIE();
$agent->isSafari();

【PHP8.1】呼び出し元に返らない返り値の型が指定できるようになる

“`php
function foo():XXX{
exit;
}
“`

この関数の返り値の型は何にすればいいでしょうか。
null?
void?

nullはnullという型ですし、voidは『値を返さない』であって『呼び出し元に返らない』ではありません。
ということで『呼び出し元に返らない』を明記できる型が提案されました。
返らないのに返り値とは。

PHP8.1以降ではこう書けるようになります。

“`php
function foo():never{
exit;
}
“`

以下は該当のRFC、[PHP RFC: noreturn type](https://wiki.php.net/rfc/noreturn_type)の日本語訳です。

# PHP RFC: noreturn type

## Introduction

ここ数年の傾向として、元々はPHP docで表現されていた型がPHPネイティブになっていくということがあります。
過去の例としては[スカラー型](https://wiki.php.net/rfc/scalar_type_hints_v5)、[

【WordPress】All-in-One WP Migration のアップロード上限を上げる方法【ロリポップ】

# 【STEP1】 ロリポップ管理画面の php.ini の設定を変更

最初にロリポップの管理画面の「PHP設定」でモジュール版からCGI版に変更します。
php.ini の設定画面にある「php_value, php_flagを利用可能にする」の項目を `On` にします。
「php.iniを設定する」のボタンをクリックします。

![スクリーンショット 2021-06-21 18.17.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42231/6925ce62-4ace-93c0-185a-a4fdc64e15eb.png)

※モジュール版のままだと「php_value, php_flagを利用可能にする」の項目を変更できません。
※「php_value, php_flagを利用可能にする」の項目を `On` にすることで、 `.htaccess` に記述したアップロード上限の設定が有効になります。

# 【STEP2】 .htaccess に追記

既に WordPress がインストー

id name created_at
1