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

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

LaravelでCSVファイルをエクスポートする

### やりたいこと
**Laravelを使って、テーブルから取得したデータをCSVファイルとしてダウンロードする**

CSVファイルのエクスポート(アップロード)については別の記事にまとめたのでそちらを参照ください。
https://qiita.com/gohandesuyo/items/18ad77bad0b7e068d6f7

ここではテーブルを用意して、テーブルに格納されたレコードを取得する実装例とします。サンプルとなるテーブルの定義は以下の通りとします。
DBはMySQLを前提としています。

|カラム|型|PK|not null|unique|
|:–:|:–:|:–:|:–:|:–:|
|id|int|〇|〇|〇|
|login_id|varchar(20)||〇|〇|
|password|varchar(255)||〇||
|name|varchar(255)||〇||
|email|varchar(255)||〇||
|created_at|timestamp||〇||
|updated_at|timestamp||〇||

### 実装方法
CSVエクス

元記事を表示

管理者のみに新規ユーザー登録を許可する[laravel8.*, laravel/breeze]

社内システム的なものを作る場合、Laravel標準のユーザー登録では好ましくない動作をしてしまうのでそこをいい感じに修正します。
**Laravel標準の動作**
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン

**このように修正します。**
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない

## version
“`
PHP 8.0.11
laravel/framework 8.65.0
laravel/breeze 1.4.2
“`

## guestの新規ユーザー登録をガードする
/routes/auth.php

“`
Route::get(‘/register’, [RegisteredUserController::class, ‘create’])
->middleware(‘guest’)
->name(‘register’);

Route::post(‘/register’, [RegisteredUser

元記事を表示

管理者のみに新規ユーザー登録を許可する[laravel6.*, laravel/ui]

**1年近く前に書いた記事が下書きに眠ったままでした…**

社内システム的なものを作る場合、Laravel標準のユーザー登録では好ましくない動作をしてしまうのでそこをいい感じに修正します。
**Laravel標準の動作**
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン

**このように修正します。**
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない

## version
“`
laravel/framework 6.18.41
laravel/ui 1.2.0
“`

## 管理者のみユーザー登録できるようにする
参考サイト
[Laravel:管理者のみに新規ユーザー登録(register)を許可](https://qol-kk.com/wp2/blog/2019/01/18/post-1045/)
こちらを参考にファイルをいくつか修正しまし。
## ユーザー登録処理後の動作を変更する
ここからが本題です
vendor以下を変更すると後々大変ですので、それを避けつつユーザー登録処理後

元記事を表示

CodeIgniterでNamespace declaration statement has to be the very first statement or after any declare call in the script のエラー

# エラー画面

![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1969082/7ff550e7-bab6-2b51-6ab6-8177ee406dc6.png)

“`
Namespace declaration statement has to be the very first statement or after any declare call in the script
“`

最初に余計なもんを書き足すなと怒られた。

# 解決策
コメントアウトを上にしてあったのが原因でした…

元記事を表示

【Laravel】ルーティングで定義していないURLにアクセスしたときに自動的にリダイレクトさせる。

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

ルーティングで定義されていないページにアクセスした場合、404エラーを表示するのではなく自動的にリダイレクトさせる方法をメモ。

#やり方
Route::fallbackをルーティングに追記する。

“`routes\web.php

元記事を表示

【Laravel】SQLインジェクション対策(LIKE句)

# **問題**

派手なSQLインジェクションは一般的なWebフレームワークを使用すれば基本的に発生しません。
しかし、LIKE検索を行う場合はDoS攻撃が成立してしまうことがあります。
`LIKE “%a%b%c%d%e%e%f%g%@%.%”`
上記のようなクエリはSQLエンジンに大きな負荷をかけます。
LIKE句のメタ文字はエスケープする必要がありますが、

“`php
$query->where(‘hoge’, ‘LIKE’, ‘%’ . $value . ‘%’);
“`

と直に書いてしまうケースは多いと思います。

# **対策**

LaravelでのこのLIKE句のインジェクション対策はおそらく3通りほどあると思うので、
それぞれのソリューションをご紹介していこうと思います。

## **1. macroを用意する**
まずBlueprintのmacroを定義するために、
サービスプロバイダを新しく作ります。(AppServiceProvider.phpに書き込む方法もある。

“`shell
php artisan make:provider Bluepri

元記事を表示

laravel collective 間違いやすい箇所

# なんでもtokenを書くべきじゃない

“`php
Form::open([‘url’ => ‘home’])

//↓HTMLではこう書かれていることになる


“`

自動的にCSRFトークンが追加されて出力される。

そのためこの直後に

“`php
{{Form::token()}}
“`

は必要ない

重複していた
{{Form::token()}}を書くとf12で調べると↓ができてた(無駄に)

“`php

“`

# 意外に間違われているlabel

“`php

元記事を表示

転職活動管理アプリを作ろう⑦(各メニューの作成=完成)

前回の記事は [コチラ](https://qiita.com/soso555/items/1d355c30c176c2bc396a)

# 概要
– [テーブル定義した内容](https://qiita.com/soso555/items/89acdd45e88d0e0251f1) をもとに各メニューを作るだけだが、それぞれ特殊なことをやったので手順を記す

# 各テーブルごとの作成手順
## エージェント
– [以前実施した内容](https://qiita.com/soso555/items/5f69b0e159e1087a17ab#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E4%BD%9C%E6%88%90) を参照

## エージェント担当者
– マイグレーションファイル、モデル、コントローラの作成はエージェントと同じ
– マイグレーションファイル
– 外部キー(エージェント:エージェント担当者=1:多)の設定

“`php
Schema::create(‘agent_recruiters’, funct

元記事を表示

PHP 順列処理

・目的
順列の理解

①他の記事を参考にしたもの。

“`nPr.php
// r

$v){
// v を除いた配列
$arr_except_one = array_filter($arr, function($key) use($k) { return $key !== $k; }, ARRAY_FILTER

元記事を表示

FuelPHP – deleted_atの名前を変更した時のモデルの設定

論理削除の`deleted_at`から`leaved_at`に変更した場合にモデルを以下のように設定する。

“`php
protected static $_soft_delete = array(
‘deleted_field’ => ‘leaved’, // _atを含めない
‘mysql_timestamp’ => true,
);
“`

元記事を表示

Dotenv.phpのエラー

非常にレアケースですが、Dotenv.php でエラーが出る場合があります。

“`
PHP Fatal error:
Uncaught Symfony\Component\Dotenv\Exception\FormatException:
Invalid character in variable name in “/var/www/html/bin/../.env” at line 18.
“`
#原因
.env の書式に問題がある可能性が高いです。

“`
変数=値
#コメントアウト
“`
.envの中で許される書式はこの2つだけです。

#.envでよくやってしまうミス

“`
// コメントアウト
; コメントアウト
“`
上記のように、コメントアウトの記号を間違ってしまう。
Javascript と同じように `//` でコメントアウトしちゃったり
VSCode の `CMD+/` ショートカットキーを押すと `;` が入る事がある。

“`
変数:値
“`
`json` や `yaml` から環境変数のコピペをした時に `:` をそのままにしている場合が

元記事を表示

【Eloquent】条件に当てはまるもの・またはNULLであるものの抽出

便利なメソッドが見つからなかったので、単にorWhere条件で抽出する。

“`php
// 例:掲載終了日時が到来していない・もしくは掲載終了日時がNULLの記事を取得する場合
$articles = Article::whereDate(‘display_end_date’, ‘>’, now())->orWhereNull(‘display_end_date’)->get();
“`

他にも条件がある場合はA & (B or C)になるようにクロージャを使用する。

“`php
// 例:ID > 1000のうち、掲載終了日時が過ぎている・もしくは掲載終了日時がNULLの記事を取得する場合
$articles = Article::where(‘article_id’, ‘>’, 1000)
->where(function ($query) {
$query->whereDate(‘display_end_date’, ‘>’, now())

元記事を表示

Drupal のバックアップ

こちらの続きになります。

https://qiita.com/JQinglong/items/7ce6e09ef06950dcaf79

Backup and Migrate

https://www.drupal.org/project/backup_migrate

を使って、バックアップを取ろうとしましたが、

“`
Cannot connect to the database because the MySQLi extension is missing.
“`

というエラーが発生しているので、対応します。

## MySQLi

MySQLi エクステンションを有効にすれば良いのか?
そのためには、php.ini に、記述を追加する必要がありそうです。

https://stackoverflow.com/questions/10646655/the-mysqli-extension-is-missing-please-check-your-php-configuration

では、php.ini はどこにあるのか。

drupal では、管理画面から、phpinf

元記事を表示

MysqlでNULLのカラムをカウントする方法

#はじめに
outer joinしたテーブルでNULLを含むカラムをカウントした結果をorderByで並び替え用とした時にNULLのレコードがカウントされなかった。
NULLのレコードもカウントする方法を備忘として記録する。

#事例
tableA ※nameはユニークとする

| id | name |
|:———–|————:|
| 1 | aaa |
| 2 | bbb |

tableB

| id | point |
|:———–|————:|
| 1 | 10 |
| 1 | 20 |

“`
DB::table(‘tableA’)
->leftjoin(‘tableB’, ‘tableB.id’, ‘=’, ‘tableA.id’)
->orderBy(DB::raw(‘count(point)’)
->groupBy(‘tableA.id’)
->get();
“`

Laravel

元記事を表示

LaravelでCSVからデータをインポートする

### やりたいこと
**リクエストで送られてきたCSVファイルの内容を取り込んでテーブルにインサートしたい**

これがやりたくてLaravel(PHP)でのCSV取り込み処理を色々と調べていたのですが、fgetcsv関数を使ってファイルを1行ずつ読み込みながらループしながら処理していく流れの記事が比較的多かったような印象を受けました。
けどせっかくLaravelを使うならCSVの内容をコレクションに変換して処理していく方が簡単なのでは?
と思ったので、そっちの方法で実装試してみました。
結果、思ったより楽に実装できたので、LaravelでCSV取り込みを実装する必要がある場合に、実装例の1つとして参考にしてみてください。

Laravelのコレクションの詳細は[こちら](https://readouble.com/laravel/8.x/ja/collections.html#method-chunk)

※ここではバックエンドの実装例のみ載せます。フロントエンドの技術は何でも良いですが、CSVファイルがpostで送信されてくる想定で話を進めます。

### テーブル定義
ここでは

元記事を表示

Laravel 6.xで削除機能

自分用の削除機能の備忘録。
今回は削除画像を押下→「削除しますか?」という確認→OKで削除 の流れを実装します。

**view**

“`php:index.blade.php

@foreach($posts as $post)

{{ $users->username }}

{{ $post->post }}

認可

認可について

ポリシーを登録する
AuthServiceProvider.php
→※AppServiceProvider.phpと間違いやすいので注意する

“`php

元記事を表示

記事のタグをselect multipleで

↓新規投稿画面

“`php
WindowsでGitLab+SonarQube連携と時々UnitTest

全部Gitlabや、SonarQubeを全部ローカルに立てて、好き勝手やろうと思ってましたが、Dockerのネットワークについて不勉強すぎたので、gitlab.comの力を借りて構築しました。
今回は個人的に美しくない感じがあり、『一応これでも連携しているな』レベルです。
誰かの参考になればという気持ちと、自分の振り返りのために残していこうと思います。

# 環境

– Windows(10, ホストマシン)
– Docker Desktop for Windows(20.10.8)
– PHP(7.4.4)
– CakePHP(4.x系)
– SonarQube(7.9.5 CE, コンテナ)
– Sonar Scanner(4.6.2.2472, Windows版)
– GitLab Runner(14.3.2)
– PowerShell(5.1.19041.1237)

# 事前準備

– Docker Desktop for Windowsのインストール
– [Docker Desktop for Windowsインストーラー](https://hub.docker.com/

元記事を表示

【PHP】高等技術なコントロールブレイク

“`PHP
‘田中’, ‘国語の点数’ => 777],
[‘name’ => ‘渡部’, ‘国語の点数’ => 62],
[‘name’ => ‘品川’, ‘国語の点数’ => 23],
[‘name’ => ‘品川’, ‘国語の点数’ => 4343],
[‘name’ => ‘滝谷’, ‘国語の点数’ => 93],
[‘name’ => ‘川原田’,’国語の点数’ => 55],
[‘name’ => ‘一色’, ‘国語の点数’ => 27],
[‘name’ => ‘一色’, ‘国語の点数’ => 89],
[‘name’ => ‘高橋’, ‘国語の点数’ => 555],
[‘name’ => ‘高橋’, ‘国語の点数’ => 9999],
];

foreach ($res as $val) {
$name = $val[‘name’];
$abc = (int)$val[‘国語の点数’];
i

元記事を表示

OTHERカテゴリの最新記事