PHP関連のことを調べてみた

PHP関連のことを調べてみた

PHPでのSQL分の実行時の注意 – 備忘録(´・ω・`)

# 何この記事
その名の通り備忘録。
みんなが知っているSQLインジェクション対策で同じように間違えないように、、、
# 短い本編
初心者と経験者と分けて説明します。
今回使うテーブルにはサザエさん一家を使います。
テーブル名:Family
| ID | Name |
|:-|:-|
|1|フグ田サザエ|
|2|磯野波平|
|3|磯野フネ|
|4|フグ田マスオ|
|5|磯野カツオ|
|6|フグ田タラオ|
|7|磯野ワカメ|
|8|タマ|

### 初心者
PHP触りたてほやほやの人が書きそうな文
“`PHP
$ID = 1;
$sql = “SELECT*FROM `Family` WHERE ID = ‘” . $ID . “‘;”;
$stmt = $dbh->query($sql);
“`
おや?SQL文が簡単そうですね。では、実行してみましょう。
#### 結果
| ID | Name |
|:-|:-|
|1|フグ田サザエ|

IDが1の人がヒットしました。さて、皆さんはお気づきかもしれませんが、この文では攻撃が簡単にされてしまうんです。
では、攻撃をしてみましょうw
`

元記事を表示

LaraveでCSSをresourcesディレクトリ内に配置する

# はじめに
今まで’***public/css***’ ディレクトリ内に配置していたが、’***resources/css***’ ディレクトリ内に配置する方法をまとめる

# 開発環境
Laravel 8
Node.js

# ‘***public***’ と ‘***resources***’ ディレクトリの違いについて

| ディレクトリ名 | 説明 |
|:-|:-|
| public | 外部から直接アクセス可能なファイルを格納するための場所 |
| resources | アプリケーションのリソースやソースコードを格納するための場所
Laravel Mixなどのビルドツールを使用して最終的な成果物が ‘***public***’ ディレクトリに配置される |

# Laravel Mixの設定
‘***webpack.mix.js***’ ファイルを編集し、どのCSSファイルをコンパイルし、どのJavaScriptファイルをバンドルするかを指定する
“`JavaScript:webpack.mix.js
mix.js(‘resources/js/app.js’,’

元記事を表示

備忘録:メール送信機能の実装(Laravel8)

## はじめに
備忘録として、メール送信機能の実装方法についてまとめた

## 開発環境
Laravel 8
Laravel-permission
※宛先判定のため、Laravel-permissionパッケージを導入

## 実装したいこと
ブラウザ上で送信したい本文を入力し、指定する宛先に送信する

## 環境構築
**.env**ファイルにメールサービスの設定を追加する。
“`php:.env
#Gmailを使用する例

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME=”${APP_NAME}”
“`

## Markdown Mailableクラスの作成
*Mailable*クラスを作成
同時に*Markdown*を使用することを指定する
“`ph

元記事を表示

【empty()関数】0がnull扱いになる事にハマった

# きっかけ
ハマったので簡単なコードでまとめる
実際には以下のようなテーブルでプルダウンを作って検索処理を実装した時に起きた
| 有効 | 無効 |
|—-|—-|
|0|1|
# 状況
プルダウンでりんごを選択した時に検索出来ない
“`php


“`
# 原因
empty()関数で0はnull扱いだった
りんごを選択した時、以下の条件式ではfalseになるため検索がかからなかった
“`php
if(!empty($all[“fruit”])){
}
“`
# 解決策
ひとまず以下の条件式で動いたがvalueの値に0を使わないほうがよかったかも
“`php
if($all[“fruit”] !=

元記事を表示

三項演算子で条件分岐させる

## はじめに
「依頼を探す」ページが表示される時は依頼の検索機能が、

そして「提案を探す」ページが表示される時には提案の検索機能が・・・

といったように、表示されるビューによって処理の内容を変えたい時は「三項演算子」を使うのが良いそうです。

https://www.php.net/manual/ja/language.operators.comparison.php#language.operators.comparison.ternary

> 『(expr1) ? (expr2) : (expr3) という式は、式1 が true の場合に 式2 を、 式1 が false の場合に 式3 を値とします。』(PHP公式ドキュメントより)

## 環境
PHP 8.2.7
Laravel 9.52.16

## 問題
* 検索フォームを実装しようとしている
* 提案・依頼の両方を検索できるようにしたい
* つまり、表示するビュー次第でルートを分岐させたい

“`php: commons.search_form.blade.php
{{– 今はまだ依頼の検索しかできないが、

元記事を表示

Laravel10 + Inertia + vue3で動的な多言語機能の実装

# 概要
laravelで動的な言語切り替えを実装しようとした際に情報があまり出ていなかったので備忘録も含めて実装のマニュアルを残そうと思いました

# 必要なものをインストール

### コマンド一覧
**多言語対応初期設定**
バックエンド側
`composer require laravel-lang/common –dev`

`php artisan lang:publish`

vue側
`npm i laravel-vue-i18n`

**対応言語一覧**
https://github.com/drobee/Laravel-lang/tree/master/json

# 実装
### Laravel側
“`php:/app/config/languages.php
‘English’,
‘ja’ => ‘日本語’,
‘vi’ => ‘Tiếng Việt’,
‘zh-CN’ => ‘汉语’,
‘tr’ => ‘Türkçe’,
‘ar’ => ‘اللغة العربية

元記事を表示

PHP 値の送信と受け取りをしてみる

## はじめに
PHPといえば値の入力フォームに入力した値を送信し、別で受け取ります。勉強していることのまとめなので完璧ではありません。参考程度にお願いします。

## 値の送信
“`php
//Post.php

//get.phpに送信
 //messageという名前でテキストを送信

“`
method=”get”はurlの後に値を付与します。
method=”post”はurlから見えません。

## 値の受信
値の受信にも色々ありそうですが今回は以下のやり方でやります。多分別は$_GETを使うものです。
“`php
//Get.php

“`
フォームから送信された値の取得にはfilter_inputを使いま

元記事を表示

PHP 別のファイルの読み込み

## はじめに
クラスや関数など書いた外部ファイルを読み込んで使うことがあります。自分用のまとめなので間違いや自分が完全に理解しているところに関しては省略して書いていることもあります。ご了承お願いします。

## requireかincludeで読み込む
同じフォルダ内にあるclass.phpというファイルを読み込んでいきます。
“`php
require(‘class.php’); //ファイルが読み込めなかったらその場で処理が止まる
include(‘class.php’); //ファイルが読み込まなくても処理が止まらない
“`
以下のような少し違う処理の書き方もあります。
“`php
require_once(‘class.php’); //ファイルを一度だけ読み込む
include_once(‘class.php’); //ファイルを一度だけ読み込む
“`
ぶっちゃけ_onceがどのように活躍するかわかりませんが、覚えておきます。

## 一応少しだけパスの書き方
今度自分が見返すようにサンプルパスを少し書いておきます。
“`php
require(‘class.ph

元記事を表示

PHP オブジェクト クラス

## はじめに
PHPのオブジェクトです。何年か前にpythonで少しやった気がします。自分用のまとめなので間違いや自分が完全に理解しているところに関しては省略して書いていることもあります。ご了承お願いします。

##クラスの定義
クラスはclass クラス名で定義します。
また、クラス名は大文字スタートです、
“`php
class Client{
}
“`

プロパティとメソッド、定数を定義していきます。
“`php
class Client{
public $number;
public $name;
public const VERSION = 1.0;

public function info(){
printf(‘顧客番号->%d、顧客名->%s’ . PHP_EOL, $this->number, $this->name);
}
}
“`
このthisってのがインスタンスのことって考えると覚えやすかったりした気がしてきたりします。
また、以下のように記述することでプロパティの型の指定が可能です。普通の書き方

元記事を表示

【Laravel Sail】ubuntuでsail upコマンドが実行できない場合

## きっかけ
Laravel Sailで`sail up -d`というコマンドを実行すると、以下のようなエラーが出る。
“`
docker is not running
“`

## 対処法
**Windows**の場合、先に以下のコマンドを実行する。
“`
sudo chmod 666 /var/run/docker.sock
“`
※ubuntuにログインした後に、上記コマンドを実行する。

元記事を表示

【Laravel】変数の値を確認する方法

## dd関数を使用する
`dd(変数名);`と記述すると、ブラウザに変数の値が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/d5eda7ca-3593-0fd0-b3a5-f3e907947c0e.png)

## 参考サイト
https://biz.addisteria.com/laravel_debug/

元記事を表示

Laravel Eloquent 不要なデータは取得しないようにしよう!

現在、Laravelの使用経験が半年を越えた学生エンジニアです。

Laraelには非常に便利な「Eloquent ORM」という非常に便利な概念が存在します。
主に以下のような解釈ができると思います。

1. SQLの簡略化
1. データベースへのインターフェース

ざっくりとご説明したいと思います。

## 「Eloquent ORM」と「Model」
LaravelはMVCモデルと呼ばれています。

**Model View Controller**の略です。
1. Modelを用いてテーブルからデータ取得
1. Controllerを用いてデータを処理
1. Viewで処理されたデータを表示

上記の流れで運用されるためです。(厳密にはもっとたくさんありますが!)

上記の1の工程がModelですが、
**Eloquent ORM と Modelはほぼ同義と考えて構いません**

では実際に効率的に書いていきましょう!

## なるべく不要な値を取得しない

“`
$attendances = Attendance::all();
“`
まず、Atten

元記事を表示

vscodeでDocker上のXdebug2を動かす

# 概要
VscodeでXDebug2を使うための設定を行いました。
Dockerを使っています。

※macでの確認はしていません。

githubのリポジトリは以下の通り。

https://github.com/RYA234/php-xdebug2-docker-vscode

# 開発環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/578a9062-15f0-1e2d-0be4-c0e0102bcfba.png)

名称|バージョン|説明
—|—-|—-
Docker|24.0.6|コンテナ型仮想環境
Windows|10|OS
XDEBUG|2.2.5|PHP用のデバッグ用の拡張機能
VSCODE|1.85.1|IDE
PHP Debug|1.34.0|VSCODEでXdebugを使えるエクステンション。

# dockerの起動方法

“`bash
# dockerコンテナをビルドする
docker-compose build

# do

元記事を表示

今までの業務にて経験したこと

広く浅く今まで触れてきたが、これよりは深く利用するようにキャリアを積んで行く予定。

# プログラミング言語
1. C
組み込み開発プロジェクトの際に利用
1. C#
デスクトップアプリの開発プロジェクト時に利用
1. HTML,CSS,JS,PHP
Webサービス開発プロジェクト時に利用

# 開発ツール
1. eclipse
1. Visal Studio
1. PhpStorm
1. Visual Studio Code

# ツール
1. Redmine
1. Redmine
1. Backlog

※本内容について後日更新を予定しています。

元記事を表示

【PHP/Slim4】3.軽量フレームワーク(Slim4-skeleton) Twig

## やりたいこと
Slim4のテンプレートエンジンを使ってみる
Twigがメジャーっぽいので、なんとなくTwigを使ってみようと思う

## Step1.サンプル環境の構築
[前回の記事を参照](https://qiita.com/miyaken3381/items/a63f70b65a01c8b77225)

## Step2.Twigのインストール
プロジェクトフォルダに移動後、以下のコマンドを実行
~~~js
composer require slim/twig-view
~~~

## Step3.Twigの依存関係を設定
dependencies.phpにTwigの依存関係を注入する
またsettings.phpでパス等の設定を切り替えられるようにしておく
#### app/settings.php
~~~php
return function (ContainerBuilder $containerBuilder) {

// Global Settings Object
$containerBuilder->addDefinitions([

元記事を表示

【2024年版】LaravelでIntervention Imageを使う方法

## 概要

PHPの画像処理ライブラリである**Intervention Image**の**バージョン3**を**Laravel**で使う方法について解説します。

先日、Qiitaの質問で「Intervention Imageがエラーで使えない」というものがありました。私も使ったことがあるので調べてみたのですが、どうやら2023年12月にバージョン2から3へアップデートされたようです。そして、それによって「Laravel Intervention Image」といったキーワード検索でヒットする記事の情報では導入できなくなってしまったので、この記事を執筆することにしました。

https://image.intervention.io/v3

## Intervention Imageのバージョンアップについて

https://image.intervention.io/v3/introduction/upgrade

上記のアップグレードガイドを参照すると、次のように記載されています。

> Intervention Image 3 は、以前のバージョンから引き継がれたコードが

元記事を表示

PHPでMySQLデータベースに接続

# PHPでMySQLデータベースに接続

### プリペアードステートメントとは
実行したいSQLをあらかじめ用意して、可変となるパラメーターは後から渡す仕組み

– プリペアードステートメントでパラメーターを可変にして名前で検索する場合
“`php:sample.php
“山田”)

// プリペアードステートメント
$stmt = $pd

元記事を表示

CakePHP2系の環境構築手順

# はじめに
この記事では、CakePHP2系の環境構築手順を解説します。
以前、私はCakePHP2系の案件に参画しておりました。
案件参画前にプライベートで学習しようと思い、下記の手順で自身のPCにCakePHP2系の環境を構築しました。
記事投稿時点(2024年時点)では、CakePHPの最新バージョンは5系で、2系は既にサポート終了しております。
非常にレガシーな技術であるため、正直下記の情報は役に立たない可能性が高いと予想しておりますが、念のため備忘録として残しております。

# 各技術とバージョン

– PHP 5.6
– MySQL 5.7
– CakePHP 2.10
– MacOS

# ゴール設定

Dockerを用いてCakePHP 2系の環境構築を行い、ウェルカムページが正常に表示されている状態を目指す。
↓ エラーありのウェルカムページと、エラーなしのウェルカムページの比較
【Qiita】ひとりアドベントカレンダー完走率を調査してみたよ

2022年から人数上限なしの[ひとりアドベントカレンダー完走賞](https://qiita.com/advent-calendar/2023/present-calendar#qiita_award)が新設されたことに伴い、2023年はひとりで[アドベントカレンダー](https://qiita.com/advent-calendar/2023/categories)を走る人がそこそこ見受けられました。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/28bbf8e6-6951-8fe3-bbe5-8ceaf8569ada.png)

ということでこれは、何名がひとりアドベントカレンダーに挑戦し、そのうちどれほどが完走したかを調べてみたという嫌がらせ記事になります。

なお調査のためのデータ抽出は2023/12/30に行っています。

# 調査結果

全アドベントカレンダー数、1203件。

うち、参加者がひとりのカレンダー、320件。
うち、完走数、98件。
うち、完走賞ぬ

元記事を表示

取得したページネーション内のデータを逆順で表示したい

### 取得したページネーション内のデータを逆順で表示したい

ページネーションしたデータの、中身を逆に表示したいとき、つまり下を最新のチャット、上を古いチャットにしたい時の方法です。

“`ChatController.php
$chats = Chat::where(‘channel’, $chid)
->orderBy(‘created_at’, ‘desc’)
->paginate(10); // 1ページあたり10件のメッセージを表示
“`
これでデータを取得してBladeに渡します。

bladeでは表示の際に、

“`chat.blade.php
@foreach ($chats->reverse() as $chat)

@endforeach
“`

foreachの中でreverseをするのですね。

#### よく考えると、、
ただよく考えると、foreachの中で$chatを上に追加していけばいいのかと。

参考:ChatGPT

元記事を表示

OTHERカテゴリの最新記事