見出し画像

PHPの基礎力を高める

今日は10時からお誘いいただいたもくもく会です!

いつも土日の勉強は夫婦でやってるけど、
やっぱり同じ目標があるみんなと一緒に勉強できると
気分あがりますね!

今日もPHPの続きをやっていきます。


1️⃣WEBアプリケーションについて

昨日のお昼はページング機能までやりましたが(難しかった)
そこに関わるいろいろな関数をそもそも理解していないので、
まずはそこを。

そもそもページングとは、
「WEBサイトに複数ページある場合、ページ番号や次へ、前へ、というボタンをつけてページを分けること」です。

ページング機能を実装する前に、決めなきゃいけないこと
・1ページあたりの最大表示数
・コンテンツの総数
・ページの最大数

ここでchatGPTに聞いた、簡単なページング機能の例を参考に考えます。

<?php
// サンプルデータ
$data = range(1, 20);

// 1ページあたりのアイテム数
$items_per_page = 3;

// 現在のページ番号を取得
if (!isset($_GET['page']) || !is_numeric($_GET['page']) || $_GET['page'] < 1) {
    $current_page = 1;
} else {
    $current_page = intval($_GET['page']);
}

// 配列から表示すべきアイテムを取得
$start = ($current_page - 1) * $items_per_page;
$items_to_display = array_slice($data, $start, $items_per_page);

// 総ページ数を計算
$total_pages = ceil(count($data) / $items_per_page);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Simple Pagination Example</title>
    <style>
        .pagination {
            display: flex;
            list-style: none;
        }
        .pagination li {
            margin-right: 5px;
        }
    </style>
</head>
<body>

    <h1>Simple Pagination Example</h1>

    <!-- ページングされたアイテムの表示 -->
    <ul>
        <?php foreach ($items_to_display as $item): ?>
            <li><?php echo $item; ?></li>
        <?php endforeach; ?>
    </ul>

    <!-- ページングナビゲーション -->
    <ul class="pagination">
        <?php for ($i = 1; $i <= $total_pages; $i++): ?>
            <li><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
        <?php endfor; ?>
    </ul>

</body>
</html>

ユーザー定義関数とスーパーグローバル関数いろいろとあるが、
そもそもわからない関数のあるので、その辺から。

isset()→変数がセットされているか否かを表す関数
is_numeric→関数の引数に指定された変数に数字又数字を表す数値文字列が格納されているかどうかを調べる関数
intval()→整数型にかえる関数
ceil()→引数に指定した数の小数点以下を切り上げて返す関数

前回も書いたが、
GETで送信されたパラメーターの取得用に$_GET
POSTで送信されたパラメーターの取得用に$_POST

すごい!こちらめちゃくちゃわかりやすい!!

ちなみに前回かいてた、パラメーターはこれが一番わかりやすい。
URLの後に「?(クエッション)」記号を記述して、その後 「key名=値」 と続けるクエリ文字列(なんとなくわかってたつもりだけど、言語化してくれるとありがたい🙏)

URLの具体例はこちら。
http://sample.com/index.php?key名=値&key名=値&key名=値

上の方から自分なりに読解すると、

①$_GET['page'](getしてきたパラメーターの中のクエリストリング)
・'page'というkeyがあり、そのvalueがあるかどうか**
・数字かどうか
・1より小さいかどうか
→どれかがtrueだったら、現在のページを1にする。
→そうでない場合は$_GET['page']を数値化する。

**上のURLの例でいうと、index.php?page=3とかがあるかどうかってこと

②そもそも$items_per_pageは各ページに何個の値を表示するかという変数

$start = ($current_page - 1) * $items_per_page;これを言語化すると
開始位置=(現在のページ番号−1)×1ページあたりのアイテムの数
→要するに、次のページの開始が、何番のアイテムからなのかを計算している、ということですね!

$items_to_display = array_slice($data, $start, $items_per_page);これに関しては
そもそもarray_slice(変数、開始、どこまで)という意味合いなので
データの中のstartからitems_per_pageまでの数を取得する、という意味です。
$total_pages = ceil(count($data) / $items_per_page);では
総合ページ数を計算しています。

具体的にいうと
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$items_per_page = 3;
で10割3すると、ページの数は3つ、1つ数値が余るので、
それを切り上げて4ページにする、という考え方です。

そこから先はforEachでアイテムの表示を順次おこない、
forでページ数の表示を順次していく、という形ですね。

ふぅ、理解に時間がかかったぜ!


次行きます。

2️⃣ページ間のデータの受け渡しについて

個人情報などのデータを複数ページの間で受け渡すためには
①非表示
②セッション
という方法があります。

たまにわからないループに入るからメモ。
"GET は主にデータの取得に使用され、 POST はデータの送信や変更に使用されます。"←いいかげん覚えないと!どっちも主語はクライアント。
get:このデータくれ!
post:これ登録しといて。

ここは少し理解に時間がかかりそうだから、後回し!

3️⃣複数選択項目について

これは仕事の実装ではreactのコンポーネントのselectタグとかを使っちゃってるから、改めて理解したほうがよさそう。

2時間だとここまでかぁ!

なかなか理解に時間がかかったから、残りは帰ってから!


みなさんお疲れ様でした!!

駆け出しエンジニアなっちゃんの亀さんのような成長をあたたかく見守ってくださるとうれしいです。 自己研鑽に拍車をかけたいと思います!