PHPで検索フォームを作成する

目標

データベースから名前を検索する検索フォームを作成します。

環境

Windows10
XAMPP 7.4.10

方法

今回のコードは、”XAMPPでPHPを使ってMySQLにアクセスする“のコードを一部改変したものです。先にそちらをご覧いただくことをお勧めします。

検索フォーム

postメソッドを使用します。フォームの名前は、以下のように”word”としました(この名前は、後ほど値を取得するのに使用します)。

<form action="" method="POST">
    <label>Name:</label>
    <input type="text" name="word" /> <input type="submit" value="Search" />
</form>

データベースに接続する

XAMPPでPHPを使ってMySQLにアクセスする“と同じ手順で、データベースに接続します。

<?php
    $dsn = 'mysql:host=localhost;dbname=photo_sharing';
    $username = 'root';
    $password = '********';

    if ($_POST) { // when the word is submitted
            $dbh = new PDO($dsn, $username, $password);
            $search_word = $_POST['word'];
            // execute sql and get data here

結果を取得し、表示する

SQL

select分を使用して、データベースからデータを取得します。この場合は、戦闘が一致する名前を取得したいので、LIKE句を使用してパターンマッチングを行います。

$sql ="select * from user where name like '".$search_word."%'";
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll();
if($result){
    foreach ($result as $row) {
        echo $row['name']." ";
        echo $row['age'];
        echo "<br />";
    }
}
else{
    echo "not found";
}

ソースコード

以下が、完成したコードになります。

index.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>test</title>
</head>
<body>
    <div>Search user name</div>
    <form action="" method="POST">
        <label>Name:</label>
        <input type="text" name="word" /> <input type="submit" value="Search" />
    </form>
    <?php
    $dsn = 'mysql:host=localhost;dbname=photo_sharing';
    $username = 'root';
    $password = '********';

    if ($_POST) {
        try {
            $dbh = new PDO($dsn, $username, $password);
            $search_word = $_POST['word'];
            if($search_word==""){
              echo "input search word";
            }
            else{
                $sql ="select * from user where name like '".$search_word."%'";
                $sth = $dbh->prepare($sql);
                $sth->execute();
                $result = $sth->fetchAll();
                if($result){
                    foreach ($result as $row) {
                        echo $row['name']." ";
                        echo $row['age'];
                        echo "<br />";
                    }
                }
                else{
                    echo "not found";
                }
            }
        }catch (PDOException $e) {
            echo  "<p>Failed : " . $e->getMessage()."</p>";
            exit();
        }
    }
    ?>
</body>
</html>

結果

入力し、searchボタンを押すと、一致する名前の一覧が表示されます。