
一覧画面と検索画面を一緒にしています
一覧画面は10件表示にし、テキストになにも入力されてなかったらデータを全件表示したいです
また、1 l 2 l 3 のようにページを表示し、また何件中何件目データですと表示したいです
<!--一覧画面 index.php-->
<html>
<head>
<title>一覧画面</title>
</head>
<body>
<br><br>
<blockquote>
一覧画面
<br><br>
<?php
if ($_GET) { // データがGETされていたら
$event = isset($_GET['event']) ? $_GET['event'] : ''; // 取得
if (isset ($_GET['page'])==false) {
$page=0;
} else {
//そうでなければpageパラメータの値をpage変数にセット
$page = $_GET['page'];
}
}
?>
<?php
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
$name=isset($_GET['name'])?$_GET['name']:"";
$sql ="select * from tbl_test where ";
$sql.="`氏名` like concat('%',?,'%') ";
$sql.="or `住所` like concat('%',?,'%') ";
$sql.= " limit " . $page*10 . ", 10" ;
$stmt = $pdo->prepare( $sql);
$stmt->execute(array($name,$name));
$count = $stmt->rowCount();
if($count>0){
print "<table border=1>" ;
print "<tr>";
print "<th>番号</th>";
print "<th>氏名</th>";
print "<th>住所</th>";
print "<th>操作</th>";
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
print "</tr>";
$ID = htmlspecialchars($row['番号']);
$NAME = htmlspecialchars($row['氏名']);
$ADDR = htmlspecialchars($row['住所']);
echo "<tr>
<td>$ID</td>
<td>$NAME</td>
<td>$ADDR</td>
<td><a href='edit.php?番号=$ID'>修正</a>
<a href='delete.php?番号=$ID'>削除</a></td></tr>";
};
print "</table>" ;
}else{
print "該当するデータがありません";
}
?>
<br><br><br>
<form action = "index.php" method="GET">
<input type="hidden" name="event" value="find">
<input type="text" name="name"style ="font-size:20px;width: 400px; height: 40px">
<input type="submit" value="検索" style ="font-size:20px;width: 100px; height: 40px">
</form>
<br><br>
<form action = "regist.php" method="GET">
<input type="hidden" name="event" value="regist">
<input type = "submit" value = "新規登録" style ="font-size:20px;width: 100px; height: 40px">
</form>
<input type="hidden" name="page" value="0">
</blockquote>
</body>
</html>
検索のテキストボックスが空だったら全件表示したいのですが今10件しか出ません
limitの書く場所が原因でしょうか?
またこのように一覧画面と検索結果画面が一緒じゃまずいですかね?
検索結果を別ウインドウじゃなく自分に返したいと思いこのやり方にしたのですがよくないですか?
No.9ベストアンサー
- 回答日時:
>(1)がbになってしまいます
ああなるほど、絞り込みをしない場合も全件表示でしたっけ?
で、pageがあるときは絞り込みがない場合だけページング・・・ですか
ようやく見えてきました。
試してみればわかりますが、正直あまりいいUIではありませんね
全件表示してあるところからページングをする意味がないので
(全件表示させないためのページングですから)
とりあえずご指示のとおりであればこんな感じ?
$sql ="select * from tbl_test where 1 ";
if($name!==""){
$sql.="and (0 ";
$sql.="or `氏名` like concat('%',?,'%') ";
$sql.="or `住所` like concat('%',?,'%') ";
$sql.=") ";
}elseif(isset($_GET["page"])){
$sql.= " limit {$page},{$perpage}" ;
}
ありがとうございます
あとは
15件中 1-10件目 何ページ目表示とやりたいです
PDOで書くにはどうしたらいいですか?
どう<a>タグに反映されるか教えてください
<前 l1l2l次>
No.12
- 回答日時:
>PHPの板に書けば回答くれますか?
ページングの部分に絞って質問をしてもらえれば回答できるかもしれません
ページングで必要なのは
・現在のページ番号
・検索結果のアイテム数
・1ページに表示するアイテム数
・現在ページが最初のページかどうか
・現在ページが最後のページかどうか
あたりです。
このあたりの情報をまとめればさほど難しくない処理でしょう
No.11
- 回答日時:
>自分のソースに置き換えたらどう書けばいいですか?
だからMySQLの板で回答すべきことではないので回答できません
PHPの板に書けば回答くれますか?
とりあえず次のページ 前のページに移動できるようにしたいと思います
<?php
$cnt = $row[0] ;
//ページ表示
if(!$cnt > 10) {
echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ;
}
//前の10件
if ($page != 0) {
echo '<a href="index.php?page=' . ($page - 1) . '">前の10件</a>';
}
//次の10件
if (($page + 1)*10 < $cnt) {
echo '<a href="index.php?page=' . ($page + 1) . '">次の10件</a>';
}
?>
これでリンクも何も表示されないのですがなぜですかね?
No.10
- 回答日時:
>15件中 1-10件目 何ページ目表示とやりたいです
必要な情報が3つあります
・ヒットするアイテム数($totalItems)
・現在のページ番号($currentPage・・・$_GET["page"]の値)
・1ページ当たりの表示アイテム数($perPage)
まずは$totalItemsを得ること
select count(*) as totalItems from テーブル where 条件
あたりでいけるでしょう
これをもとに
for($i=0;$i<(int)($totalItems / $perPage);$i++){
print "<a href="hoge.php?page=".$i."&name=".urlencode($name)."\">".($i+1)."</a>";
}
のような処理で、表示一覧を得ます
print $totalItems."件中 ".($currentPage*$perPage+1)."-";
print ($currentPage+1)*$perPage."件目";
のようにして現在のページの情報を表示します
(最大数を件数の上限にしたい場合はもうちょい工夫がいります)
情報としては
select * from テーブル where 条件 limit $currentPage*$perPage,$perPage
から得たデータをテーブル形式に成型して表示します
その他例外処理やらなにやら入れなくちゃいけない処理も多く
ここまでくるとMySQLの板で質問するべきことではないですね。
PHP側でクラスを組んで機能を細分化しながらつくる必要があると思います
No.8
- 回答日時:
ちなみに個人的には絞り込みがあろうが無かろうが「ページングする」というのが
UIとしては正しいと思います。
出現頻度の高い特定のキーワードでヒットするのが何十件となったときに
ユーザビリティがさがるので・・・
また、or検索(xかyでヒットする)やand検索(xかつyのときヒットする)など
実装していくとまた工夫が必要になっていきます
とくにand検索は順列か(x,yで検索したときにx→yの順番でヒットした場合表示)
ランダム(順番にかかわらずx,yがともにヒットしたら表示)かによっても
処理がことなるので実装に注意が必要
ありがとうございます
そうですね。いまデータが少ないのでいいんですが何十件となったときに大変ですね。
絞り込みがなかろうがあろうが「ページングする処理にしたいです」
とりあえず今ないときのみやり理解してから行いたいと思います
あとは
15件中 1-10件目 何ページ目表示とやりたいです
PDOで書くにはどうしたらいいですか?
どう<a>タグに反映されるか教えてください
<前 l1l2l次>
No.7
- 回答日時:
>(1)はa
>(2)はb
>(3)(4)もa
なるほどねぇ、私の理解がだいぶ違いました
絞り込みをしない場合はページングして
絞り込みをした場合はページングしないということですね
$sql ="select * from tbl_test where 1 ";
if($name!==""){
$sql.="and (0 ";
$sql.="or `氏名` like concat('%',?,'%') ";
$sql.="or `住所` like concat('%',?,'%') ";
$sql.=") ";
}else{
$sql.= " limit {$page},{$perpage}" ;
}
でいけるんじゃないでしょうか?
はいそういうこうです
けど
(1)がbになってしまいます
<?php
if ($_GET) { // データがGETされていたら
$event = isset($_GET['event']) ? $_GET['event'] : ''; // 取得
}
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
$name=isset($_GET['name'])?$_GET['name']:"";
$perpage=10;
$page=isset($_GET['page'])?($_GET['page']*$perpage):0;
$sql ="select * from tbl_test where 1 ";
if($name!==""){
$sql.="and (0 ";
$sql.="or `氏名` like concat('%',?,'%') ";
$sql.="or `住所` like concat('%',?,'%') ";
$sql.=") ";
}else{
$sql.= " limit {$page},{$perpage}" ;
}
$stmt = $pdo->prepare( $sql);
$stmt->execute(array($name,$name));
$count = $stmt->rowCount();
if($count>0){
print "<table border=1>" ;
print "<tr>";
print "<th>番号</th>";
print "<th>氏名</th>";
print "<th>住所</th>";
print "<th>操作</th>";
print "</tr>";
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$ID = htmlspecialchars($row['番号']);
$NAME = htmlspecialchars($row['氏名']);
$ADDR = htmlspecialchars($row['住所']);
echo "<tr>
<td>$ID</td>
<td>$NAME</td>
<td>$ADDR</td>
<td><a href='edit.php?番号=$ID'>修正</a>
<a href='delete.php?番号=$ID'>削除</a></td></tr>";
print "</tr>";
};
print "</table>" ;
}else{
print "該当するデータがありません";
}
?>
こんな感じですか?
あとは
15件中 1-10件目 何ページ目表示とやりたいです
PDOで書くにはどうしたらいいですか?
<前 l1l2l次>
No.6
- 回答日時:
場合分けをしましょう
○仮データ
x=11件、y=5件というデータを投入したとして
(1)検索語を指定しないとき
1-a)16件ヒットして全部表示
1-b)16件ヒットして10件ずつ表示
1-c)絞り込みをしない場合はヒットさせない
1-d)そのた?
(2)「x」で絞り込み
2-a)11件ヒットして10件ずつ表示
2-b)11件ヒットして全部表示
2-c)そのた?
(3)「y」で絞り込み
3-a)5件ヒットして全部表示
3-b)そのた?
(4)「z」(存在しないデータ)で絞り込み
4-a)ヒットしないので「ヒットしない」と表示
4-b)ヒットしないので0件表示(テーブルのヘッダ部分はそのまま)
4-c)そのた?
今までの説明をみるとすべてパターンaだと思っていたのですが
#5の補足をみるかぎり1はb?
また(2)についてはページングの際に11件目からデータがとれないということ?
すいません
少し話を戻させていただきます
これ聞いたらこの人自分のプログラム理解してないのかよって思われると思いますがこの一覧画面の表示の仕方
間違ってますかね?LIKEで表示しているので
LIKEで表示してるからlocalhost/index.phpで開いても検索語がないと見なされるのですか?だから10件表示じゃなく全件表示されてしまうんですかね?
最初検索結果と一覧画面を分けて表示していたのですが一緒にして一覧画面から絞りだされてように検索結果を出しているのですが記述あってますか
(1)はa
(2)はb
(3)(4)もa
です
全件表示を10件でわけページングしたいです
わかりにくくすいません
No.5
- 回答日時:
ごめんなさい、なにか話がかみ合ってない気がしますが
検索文字列になにか文字をいれても絞り込みされずに全件表示されるということでしょうか?
それとも絞りこみはされるけど、10件ごとではなくlimitなしの検索に
なってしまうということでしょうか?
見る限り、nameに文字がはいっていればそれを利用して検索して10件ずつ表示
nameに文字がはいっていない場合は絞り込みをせずに全件表示という仕様で
そのとおり表示されるはずですが
ちなみにソースの前半部の
>if (isset ($_GET['page'])==false) {
>$page=0;
>} else {
>//そうでなければpageパラメータの値をpage変数にセット
>$page = $_GET['page'];
>}
このくだりは、別に記載があるので不要です
なんて言えばいいんでしょう
一覧画面と検索結果画面がイコール(同phpで実行されている)それでそのページを10件ごとわけて2ページには11件目からのデータ表示
今試しに適当にaというレコードを11件作ってaと入力して検索してた10件のみ表示されました。
そうではなくトップ画面=検索結果画面なんですけど最初検索結果画面を10件表示しl2lを押すと11件目したいに行い検索のテキストが空白で検索ボタンを押すと全件表示したいということです。
説明って難しいですね
言ってる意味がわからなかったらまた言ってください
すいません
お願いします
No.3
- 回答日時:
>$sql.= "select count(*) from tbl_test " ;
この行いらないね
消しましたが10件表示ではなく全件表示になっています
なかなか難しいですね
これってあれですかね
pegeを渡してないからですか?
<input type="hidden" name="page" value="0">
で自分自身に渡してるから大丈夫ですか
$page=0、$perpae=10ってなって1件目から10件目が表示されるはずですよね
<?php
if ($_GET) { // データがGETされていたら
$event = isset($_GET['event']) ? $_GET['event'] : ''; // 取得
if (isset ($_GET['page'])==false) {
$page=0;
} else {
//そうでなければpageパラメータの値をpage変数にセット
$page = $_GET['page'];
}
}
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
$name=isset($_GET['name'])?$_GET['name']:"";
$perpage=10;
$page=isset($_GET['page'])?($_GET['page']*$perpage):0;
$sql ="select * from tbl_test where 1 ";
if($name!==""){
$sql.="and (0 ";
$sql.="or `氏名` like concat('%',?,'%') ";
$sql.="or `住所` like concat('%',?,'%') ";
$sql.=") ";
$sql.= " limit {$page},{$perpage}" ;
}
$stmt = $pdo->prepare( $sql);
$stmt->execute(array($name,$name));
$count = $stmt->rowCount();
if($count>0){
print "<table border=1>" ;
print "<tr>";
print "<th>番号</th>";
print "<th>氏名</th>";
print "<th>住所</th>";
print "<th>操作</th>";
print "</tr>";
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$ID = htmlspecialchars($row['番号']);
$NAME = htmlspecialchars($row['氏名']);
$ADDR = htmlspecialchars($row['住所']);
echo "<tr>
<td>$ID</td>
<td>$NAME</td>
<td>$ADDR</td>
<td><a href='edit.php?番号=$ID'>修正</a>
<a href='delete.php?番号=$ID'>削除</a></td></tr>";
print "</tr>";
};
print "</table>" ;
}else{
print "該当するデータがありません";
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【初歩】ラジオボタンをつかっ...
-
SQLでカラムを追加し、条件に合...
-
PHP 画像のアップロード Qiita
-
SQLです!!教えてください。
-
下の画像はSQLの4大命令の性質...
-
`picture` varchar(255) のコマ...
-
php テーブルを作れない
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです!!教えてください。
-
SQL任意に並び替えをしたい
-
MySQLのテーブル作成でハイフン...
-
同一日に複数レコードがある場...
-
MAMP 99ドル約1.6万円 高い...
-
(初心者)MySQLやmaraDBで、crea...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PDOでDB ページング
-
PHPでMySQLを使った検索のプロ...
-
PHP&MYSQLでの検索システムにつ...
-
プレースホルダを使った複数カ...
-
MySQLでデータ表示
-
PHPでMySQLを使った検索のプロ...
-
MySQLからのデータをページに1...
-
PHPにてSQLから取得したデータ...
-
MySQLでAU携帯にも対応させるた...
-
pdfファイルの管理システム
-
mysqlとphpを使った入力画面で...
-
データを一括で処理する方法に...
-
MySQLカラム名は日本語と英数字...
-
mysqlがインストールされている...
-
副問合せにLIKE文を使う方法は...
-
ODP.NETのバージョン確認
-
エクセルで連勤チェックをした...
-
like句を使って日本語を検索す...
-
VBAで変数内に保持された二次配...
-
SQLのVARCHARとVARCHAR2の違い
おすすめ情報