PHP関連のことを調べてみた2023年01月18日

PHP関連のことを調べてみた2023年01月18日

JANコードのチェックデジットを計算する

JANコードのチェックデジットを計算する

protected function calculateCheckDigit($code)
{
// JANコードの前12桁を取得
$checkCode = substr($code, 0, 12);
$sum = 0;
for ($i = 0; $i < strlen($checkCode); $i++) { // 奇数桁は1、偶数桁は3をかけて足す $sum += (($i+1) % 2 == 0 ? 3 : 1) * $checkCode[$i]; } // 総和の下1桁の数字を10から引く、10なら1の位は0なので、下1桁をチェックデジットとする $CheckDigit = (10 - $sum % 10) % 10; // チェックデジットが一致しない if ((int)$CheckDigit != (int)sub

元記事を表示

ブラウザのリロードによるフォームデータの二重登録を抑止する

フォームで送られたPOSTデータをデータベースに登録するページを作っていて遭遇した、ちょっとした問題。

> php経由でデータベースに登録後、完了ページを表示したところで、意図した表示にならないためソースを見ようとした
>  ↓
> 「フォーム再送信の確認」と出て再送信するまでソースが見られない
>  ↓
> 再読み込みする
>  ↓
> 先ほどのPOSTデータがデータベースに二重登録されてしまった

という次第。
実際、ユーザー側でリロードしてしまうこともあるわけで、これを抑止する方法を模索した。
ざっと検索するとJavaScriptでやる方法はあるようだが、スクリプトが面倒だし(自分が得意じゃないというのもある)、何より

> ユーザーの行動をシステム側で制限すべきではない

とか書いてあったりするので、物理的にリロード禁止するのはよろしくないようだ。
となれば、リロードしてもデータが登録されないようにすればよいわけで、[こんなページ](https://www.system-ido.com/risouken/index.php?page=tech&num=6)を参考にしてみたとい

元記事を表示

phpMyAdminが文字化けした –20年(?)ぶりにLinuxをいじってみる06

Mysqlに日本語データを登録するphpを書いて実行したら、phpMyAdmin上で文字化けを起こしていたという話。
登録データをphpで引っ張り出してみたところ、ブラウザ上では特に化けておらず、ん~? というわけで困ったらググる。

[MariaDB, インストール直後にやるべき作業。初期設定は常識です。 | ただ屋ぁのブログ](https://tadtadya.com/mariadb-things-to-do-right-after-installation/)

常識を知らなくてごめんなさい。

“`
# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 56
Server version: 10.5.16-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ fo

元記事を表示

今度の壁はphpMyAdminのログインだった –20年(?)ぶりにLinuxをいじってみる05

やっとPHPインストールまで辿り着いた。
“`
$ sudo dnf -y install php
“`
からの
“`
$ php -v
PHP 8.0.20 (cli) (built: Jun 8 2022 00:33:06) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.20, Copyright (c) Zend Technologies
with Zend OPcache v8.0.20, Copyright (c), by Zend Technologies
“`
でお決まりの
“`
$ sudo systemctl restart httpd
“`
で無事起動完了。
これ、`phpinfo()`で見るとServerAPIがFPM/FastCGIになっている。
モジュール版じゃあないんだね。
ググったんだがモジュール版をCGI版にする方法はたくさん見つかるんだが逆がない。
とりあえずそのまま。

ついでに
* php-gd
* php-mysqlnd
* mariadb
*

元記事を表示

Symfony 入力フォームとボタンを縦並びでなくて横並びにしたい

タイトル通りです。
form_widgetで一行で書くと縦に並びます。

#### before

“`XxxxxxxController.php
$form = $this->createFormBuilder()
->add(‘input’, NumberType::class)
->add(‘search’, SubmitType::class, [‘label’ => ‘検索する’])
->getForm();
“`

“`index.html.twig

{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}

“`

分けて書いたら横並びになりました。
#### after
“`index.html.twig

{{ form_start(form) }}
{{ form_widget(form.

元記事を表示

Symfony FormBuilderでlabelを消したい

Symfony初心者です。
twigを使っていますが、通常、twig上でphpの関数が使えず、viewでロジックを書かせないという強い意図を感じます。

さて、FormBuilderでlabelを消そうとして、調べても情報が見つかりませんでした。
古い情報も多いですね。

ソースの中を見てもわからなかったのですが、試行錯誤した結果、labelをfalseにするとラベルを消すことができました。

これに限らず、symfonyでよいドキュメントがあったらコメント欄で教えてください。
公式に載ってないこともあり、調べるのに時間がかかってしまいますね。

#### 前提
Symfony 5.4

“`XxxxxxxxController.php
#[Route(‘/xxxxx’, name: ‘xxxxx’)]
public function index(Request $request): Response
{
$form = $this->createFormBuilder()
->add(‘input’, NumberT

元記事を表示

【Laravel 9】複数のMiddlewareと実行の優先度を指定する

## ミドルウェアとは..?
リクエスト処理の前後に実行したい処理を定義できる機能!

## ミドルウェアの作成
artisanコマンドで作成できる。

“`php
php artisan make:middleware Hoge
“`

## 処理を書く

“`php

元記事を表示

【PHP】文字化けせずに文字を抜き出す方法

# 先頭の1文字を取得したい

## mb_substrを使う
“`php:qiita.php
mb_substr(“文字”,0,1);
“`
* 結果
“`

“`

## バイトで指定したいときはsubstr
“`php
substr(“moji”,0,1);
“`
* 結果
“`
m
“`
:::note warn
バイト指定なので文字を指定すると文字化けします
:::

元記事を表示

【初心者】Laravel Migration コマンドまとめ

# はじめに
コマンドを打つ際に毎回調べてという事が面倒くさいと思ったことはありませんか?
今の時代調べれば何でも出てきますから、何回も調べたらいいと思っていませんか?
でも、マニュアルを見ても、全てが1ページにまとまっていることは少ないと思います。
私はPHPの初心者ですが、マイグレーションとは、どのような時に、どのような目的で行うことなのかが曖昧で、初めてwebアプリケーションを作成した時に、一番多かったエラーはマイグレーションを実行していないことが原因のエラーが一番多かったです。
そこで、マイグレーションに関連するコマンドを、まとめました。

## マイグレーションに関連するコマンド一覧

マイグレーションを実行する

“`bash
$ php artisan migrate
“`

直前に実行したひとまとまりのマイグレーションをロールバック
(ロールバックをする際には、データのバックアップを取ることをお奨めします)

“`bash
$ php artisan migrate:rollback
“`

全部ロールバックしてからマイグレーションし直す
(ロールバックをする際

元記事を表示

マルチバイト対応(PHP)

マルチバイト対応のプログラムのサンプルプログラムです。

“`html






ビルトイン関数4(マルチバイト対応)



元記事を表示

PHP関数の引数が覚えられない

# PHP関数の引数が覚えられない
PHP関数の引数の順番が覚えられなくてそのたびググっている。特に引っかかるやつを挙げていく。

## 集合から1つの要素を探すような関数

“`php5
in_array(mixed $needle, array $haystack, bool $strict = false): bool
“`
needle(要素)が先でhaystack(集合)が次

“`php5
array_key_exists(string|int $key, array $array): bool
“`
key(要素)が先、array(集合)が次

“`php5
array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false
“`
needle(要素)が先でhaystack(集合)が次

“`php5
strpos(string $haystack, string $needle, int $offset = 0): int|false
“`
haysta

元記事を表示

PHPの視点でTypeScriptを勉強してまとめてみました

普段PHPとJavaScriptを使って開発していますが、TSを触る機会が増えたので勉強したものをまとめてみました。

# Primitive タイプについて

### PHPとTSが存在するprimitive型

| PHP | TypeScript |
|:-:|:-:|
| int | number |
| float | number |
| string | string |
| bool | boolean |
| Undefined variable エラーになる | undefined |
| mixed | any |
| void | void |

objectとarrayについては下にまとめます。

### 変数定義時の型定義

“`php:PHP
// 通常の変数定義
$a = 5.5;

// このように定義するとSyntaxエラーが起きる
float $a = 5.5;
“`

“`ts:TypeScript
const myStr: string = “”;
const myNullableStr: string|null =

元記事を表示

Laravelで日付操作をする場合は、Carbonではなく「CarbonImmutable」を使用する

## Carbon処理の意外な落とし穴
普段何気なくCarbonを使用していないでしょうか?私もハマったのですが、Carbon処理には以下のような落とし穴が存在します
“`PHP
addDay();

if ($now->format(‘Y/m/d H:i:s’) !== $tomorrow->format(‘Y/m/d H:i:s’)}) {
echo “期待する結果です!”;
} else {
echo “意図しない結果です”
}
“`
このコードは、`$now`と`$tommorow`は別々の日付を代入しているので、`期待する結果です!`という値が表示されるはずです

実行結果:
“`
意図しない結果です
“`
なんということでしょう・・・。`$now`と`$tommorrow`が等しいと評価されています。これは、**「Carbonのメソッドを呼び出したインスタンス自身が書き換えられる**」ことが原因です

つまり、下記コード

元記事を表示

エンジニアインターン3日目

今日はテスト環境からwordpressのテンプレートを作成した。
データベースから商品の品番、商品状態、色を取得して、商品の最新の値段を更新する仕組みを作った。
phpにsql文とwordpressからget_field()を使って値を取得し、その値に合った商品の最新の値段をデータベースから読み込んでhtmlに表示させた。
mysqlからデータを読み込む場合は情報を守るためのセキュリティーも大事になってくる。$query = 変数->prepare(SELECT文 %s,変数…)この記述でデータを守ることができる。$変数のところを%sに置き換え、sql文の最後に%sに置き換えた変数をコンマ(,)区切りで順番に書いて、$変数=$wpdb->get_result($query);を記入すれば完成だ。
インターンに参加して初めて大まかなタスクを任されてうれしい気持ちと責任感を感じた。早く自分が成長し、もっと多くのタスクを任されるようになりたいと思った。一つ一つ経験を積み、身に覚えさせて自信を持ってコードを書いていきたい。

元記事を表示

PHPにおける名前空間について改めて学習する

## PHPにおける名前空間について改めて学習する
PHPやLaravelを扱っているとほぼ必ず目にするのが名前空間。
なんとなくだった理解をもう少し深くするために今回まとめていきます。

### 名前空間とは
PHPにおける名前空間とは一言でいうと、`プログラム内で同じクラス名や関数名を使用しても競合しないように区分けをすること`。

プログラムにおいて、同じ名前のクラスや関数を定義するとエラーが起こります。
競合しないためには、名前が被らないようにする必要があり、被らない長い名前にする必要がありますがそれだとソースコードの可読性が低くなってしまいます。
そこで名前空間を用いてあげます。

名前空間を用いることで、それぞれが独立した空間となり、
自由に名前をつけてあげることが可能となります。

別の空間に同じ名前のクラスや関数があったとしても競合することがありません。

### 名前空間の作り方
名前空間では、ソースコードの一番上部分に`namespace`というキーワードを使って指定してあげることができます。
このように記載をすると、TestGroupという名前空間を指定すること

元記事を表示

【Wordpress】if文の覚え方(イメージの仕方)

# はじめに
Wordpress(以下、WP)でのWEBサイト構築では基本的な処理を使うことがほとんどですが、頻繁に使うことがないと「あれ?」っとなってしまう【条件分岐】。
プログラミングをやったことがない方だと何となく敷居が高く感じる。
でも何とか覚えたい!と言う人向けに、条件分岐で使うif文を書く際ののイメージの仕方を記事にしました。

:::note info
WPのテーマを自作しようと考えている方は、こちらでテンプレートの作り方を解説しています。コードもあります。
+ [【初心者向け】Wordpressテーマを自作する際に分かってると良いかもしれない事](
https://qiita.com/makkie/items/dc764c2845492079c0af)
+ `index.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する[index.php]](https://qiita.com/makkie/items/b5231a9f63b076c70af8)
+ `header.php`のコードを知りたいよって方はこちら
[【初心者向け

元記事を表示

【メモ】WordPressでPHPのカスタマイズ

# 【メモ】WordPressでPHPのカスタマイズ

## ■自分の状況

Laravel、Fuelなどでの開発経験があるが、WordPressにはふれたことがない。

自分の開発メモ、情報共有として。

## ■function.phpとショートコードを用いたサンプル

### ●現時点の理解

– function.php

→関数の定義ファイル。ここにコードを追加してカスタムする

→配置場所:/wp-content/themes/テーマの名前/function.php

​ →存在するテーマごとにfunction.phpが存在している。

​ →ファイルを間違えないように注意

​ →テーマの適用のし忘れ注意

– ショートコード

→テーマからfunction.phpを呼びだすための仕組み

### ●サンプル

#### function.php

パス:配置場所:/wp-content/themes/テーマの名前/function.php

“`php
function testFunc() {
// returnとバッファの利

元記事を表示

バリデーション(withValidator)

### withValidatorを用いたバリデーション

メモです。

検索窓にて、
金額の上限と下限を設定するときに
#### 上限値が下限値未満の際にエラーになるバリデーションを作成したかった。

以下の記事を参考にさせていただきました。
https://www.kamome-susume.com/laravel-withvalidator/

$validator -> after(
function($validator){
$使用する値1を入れる変数1 = 使用する値1を持ってくる
$使用する値2を入れる変数2 = 使用する値2を持ってくる
if(isset( 変数1) && isset( 変数2)){
if(ここで上限下限のif文の条件を作成){
  $validator->errors()->add(‘errorを表示する場所’, ‘エラー文’)
}
}
} ) ;

after の()を最後閉じ忘れないように

上限値を下限値未満にするとエラーが表示されました。

元記事を表示

PHPのメモ

## 日付と時間
[strtotime](https://www.php.net/manual/ja/function.strtotime.php)
UNIX タイムスタンプに変換する
[date](https://www.php.net/manual/ja/function.date)
UNIX タイムスタンプを書式化する

“`timestamp.php
// デフォルトのタイムゾーンを設定する
date_default_timezone_set(‘Asia/Tokyo’);

date(“Y-m-d”, strtotime(“now”)); // 2022-12-16
date(“Y-m-d”, strtotime(“-5 day”)); // 2022-12-11
// “Y-m-d H:i:s”: MySQLのDATETIME
date(“Y-m-d H:i:s”, strtotime(“now”)); // 2022-12-23 11:56:09
“`
:::note warn
注意
日付の足し算・引き算を行うことはおすすめしない
→DateTime オブジェ

元記事を表示

【PHP】in_arrayではなくissetとarray_key_existsを使おう

# in_arrayではなくissetとarray_key_existsを使おう
## 理由
* in_arrayよりもissetやarray_key_existsの方が断然処理が早いから。

## 使用方法
### issetの場合
“`php
$array = array(
“orange” => true,
“banana” => true,
“lemon” =>true
);
if(isset([‘orange’])){
echo “これはオレンジです”;
}
“`

### array_key_existsの場合
“`php
$array = array(
“orange” => true,
“banana” => true,
“lemon” =>true
);
if(array_key_exists(“ora

元記事を表示

OTHERカテゴリの最新記事