質問内容
皆様、こんにちは、
初心者です、宜しくお願い致します。
https://www.suzuco.net/entry/php-search/
をカスタマイズして検索・結果画面を作成しようと思っています。
その作業中、いくつか疑問が生じ、質問させていただきます。
①
初期表示の画面で全データが表示されますが、初期表示の画面でデータを表示させないにはどうすればよろしいものでしょうか
②
下記ソースコードindex.phpについての質問
(1)
<option value="1" <?php echo isset($_GET['sex']) && $_GET['sex'] == '1' ? 'selected' : '' ?>>男性</option> は <option value="1" >男性</option> でもいいのでしょうか、 <?php echo isset($_GET['sex']) && $_GET['sex'] == '1' ? 'selected' : '' ?> は必要なのでしょうか、何をしているのでしょうか(2)
<option value="1" <?php echo isset($_GET['sex']) && $_GET['sex'] == '1' ? 'selected' : '' ?>>男性</option> を,下記の様に文字検索に変更できました。 <option value='"男性"'>男性</option>ただ、上記のvalue='"男性"'のシングルクオーテーションをはずしvalue="男性" としたいのですが、どうしたらいいものでしょうか
該当のソースコード【index.php】
PHP
1 2<?php 3//①データ取得ロジックを呼び出す 4include_once('model.php'); 5$userData = getUserData($_GET); 6?> 7<!DOCTYPE HTML> 8<html lang="ja"> 9<head> 10<meta charset="utf-8" /> 11<meta name="viewport" content="width=device-width, initial-scale=1"> 12<title>PHPの検索機能</title> 13<link rel="stylesheet" href="style.css"> 14<!-- Bootstrap読み込み(スタイリングのため) --> 15<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> 16</head> 17<body> 18<h1 class="col-xs-6 col-xs-offset-3">検索フォーム</h1> 19<div class="col-xs-6 col-xs-offset-3 well"> 20 21 <?php //②検索フォーム ?> 22 <form method="get"> 23 <div class="form-group"> 24 <label for="InputName">名前</label> 25 <input name="name" class="form-control" id="InputName" value="<?php echo isset($_GET['name']) ? htmlspecialchars($_GET['name']) : '' ?>"> 26 </div> 27 <div class="form-group"> 28 <label for="InputSex">性別</label> 29 <select name="sex" class="form-control" id="InputSex"> 30 <option value="0" <?php echo empty($_GET['sex']) ? 'selected' : '' ?>>選択しない</option> 31 <option value="1" <?php echo isset($_GET['sex']) && $_GET['sex'] == '1' ? 'selected' : '' ?>>男性</option> 32 <option value="2" <?php echo isset($_GET['sex']) && $_GET['sex'] == '2' ? 'selected' : '' ?>>女性</option> 33 </select> 34 </div> 35 <div class="form-group"> 36 <label for="InputAge">年齢</label> 37 <select name="age" class="form-control" id="InputAge"> 38 <option value="0" <?php echo empty($_GET['age']) ? 'selected' : '' ?>>選択しない</option> 39 <option value="10" <?php echo isset($_GET['age']) && $_GET['age'] == '10' ? 'selected' : '' ?>>10代</option> 40 <option value="20" <?php echo isset($_GET['age']) && $_GET['age'] == '20' ? 'selected' : '' ?>>20代</option> 41 <option value="30" <?php echo isset($_GET['age']) && $_GET['age'] == '30' ? 'selected' : '' ?>>30代</option> 42 </select> 43 </div> 44 <button type="submit" class="btn btn-default" name="search">検索</button> 45 </form> 46 47</div> 48<div class="col-xs-6 col-xs-offset-3"> 49 <?php //③取得データを表示する ?> 50 <?php if(isset($userData) && count($userData)): ?> 51 <p class="alert alert-success"><?php echo count($userData) ?>件見つかりました。</p> 52 <table class="table"> 53 <thead> 54 <tr> 55 <th>名前</th> 56 <th>性別</th> 57 <th>年齢</th> 58 </tr> 59 </thead> 60 <tbody> 61 <?php foreach($userData as $row): ?> 62 <tr> 63 <td><?php echo htmlspecialchars($row['name']) ?></td> 64 <td><?php echo htmlspecialchars($row['sex'] == 1 ? '男性' : '女性') ?></td> 65 <td><?php echo htmlspecialchars($row['age']) ?></td> 66 </tr> 67 <?php endforeach; ?> 68 </tbody> 69 </table> 70 <?php else: ?> 71 <p class="alert alert-danger">検索対象は見つかりませんでした。</p> 72 <?php endif; ?> 73 74</div> 75</body> 76</html> 77
該当のソースコード【model.php】
PHP
1<?php 2function getUserData($params){ 3 //DBの接続情報 4 include_once('config/database.php'); 5 //DBコネクタを生成 6 $Mysqli = new mysqli($host, $username, $password, $dbname); 7 if ($Mysqli->connect_error) { 8 error_log($Mysqli->connect_error); 9 exit; 10 } 11 //入力された検索条件からSQl文を生成 12 $where = []; 13 if(!empty($params['name'])){ 14 $where[] = "name like '%{$params['name']}%'"; 15 } 16 if(!empty($params['sex'])){ 17 $where[] = 'sex = ' . $params['sex']; 18 } 19 if(!empty($params['age'])){ 20 $where[] = 'age <= ' . ((int)$params['age'] + 9) . ' AND age <= ' . (int)$params['age']; 21 } 22 if($where){ 23 $whereSql = implode(' AND ', $where); 24 $sql = 'select * from users where ' . $whereSql ; 25 }else{ 26 $sql = 'select * from users'; 27 } 28 29 //SQL文を実行する 30 $UserDataSet = $Mysqli->query($sql); 31 //扱いやすい形に変える 32 $result = []; 33 while($row = $UserDataSet->fetch_assoc()){ 34 $result[] = $row; 35 } 36 return $result; 37}
DB作成のソースコード【ini.sql】
SQL
1CREATE TABLE `users` ( 2 `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 3 `name` VARCHAR(45) NOT NULL COMMENT '名前', 4 `sex` INT UNSIGNED NOT NULL COMMENT '性別\n1:男\n2:女', 5 `age` INT UNSIGNED NOT NULL COMMENT '年齢', 6 `valid` INT UNSIGNED NOT NULL, 7 PRIMARY KEY (`id`)); 8 9INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('田中太郎', '1', '26', '1'); 10INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('山田花子', '2', '16', '1'); 11INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('高橋正樹', '1', '18', '1'); 12INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('金子優子', '2', '31', '1'); 13INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('吉井佳子', '2', '21', '1'); 14INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('橘勇気', '1', '13', '1'); 15INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('小林隆', '1', '39', '1'); 16INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('影山夏生', '1', '11', '0'); 17INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('加藤裕太', '1', '23', '1'); 18INSERT INTO `users` (`name`, `sex`, `age`, `valid`) VALUES ('後藤由美', '2', '20', '1');
回答1件
あなたの回答
tips
プレビュー