質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2108閲覧

ページングでページ数を設定した後に最後のページに遷移したときに空欄ができてしまいます。

Kuriaki

総合スコア85

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/04/11 09:59

編集2017/04/12 04:54

全ページをdbから取って表示して、そこから各ページに5件まで表示と書いていました。
例えば、トータル33件のときに、7ページ目で3件しか表示しないですが、
5件までという設定があるため、3件の下に空欄ができてしまいます。

解決したいのは、残り5件未満のときでも、そのまま未満の件数のみ表示することです、空欄がででこないように。
ヒントなど頂けたら幸いです。
説明が下手かもしれませんが、回答よろしくお願いいたします。

php

1<html> 2<head> 3 4<title>DB</title> 5<link rel="stylesheet" type="text/css" href="css.css"> 6</head> 7<body> 8 9<form method="post" name="form" action="insert.php" > 10<input type="text" name="name"> 11<input type="submit"> 12</form> 13 14<table border="2" cellspacing="10"> 15 <tr> 16 <td style="background:green; color:white;">ID</td> 17 <td style="background:green; color:white;">入力値</td> 18 <td style="background:green; color:white;">詳細</td> 19 </tr> 20<?php 21header('content-type:text/html;charset=utf-8'); 22 $link = mysql_connect('localhost', 'root', ''); 23if (!$link) { 24 die('接続失敗です。'.mysql_error()); 25} 26 27$db_selected = mysql_select_db('kd', $link); 28if (!$db_selected){ 29 die('データベース選択失敗です。'.mysql_error()); 30} 31mysql_set_charset('utf8'); 32 $sql="select * from user order by id desc"; 33 $result=mysql_query($sql); 34 $num=mysql_num_rows($result); 35 $pageSize=5; 36 $pageCount=ceil($num/$pageSize); 37 $pageNo=isset($_GET['page'])?$_GET['page']:1; 38 $pageNext=$pageNo+1; 39 $pagePrev=$pageNo-1; 40 41 42 if($pageNext>$pageCount) $pageNext=$pageCount; 43 if($pagePrev<1) $pagePrev=1; 44 if($pageNo>$pageCount) $pageNo=$pageCount; 45 if($pageNo<1) $pageNo=1; 46 47 $offset=($pageNo-1)*$pageSize; 48 mysql_data_seek($result, $offset); 49?> 50 51<style type="text/css"> 52 tr{background-color:#ffffff; font-size:12px;} 53 td{text-align:center;height:30px;} 54 55</style> 56 57 <tr> 58 <?php 59 60 for ($i=0; $i <$pageSize ; $i++){ 61 $row=mysql_fetch_assoc($result); 62 if ($row){ 63 } 64?> 65 <td><?php echo $row['id']?></td> 66 <td><?php echo $row['name']?></td> 67 <td id="ss" name="ss"><a href="info.php?id=<?php print $row['id']; ?>">詳細</a></td> 68 69 </tr> 70 71 <?php 72 } 73 74 ?> 75 76 77</table> 78 79<div id="ctrl"> 80 81 <div id="aa"> 82 <a style="width: 70px;" href="index.php?page=1"><<先頭</a> 83 <a style="width: 40px;" href="index.php?page=<?php echo $pagePrev?>"><<</a> 84 <?php 85 if($pageCount <= 5){ 86 $pageSt = 1; 87 $pageEd = $pageCount; 88 } else { 89 $pageSt = ($pageNo - 2 < 1)? 1: $pageNo - 2; 90 if($pageSt + 4 >= $pageCount) $pageSt = $pageCount - 4; 91 $pageEd = ($pageSt + 4 > $pageCount)? $pageCount: $pageSt + 4; 92 } 93 94 for($i = $pageSt; $i <= $pageEd; $i++){ 95 if($i == $pageNo){ 96 echo $i.' '; 97 } else { 98 echo '<a href="index.php?page='.$i.'">'.$i.'</a> '; 99 } 100 } 101 ?> 102 103 <a style="width: 40px;" href="index.php?page=<?php echo $pageNext?>">>></a> 104 <a style="width: 70px;" href="index.php?page=<?php echo $pageCount?>">最後>></a> 105 </div> 106 107</div> 108</body> 109</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

php

1<html> 2<head> 3 4<title>DB</title> 5<link rel="stylesheet" type="text/css" href="css.css"> 6</head> 7<body> 8 9<form method="post" name="form" action="insert.php" > 10<input type="text" name="name"> 11<input type="submit"> 12</form> 13 14<table border="2" cellspacing="10"> 15 <tr> 16 <td style="background:green; color:white;">ID</td> 17 <td style="background:green; color:white;">入力値</td> 18 <td style="background:green; color:white;">詳細</td> 19 </tr> 20<?php 21header('content-type:text/html;charset=utf-8'); 22 $link = mysql_connect('localhost', 'root', ''); 23if (!$link) { 24 die('接続失敗です。'.mysql_error()); 25} 26 27$db_selected = mysql_select_db('kd', $link); 28if (!$db_selected){ 29 die('データベース選択失敗です。'.mysql_error()); 30} 31mysql_set_charset('utf8'); 32 $sql="select * from user order by id desc"; 33 $result=mysql_query($sql); 34 $num=mysql_num_rows($result); 35 $pageSize=5; 36 $pageCount=ceil($num/$pageSize); 37 $pageNo=isset($_GET['page'])?$_GET['page']:1; 38 $pageNext=$pageNo+1; 39 $pagePrev=$pageNo-1; 40 41 42 if($pageNext>$pageCount) $pageNext=$pageCount; 43 if($pagePrev<1) $pagePrev=1; 44 if($pageNo>$pageCount) $pageNo=$pageCount; 45 if($pageNo<1) $pageNo=1; 46 47 $offset=($pageNo-1)*$pageSize; 48 mysql_data_seek($result, $offset); 49?> 50 51<style type="text/css"> 52 tr{background-color:#ffffff; font-size:12px;} 53 td{text-align:center;height:30px;} 54 55</style> 56 57 <tr> 58 <?php 59 60 for ($i=0; $i <$pageSize; $i++){ 61 $row=mysql_fetch_assoc($result); 62 if ($row==""){ 63 }else{ 64 65?> 66 <td><?php echo $row['id']?></td> 67 <td><?php echo $row['name']?></td> 68 <td id="ss" name="ss"><a href="info.php?id=<?php print $row['id']; ?>">詳細</a></td> 69 70 </tr> 71 72 <?php 73} 74 } 75 76 ?> 77 78 79</table> 80 81<div id="ctrl"> 82 83 <div id="aa"> 84 85 <a style="width: 70px;" href="index.php?page=1"><<先頭</a> 86 <?php 87 if ($pageNo>1) { 88 echo '<a style="width: 40px;" href="index.php?page=' .$pagePrev.'"><<</a>'; 89 } 90 ?> 91 92 <?php 93 if($pageCount <= 5){ 94 $pageSt = 1; 95 $pageEd = $pageCount; 96 } else { 97 $pageSt = ($pageNo - 2 < 1)? 1: $pageNo - 2; 98 if($pageSt + 4 >= $pageCount) $pageSt = $pageCount - 4; 99 $pageEd = ($pageSt + 4 > $pageCount)? $pageCount: $pageSt + 4; 100 } 101// ページ番号出力 102 103 for($i = $pageSt; $i <= $pageEd; $i++){ 104 if($i == $pageNo){ 105 echo '<span style="background-color:#fff000">' .$i. '</span> '; 106 } else { 107 echo '<a href="index.php?page='.$i.'">'.$i. '</span></a> '; 108 } 109 } 110 111 if ($pageNo<$pageCount) { 112 echo '<a style="width: 40px;" href="index.php?page='.$pageNext.'">>></a>'; 113 } 114 115 ?> 116 117 118 <a style="width: 70px;" href="index.php?page=<?php echo $pageCount?>">最後>></a> 119 </div> 120 121</div> 122</body> 123</html>

投稿2017/04/14 05:39

編集2017/04/17 00:44
Kuriaki

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/04/14 05:42

回答文もコードブロックが使えますよ。
Kuriaki

2017/04/14 06:08

回答して頂いてありあとうございます。 しかし回答文の通りに使ってうまく行かなかったため、ほかの方法で解決させて頂きました。
kei344

2017/04/14 06:41

ひとつ前の私のコメントを読んでください、そんなこと言っていません。 回答欄に解決したコードを掲載することはとても良いことだと思うのですが、コードブロックで括ってください、と言っています。
Kuriaki

2017/04/17 00:45

大変失礼いたしました。 言葉をちゃんと理解できなかったです。 申し訳ありません。
guest

0

最終ページで$pageSize の代わりに $pageCount*$pageSize-$num を使えば出来そうな気がします。


前も指摘したかもしれませんが、mysql_connect は非推奨ですし、今後削除されます。なので勉強ならPDOとかでされるのが良いような気がします。

【PHP: mysql_connect - Manual】
http://php.net/manual/ja/function.mysql-connect.php

警告

この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。 MySQLi あるいは PDO_MySQL を使うべきです。

投稿2017/04/11 10:57

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kuriaki

2017/04/12 01:25

ご回答、ご忠告ありがとうございます。 わけがありましてpdoを書いていないです。 最終ページの$pageSizeとおっしゃったのですが、それがどこにありますか?
kei344

2017/04/12 03:29

k3n1さんのコードの中にありますよ。もしかして「最終ページ」がわかりづらかったのでしょうか。質問タイトルで書かれた「最後のページ」です。
kei344

2017/04/12 04:58

ここのことです。 for ($i=0; $i <$pageSize ; $i++)
Kuriaki

2017/04/12 05:23

ご指摘ありがとうございます。 ↑の質問はページ内の$pageSizeを全部試してからしました。 すみませんが、それにしてたら新しいデータを送信するたびに一行ずつ少なくなります。 五つ送信したら何も表示しなくなります。
kei344

2017/04/12 05:30

まちがっていました、すみません。 $pageSize + ( $num - $pageCount*$pageSize ) とりあえず、$pageCount*$pageSizeで全ページ一杯のときの総件数が出て、実際の件数$numとの差が「空欄」の個数なので、「最後のページ」のループはそれを除外した回数ループをすればよい、ということです。
Kuriaki

2017/04/12 05:53

質問に答えて頂いてありがとうございます。 今回は間逆になりました。 最初は一行しか表示してなくて、一個送信するたびに行数も一つ増えてきます。 そして五つ目になったときにまた一行に戻ります。
kei344

2017/04/12 07:04

「送信」の意味が解りませんが、ページを移動する事を指して言っているのでしょうか。 それであれば最後のページについての処理なので、最後だけ処理すれば良いです。いまいちどう実装されているかはわかりませんが、先ほどのコメントで書いた「考え方」の部分を読んでください。
Kuriaki

2017/04/12 09:04

説明不足ですみませんでした。 コードにも書いてありますが、フォームがあって、入力して送信を押しますと、dbに送信した内容がかかれます。 その下にdbからデータを取得してるため、送信するとすぐ新しい入力したものがテーブルに出てきます。 ゆえに、送信を押すたびに、行数が一つ増えるとのことでした。
kei344

2017/04/12 09:09

?ページングの話をされていたはずでは。そこ以外についてはちょっとわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問