limemint
@limemint (斉藤 貴博)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

検索ボックス内のif文の挿入について

解決したいこと

DBに接続して検索する検索ボックスを作成中です。

現状、検索ボックスに何も入っていない初期状態でも自動でDBに接続して検索結果を表示してしまいます。
(全件検索になってしまいます)

検索ボックスに何も入っていない初期状態では、DBに接続しないというif文というのはどのように書けばいいのでしょうか?

下記コード内の▲▲▲▲▲▲▲▲▲▲部分に、「自分で試したこと」に書いたようなコードが入ればいいのでしょうか?
(すみません。日本語でしか表現できずそのまま書いてしまっています)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
    <title>ナレッジ検索</title>
    <style>
        .s_button {
            width: 120px;
            height: 50px;
        }
        .top {
            text-align: center;
        }
    </style>
</head>

<body>
    <h2>ナレッジ検索</h2>
    <form action="knowledge_box.php" method="post">
    
    <table>
        <tr>
            <td>検索キーワード</td>
            <td>
                <input type="text" name="keyword" value="<?php echo $_POST['keyword']; ?>" required>
            </td>
        </tr>
    </table>
    <input type="submit" class="s_button" value="検索開始">
    </form>
    
    <?php
       ini_set('display_errors', 'On');
        ▲▲▲▲▲▲▲▲▲▲
    try {
         // 接続
        $pdo = new PDO('sqlite:qa');

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
       
        $stmt = $pdo->prepare("SELECT * FROM qa WHERE detail LIKE ?");
        $stmt->execute(array("%".$_POST['keyword']."%"));
        $result = $stmt->fetchAll();

        // 結果を確認
        var_dump($result);
        echo $result;
        $counter = 1;
    } catch (Exception $e) {
        echo $e->getMessage() . PHP_EOL;
    }
    ?>
    <h4>検索キーワードは「<?php echo $_POST['keyword']; ?>」です。</h4>
    <table>
        <tr>
            <th>No.</th>
            <th width="900" height="10" class="top">合致した内容</th>
        </tr>
        <?php foreach ($result as $row) {?>
        <tr>
            <td height="100"><?php echo $counter ++; ?></td>
            <td><?php echo $row['detail']; ?></td>
        </tr>
        <?php } ?>
    </table>
</body>
</html>

自分で試したこと

<?php
if (検索ボックスinput type="text"が空白ならば{
    DBに接続しない
} else {値が入っていれば
    DBに接続する
}
?>
  
0

1Answer

検索キーワードが指定されている場合には、
$_POST['keyword']に値が入るため以下の書き方でどうでしょうか?

※検索キーワードが指定されていない場合の、表示部分の調整はご自身でお願いします

    $result =  [];
    if (isset($_POST['keyword'])) {
         // 接続
        $pdo = new PDO('sqlite:qa');

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
       
        $stmt = $pdo->prepare("SELECT * FROM qa WHERE detail LIKE ?");
        $stmt->execute(array("%".$_POST['keyword']."%"));
        $result = $stmt->fetchAll();

        // 結果を確認
        var_dump($result);
        echo $result;
        $counter = 1;
    }
    ...
1Like

Comments

  1. @limemint

    Questioner

    ありがとうございます!
    ばっちりできました。
    おかげで助かりました。
    ご回答に感謝します。

Your answer might help someone💌