###前提・実現したいこと
PHPでPDOを使いデータベースを検索する機能を作成しています。
検索結果が表示された後、リストボックスから項目を選び、並び替えをさせたいです。
###該当のソースコード
<?php session_start (); header ( 'Expires:-1' ); header ( 'Cache-Control:' ); header ( 'Pragma:' ); // データベース接続 include_once 'dbconnect.php'; if (! isset ( $_SESSION ['user'] )) { header ( "Location: index.php" ); } require_once ('header.php'); // userからデータを読み込む // クエリの実行 $query = "SELECT * FROM users WHERE user_id=" . $_SESSION ['user'] . ""; $result = $mysqli->query ( $query ); if (! $result) { print ('クエリーが失敗しました。' . $mysqli->error) ; $mysqli->close (); exit (); } while ( $row = $result->fetch_assoc () ) { $user_id = $row ["user_id"]; } // データベースの切断 $result->close (); if (count ( $errors ) === 0) { $dsn = 'mysql:host=localhost;dbname=movie_db;charset=utf8'; $user = 'root'; $password = ''; try { $dbh = new PDO ( $dsn, $user, $password ); $yourname = $_POST ['yourname']; $genre = $_POST ['genre']; // キーワードが入力されているとき if ($yourname != "") { if ($genre == "all") { // ジャンル指定なし $sql = $dbh->prepare ( "SELECT * FROM movies WHERE title LIKE '%{$yourname}%'" ); } else { // ジャンル指定あり // プレースホルダへ実際の値を設定する $sql = $dbh->prepare ( "SELECT * FROM movies WHERE genre2 LIKE '%{$genre}%' AND title LIKE '%{$yourname}%'" ); } if ($sql->execute ()) { // レコード件数取得 $row_count = $sql->rowCount (); while ( $row = $sql->fetch () ) { $rows [] = $row; } } else { $errors ['error'] = "検索失敗しました。"; } // データベース接続切断 $dbh = null; // キーワード指定がないとき } else { if ($genre == 'all') { // ジャンル指定なし $sql = $dbh->prepare ( "SELECT * FROM movies" ); } else { // ジャンル指定あり $sql = $dbh->prepare ( "SELECT * FROM movies WHERE genre2 LIKE '%{$genre}%'" ); } if ($sql->execute ()) { // レコード件数取得 $row_count = $sql->rowCount (); while ( $row = $sql->fetch () ) { $rows [] = $row; } } else { $errors ['error'] = "検索失敗しました。"; } $yourname = "指定なし"; // データベース接続切断 $dbh = null; } // クッキーを保存 if (isset ( $_COOKIE ["movie_db"] )) { $movie_db = $_COOKIE ["movie_db"]; $yourname = $movie_db ["yourname"]; $genre = $movie_db ["genre"]; } } catch ( PDOException $e ) { print ('Error:' . $e->getMessage ()) ; $errors ['error'] = "データベース接続失敗しました。"; } } // 観たいリストへ追加ボタン if (isset ( $_POST ["submit_list"] )) { $error = "観たいリストへ追加しました。"; } ?> <!DOCTYPE html> <html> <head> <title>検索結果</title> <meta charset="utf-8"> </head> <body> <?php if (count($errors) === 0): ?> <?php // エラーメッセージがあったら表示 if (strlen ( $error ) > 0) { echo "<font size=\"3\" color=\"#da0b00\">{$error}</font><p>"; } ?> <p><?=$row_count?>件あります</p> <p><?="ジャンル:".htmlspecialchars($genre, ENT_QUOTES, 'UTF-8')?></p> <p><?="キーワード:".htmlspecialchars($yourname, ENT_QUOTES, 'UTF-8')?></p> <form method="POST" action="search.php"> <select name="select"> <option value="default" selected="selected">並び替え</option> <option value="newyear">新しい順</option> <option value="oldyear">古い順</option> </select> <div class="search"> <table> <?php foreach ( ( array ) $rows as $row ) { $no = $row ['no']; $title = $row ['title']; $content = $row ['content']; $genre1 = $row ['genre1']; $genre2 = $row ['genre2']; $pic = $row ['pic']; $year = $row ['year']; ?> <tr> <td><img src="./pic/<?=$pic?>" width="100" height="150"></td> </tr> <tr> <td><?=htmlspecialchars($row['title'],ENT_QUOTES,'UTF-8')?></td> </tr> <tr> <td><?php echo '<a href="up.php?no=' . $no . '"> <input type="button" value="投稿"></a>'; ?> <input type="submit" name="submit_list" value="観たい"></td> </tr> <tr> <td><?php echo '<a href="movieinfo.php?no=' . $no . '"> <input type="button" value=" 詳細 "></a> </td></tr> '; // } ?> <?php elseif(count($errors) > 0): ?> <?php foreach ( $errors as $value ) { echo "<p>" . $value . "</p>"; } ?> <?php endif; ?> </table> </div> </form> </body> </html>
###試したこと
以下のようなコードを記述すればよいのかと考えました。
if($select == 'newyear') $sql.="ORDER BY year ASC"; elseif ($select == 'oldyear') $sql.="ORDER BY year DESC";
###補足情報(言語/FW/ツール等のバージョンなど)
php5.6 html5 xampp Mysql
phpの経験が浅く、理解しきれなく質問させていただきました。
説明不足の点が多いと思いますが、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー