
一覧画面と検索画面を一緒にしています
一覧画面は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.2
- 回答日時:
よくよく考えたら$nameが空ならwhere句もいらないね
$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}" ;
}
のような感じ
ただしこのように?の位置関係が確定できな場合
prepareの関係で$nameを?に代入するのはbindValueにした方がよいかも
現レベルの絞り込みならexcuteに配列をセットするやり方でも
無視されるので問題はありませんが
いつもありがとうございます
$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}" ;
}
$sql.= "select count(*) from tbl_test " ;
$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 "該当するデータがありません";
}
これで合ってますか?
該当者なしとしか出ないですね
すいません
No.1
- 回答日時:
>検索のテキストボックスが空だったら全件表示したい
の部分だけ
$name=isset($_GET['name'])?$_GET['name']:"";
としている前提で
if($name!==""){
$sql.= " limit " . $page*10 . ", 10" ;
}
という場合分けがあればいいのでは?
検索文字があればlimit発動、なければ全件表示
ありがとうございます
<?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']:"";
if($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>";
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 "該当するデータがありません";
}
?>
こういうことですが?
実行しても
Notice: Undefined variable: count in
警告が出て
該当するデータがありませんと出ます
また検索すればデータが出るのですが空白だとダメですね
PDOって難しいですね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プレースホルダを使った複数カ...
-
MySQLカラム名は日本語と英数字...
-
LIMIT で条件を満たしているの...
-
LIKE で清音と濁音・半濁音を区...
-
旧filemakerで和暦(令和など)...
-
XAMPPのMySQLを外部から接続で...
-
MYSQLでストアド
-
order の昇降順で 250 より...
-
ヌル値は記憶容量を必要としな...
-
ERROR 1045 (28000) (using pas...
-
windows8でXAMPPが利用できませ...
-
ADOのバージョンを確認する方法
-
Windows に Postgres 旧バージョン
-
SQL Server 2012のサポート期間...
-
postgreSQLのデータ型
-
オラクルのデータ型・通貨について
-
SQL開発環境ソフトウェアである...
-
oracle8i?
-
MySQL Client API versionについて
-
プライマリーキーの昇順でソー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql sqlエラー
-
配列の要素でmysqlに問い合わせ
-
PHP+MYSQLで検索画面を作成し...
-
フォームからmySQL-DBにデータ...
-
フォームから送信した値とMySQL...
-
mysql insert文
-
PHP + PDOでデータ登録
-
MySQLからのデータをページに1...
-
PHPにてSQLから取得したデータ...
-
検索結果にリンクを生成
-
プレースホルダを使った複数カ...
-
mysqlの置換について2
-
mysql 接続について
-
検索機能
-
mysql limitページ分割
-
MySQLでの順位付けについて
-
mysql データ更新
-
PDOでDB ページング
-
MySQLカラム名は日本語と英数字...
-
mysqlがインストールされている...
おすすめ情報