phpでのページネーション機能がうまくいかない
Q&A
解決したいこと
求人のサイトを作っています。
htmlで都道府県を選ぶと、formにてphpに情報を飛ばし、その情報を元にxmlから当てはまる県の求人のみを表示させるようにしたいです。(今回は茨城を使ってテストしています)
1ページに5求人のみを表示させようとしています。
ですので1ページ目には求人1から5まで、ページ2では求人6から求人10までというようにしたいです。
求人はこれから増えていくのでページは増えていきますがどのページでも同じような仕組みにしたいです。
現状
htmlから受け取った情報を元にxmlから茨城だけの求人情報をphpに表示させることができています。しっかり求人数は5つまでを表示してくれています。
ちなみに各ページhtml記述が必要なところ(metaやheaderなど)は省略しています。
発生している問題・エラー
ページ2を押すと求人6からが表示されずにいます。
urlはtest.php?page=2というようにページ2に飛んでいるようなのでなぜ表示されない
該当するソースコード
<?php
$selectedArea = $_POST['area']; // 選択したエリアを取得
$xml = simplexml_load_file('../xml/data.xml');
// 選択されたエリアに一致する求人情報を抽出
$matchingJobs = array();
foreach ($xml->job as $job) {
if ((string)$job->area === $selectedArea) {
$matchingJobs[] = $job;
}
}
// 求人情報をランダムにシャッフル
/*shuffle($matchingJobs);*/
// ページネーションの設定
$jobsPerPage = 5;
$totalJobs = count($matchingJobs);
$totalPages = ceil($totalJobs / $jobsPerPage);
$currentPage = isset($_GET['page']) ? max(1, min($totalPages, intval($_GET['page']))) : 1;
// 現在のページに表示する求人情報を抽出
$startIndex = ($currentPage - 1) * $jobsPerPage;
$endIndex = min($startIndex + $jobsPerPage, $totalJobs);
$currentPageJobs = array_slice($matchingJobs, $startIndex, $endIndex - $startIndex);
echo "Current Page: " . $currentPage;
echo "Start Index: " . $startIndex . "<br>";
echo "End Index: " . $endIndex . "<br>";
?>
<div class="features-container">
<?php if (!empty($currentPageJobs)) : ?>
<?php foreach ($currentPageJobs as $job) : ?>
<!-- 求人情報の表示コード -->
<div class="feature" id="feature-<?php echo $job['id']; ?>">
<a href="/area-job/<?php echo $job->area; ?><?php echo $job->url; ?>">
<img src="<?php echo $job->imagePath; ?>" alt="特徴画像" class="feature-image">
<div class="feature-content">
<ul class="genre-list">
<li class="genre-1"><?php echo $job->area; ?></li>
<li class="genre-2"><?php echo $job->occupation; ?></li>
<li class="genre-3"><?php echo $job->employment; ?></li>
</ul>
<h3><?php echo $job->title; ?></h3>
<p><?php echo $job->description; ?></p>
</div>
</a>
</div>
<?php endforeach; ?>
<!-- ページネーションリンクを表示 -->
<ul class="pagination">
<?php for ($i = 1; $i <= $totalPages; $i++) : ?>
<li class="page-item <?php echo ($i == $currentPage) ? 'current-page' : ''; ?>">
<a href="?page=<?php echo $i; ?>" class="page-link"><?php echo $i; ?></a>
</li>
<?php endfor; ?>
</ul>
<?php else : ?>
<p>選択された都道府県に該当する求人情報はありません。</p>
<?php endif; ?>
</div>
自分で試したこと
計算の方法を変えてみたりしたのですが無理でした。