PHP関連のことを調べてみた2022年04月02日

PHP関連のことを調べてみた2022年04月02日
目次

使用しているブラウザを判定

## 使用用途
– ユーザーが使用しているブラウザを判定する

## 使用方法
“`php:ユーザーエージェント判定
$hoge = $_SERVER[‘HTTP_USER_AGENT’]; // ユーザーエージェントを取得
if (strpos($hoge, ‘ここに各ブラウザを判定する文言を入力’) !== false) {
指定したブラウザだった場合に行いたい処理を入力
}
“`
strpos は判定したい文言が見つからない場合に false を返す。

## IEサポート終了
2022 年 6 月 16 日(日本時間)をもって、Microsoft 社より Internet Explorer のサポートが終了となることが告知されています。

IEを判定するには
`MSIE` か `Trident`という文字が入っているかを確認する。
(古いIEは「Trident」が含まれないので、2つを確かめる)

## その他のブラウザ
「Chrome」は
`Chrome` が入っているか判定する。
`Safari` の文字列が含まれる場合もあるため注意。
`Chrome` が入ってい

元記事を表示

Phaser.jsで作った大富豪をユーザー登録制にしました

Laravelでバックエンドを作成し、大富豪をユーザー登録制にしました。
成績がバックエンドに登録され、ネットで確認することができます。

大富豪のURL
https://www.new-doumeishi.me/vs_daihugou/public/

成績確認のURL
https://www.new-doumeishi.me/vs_daihugou_server/show

元記事を表示

PHPのin_array,array_column,array_multisortを駆使してランキング集計してソートするロジックを組んだ話

ランキング集計ロジックを作りたくて実装を進めていた

DBのランキングテーブルは下記のような構成になっていて

|id|no|place_id|
|-|-|-|
|1|1|abc|
|2|2|aaa|
|3|3|bbb|
|4|1|abc|

no(ランキング順)1のものは重みが3
no(ランキング順)2のものは重みが2
no(ランキング順)3のものは重みが1

といった形で集計した結果ポイントが一番高い順に並べるということがしたかった。

このテーブルから

“`
[
{place_id: 1, point: 4},
{place_id: 2, point: 2},
{place_id: 3, point: 1}
]
“`
こんな感じの結果を作りたかった。

“`php
// place_idごとにポイント集計とかする
foreach ($ranking_records as $ranking_record) {
if(in_array( $ranking_record->place_id, a

元記事を表示

PHPの書き方(初心者向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
“`MAMP“`をインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

# PHPの書き方

### 1. 基本的な書き方

“`index.php

“`
“`“`のの間に処理を書いていきます。この間でPHPの処理が走るので、
の外に書くとPHPとして処理されません。

***?>は省略することができます***。そうすると

元記事を表示

【Laravelエラー】Cannot drop table ” referenced by a foreign key constraint

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況
usersテーブルを“`php artisan migrate:rollback“`したときのエラー。

“`
Cannot drop table ‘users’ referenced by a foreign key constraint ‘posts_user_id_foreign’ on table ‘posts’. (SQL: drop table if exists `users`)
“`

## 原因
usersテーブルに“`post_id“`が外部キーとして設定されており、postsテーブルよりusersテーブルを先に“`rollback“`しようとしたため。

## 解決法
migrationファイルで外部キーを削除する。

“`php
public function down()
{
Schema::table(‘posts’, function (Blueprint $table) {
$table->dropForeign(‘posts_user_id

元記事を表示

DTO(Data Transfer Object)

# DTOとは
– オブジェクト指向プログラミングで用いられる**デザインパターン**の一つ
– 関連するデータをまとめ、データの格納・読み出しのためのメソッドを定義したオブジェクト
– データの**受け渡し専用**クラス
– プログラム間でデータを効率良く、互いに利用しやすい形式で渡す手段

# 詳細
DTOにはビジネスロジックを含まない。
データを管理するためのフィールド変数と、
フィールド変数に対応したゲッター・セッターが定義されるのが一般的。

# 例

“`php
id = $parameter[‘id’];
$this->value = $parameter[‘value’];
}

public function id(): string
{
return $t

元記事を表示

PHPでデータを取得する方法

## PHPでデータを取得する6つの方法
1.「スーパーグローバル変数」から受け取る
2.「ファイル」から受け取る
3.「データベース」から受け取る
4.インターネット上の「外部URL」から受け取る
5.「メモリ」から受け取る
6.「標準関数」から受け取る

### 「スーパーグローバル変数」から受け取る 

PHPの主なスーパーグローバル変数
$_GET

$_POST

$_SERVER

$_COOKIE

$_FILES

$_SESSION

$_GET

$_POST

“`php.sample



“`
“`php.sample

元記事を表示

【独学+職業訓練】実務未経験からたった一年半でバックエンドエンジニアとして医療系自社開発企業に転職したお話

# はじめに
こんにちは。ゆうと申します。

今回の記事を書くにあたりまして前置きとして、決して、「この通りにやれば効率よく転職できる!」みたいな感じのスマートなものではなく、「泥臭くもがき、苦しんだ記録」として記しています。ですので、時には反面教師にしつつ、参考にできる部分がございましたら参考にしていただくといった形でお読みいただければ幸いだと思っております。

今回はこれからプログラマー/エンジニアとしてWeb企業へ転職を目指されている方を応援するため、私自身、知識ゼロの状態から学習をスタートし転職するまでの過程を踏まえたロードマップを共有します。

# 自己紹介

・年齢:26歳
・学歴:私立理系大学中退
・職歴:電話営業(契約社員を1年間)→テレアポスタッフ(アルバイト)
・プログラミング経験:一切なし

大学4年生の途中で休学して訪問営業の仕事をしていて、復学して研究(物理化学分野)を続けるか、興味のあった医薬の分野を0から学び直すかどうかで悩んだ挙句、退学して再受験勉強をする事を決心しました。

はじめは薬学部を目指していましたが、勉強を進める中で医学の分野にも興味を

元記事を表示

正規表現で記号が入った文字をチェックするには

#### お問い合わせなどの入力フォームで名前に記号などの文字が入っているかチェックしたい

記号が入っている名前はいたずらの可能性がある

正規表現で記号かどうかチェック

`[^!”#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]+`

でもこういうのもチェックしたい

`①②③㌢〒♡♢`

記号や機種依存文字を全部書いてもいいが、大変なので、いっそのこと許可する文字以外だったらNGにする
ひらがな、英数字、漢字、句読点、空白
`^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9ー、。\n\r]+$/u`

でもそうすると名前で使われている機種依存文字もNGになってしまう。

こういうやつ
`謹祐神﨑謁逸敏﨏㘴隆晴?海朗都羽㤗㟢﨑々猪猪隆繁飼祥塚悅悊惞惕愠`

今回はmysqlに登録してある正規表現に一致したらNGみたいな処理を使おうとしたが、限界なので、php側でチェックすることにした。

こんなやり方がある!

PHPで機種依存文字をチェック(https://mgng.mugbum.info/60)

> mb_convert_encoding

元記事を表示

CakePHP4 クエリビルダー 記法まとめ

## 概要

クエリビルダーの使い方をまとめる。非推奨な方法が混じっているかもしれない。
詳しくは[Cookbook](https://book.cakephp.org/4/ja/orm/query-builder.html)を読むこと。

命名は[規約](https://book.cakephp.org/4/ja/intro/conventions.html#id4)に則っているものとします。
実際のDBのテーブル名はスネークケース、CakePHPで使用するモデル名はパスカルケースで記述しています。

使用している CakePHP のバージョンは 4.3.6

## まずはクエリを発行してみよう

とりあえずSQLを発行できなければ始まらない。そのための準備

“`php
use Cake\ORM\TableRegistry;

// “users”テーブルを使いたいので、UsersTableクラスのインスタンスを取得
// @var \App\Model\Table\UsersTable
$users = TableRegistry::getTableLocator()->get

元記事を表示

カテゴリ別お知らせ機能をつくる時にやること

1.wordpress化
2.index.phpのお知らせを表示したい部分に以下を記述、カスタムフィールドでそれぞれのカテゴリを作って、スラッグの部分にカテゴリの名前(当てたいCSSを書く)、それぞれのスラッグ名のクラスにCSSを当てたものを用意するとカテゴリ別に色分けできる
“`

cat_name; //カテゴリー名
$catslug = $cat[0]->slug; //スラッグ名
?>

元記事を表示

【php】SplFileObjectでcsvを読み込む前に(SJIS-win → UTF-8)

SJIS-winからUTF-8にエンコードする時は注意が必要。

“`php:before

public function convertCsv($filePath){
$csv = new SplFileObject($filePath);
$csv->setFlags(
\SplFileObject::READ_CSV | // CSV 列として行を読み込む
\SplFileObject::READ_AHEAD | // 先読み/巻き戻しで読み出す。
\SplFileObject::SKIP_EMPTY | // 空行は読み飛ばす
\SplFileObject::DROP_NEW_LINE // 行末の改行を読み飛ばす
);

$readData = collect($csv)->map(function($data,$key){

元記事を表示

ポケモンWordleの最適な初手を考えてみた

## はじめに

最近ポケモンWordleにハマっています。
効率よくクリアするための最適な初手はなんだろう?と疑問になったので自分なりに分析して調べてみました。

## ポケモンWordleとは

https://wordle.mega-yadoran.jp/

ポケモンの名前を当てるクイズゲームです。
ポケモンの名前を入力して得た情報を頼りに答えのポケモンを当てるゲームです。
詳細なルールは以下です。
![スクリーンショット 2022-03-31 11.55.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/9ca58009-948b-d300-65db-38ba83952faa.png)

## 先に結論

![369.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67471/57f3a50f-b6e5-aa78-f250-c0216d4c0693.png)
僕の分析の結果、最適な初手は「**ジーラン

元記事を表示

複数選択可能な入力フォームで、リクエストされたIDとDBに格納されているIDで差分がある場合、削除したり更新したりする。

# はじめに

今回、個人開発で提案商品という複数選択可能な配列形式のフィールドをforeach文で回しつつ、下記のような
処理を実装する機会があったので今後の自分用の忘備録として記事をまとめていきます。

・送られてきた提案商品IDとDBに格納している提案商品IDに差分があった場合、DBに格納されている提案商品のレコードを削除。

・そもそもリクエストとして送られてきた値に、提案商品IDが含まれておらず、その代わりに他の値が入っていた場合は
提案商品テーブルにレコードを新規作成。

・送られてきた提案商品IDと、DBに格納されている提案商品IDに差分がない場合、一致する場合はその提案商品IDのレコードの修正内容を更新する。

# 前提条件

仕様としては、提案商品編集というボタンがあり、そのボタンを押すと各商品、提案内容を入力出来て
商品名と、提案内容のセットが複数登録出来るという内容です。

提案商品テーブルに、商品IDが56、57のレコードが元々登録されていて、どちらかの商品を削除したい場合は
商品名の横に ×ボタンが付いており それを押すとフロント側でその商品の表示が削除され

元記事を表示

PHPにおけるDTOとはどうあるべきか?を今更考えてみた

今更ながらPHPにおけるモデル(DTO)とはどうあるべきか?を考えてみた。
(php8.0前提)

### 私の結論

まずは結論から。上司に怒られっからね!

“`php
$value) {
match($key)

元記事を表示

Cloud Run→Cloud Storageの画像保存

メモはたくさんあるのですが、まとめる時間がないです。

## とどいた案件
「Google Cloud(以下GCP)でWebアプリ走らせて」

お、おう、、、

## このタイミングで
いずれAWSかGCPに取り組まなきゃと思ってましたが、まさかのこのタイミングで、、

## 環境
PHP7 Laravel8.x Dockerつかってます

## Cloud Runここが困ったぞ

コストカットのために未使用時はサーバがすぐに止まる設定にしているのですが、**アップロードした写真など**はアクセス終了後に消える仕様らしい。

なので、デプロイ後にアプリからアップロードしたプロフィール写真や、発行したPDFなどはサーバがお眠りになると消えるらしい。

で、いろいろググると、S3か、FTP(SFTP)がオススメらしいと。

S3は別のバックアップで使っているのですが、お客様にまたS3を契約してもらうのは億劫なので、**Google Cloud Storage**を利用することにしました。

## Cloud RunからCloud Storageにどうやってアップするの?
### よくわか

元記事を表示

LaravelのCashierでwebhookをイベントリスナでアレコレしようとして困った話

## ■ はじめに

当記事は

https://qiita.com/smtwtfs/items/daffbacd54f1dbc3df7b

↑この記事からの続きです。

Stripeのwebookのことについて書きますが、
Laravelでwebhookをどうやって使えるようにするかの詳細や、
ngrokでwebhookをテストできるよ、ということなどについては
既にたくさん良い記事がありますので
(記事を書いて下さった皆様大変お世話になりました?‍♀️)
当記事ではLaravelでStripeからwebhookを受けることができるようになったという前提で、
その後イベントリスナを活用しようとして
少し困ったことがあったので、そのときのことを備忘録的に残しておきたいと思います。

## ■ ありがとうCashier、ありがとうwebhook
LaravelのCashierではStripeからのwebhookを受けて色々な処理をしてくれます。
Cashierでwebhookを処理できるようにするには、
>[Laravel 8.x Laravel Cashier (Stripe)](ht

元記事を表示

プログラミングを学んで半年の感想

## プログラミング学習スタート

2021年5月からプログラミングって何かなという好奇心で学習を始めました。
初めはpythonがわかりやすいという記事を読んだので、pythonを触ってみました。
pythonの基本文法と、ゲーム作りを実践してみましたが、
結構面白くてプログラマーになるための情報を集めながら色々触ってみました。

2021年は下記の項目を学習しました。

– python
– html
– css
– javascript
– php
– Linux
– AWS
– mySQL
– git

学習中に気づいたこととして、
いつも使っているアプリやウェブサービス全てがプログラミング言語で書いていることでしてさらに学習のモチベーションになりました。

まずはフロントエンドとバックエンドを経験して、もっと面白い領域を深掘りしようと思いました。

## フロントエンド
– HTML, CSS, Javascript

### 習ったこと

– HTML,CSS,Javascriptの基礎
– CSSのFlexible Boxを利用した配置方法
– CSSでhoverなどのア

元記事を表示

予定管理アプリを作ってみた

Wenサイト: https://plan.towelman.server-on.net/sign_in

# 動機
 自分で予定管理をしようと思ったときに一つのプロジェクトごとに、複数人で管理できるような物が欲しくなり探してもこれといってピンとくるものがなかったため自分で作ってみようと思った。

# 大雑把な機能
 基本予定をプロジェクト単位で分ける。そしてプロジェクトは2種類ある。一つ目は複数人で管理・参画でき、「やること」の担当をそれぞれに割り振ることができて、期間を指定する「パブリックプロジェクト」である。基本的になにかの目的をなすための計画を管理するのに使うプロジェクトで使い方次第で1人でも複数人でも使えるようになっている。また、複数人で使い、自分以外にも計画に変更を加えさせたい人がいる場合はその人を管理者にすることによって実現可能である。そして二つ目は自分専用の期間を指定できない「プライベートプロジェクト」である。これはなにかの目的をなすための計画ではなく、日常で自分がやらないといけない「やること」を管理するプロジェクトだ。このプロジェクトで「入浴する」、「掃除する」などの「

元記事を表示

MAMPのローカル環境では動くのに、サーバーにアップするとphpが動かない(HTTP500エラー)

## サーバーのphpのshort_open_tagがoffになっている可能性
short_open_tagは、phpを省略して書く方法

## その情報を見るには
ファイルにinfo.phpという名前のからファイルを入れてアップ、アドレスバーにそこまでのファイルのパスを書く。
→サーバーの設定情報一覧が出る

## 解決策
info.phpページのuser_ini.filenameに書いてあるファイルの名前を作ってアップする
そこにshort_open_tagをオンにする記述して、アップする
例).user.ini

記述するコード↓
https://helog.jp/php/short_open_tag/

元記事を表示

OTHERカテゴリの最新記事