@YOCHIII (YO Chang)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPでSQL内容をWEBブラウザに表示したいです

Q&A

Closed

解決したいこと

HTMLのFormタッグで作ったFormにデータを入力して、
もしSQLに値があれば、指定された1レコード分の資料をWEBブラウザに反映して欲しいです。

自分で試したこと

1-INSERT文でデータをデータベースに入力することは問題ないです。
2-SELECT文でデータを""全部""WEBブラウザに表示するのは問題ないです。
  ➡しかし、WHERE文を足したら、ERRORが出てきました。なんかWHERE文後ろに付けている値が取得できなさそうです。
3-もともと下記LINKの内容を真似して作りましたが、ERRORが出てきました...
https://www.sejuku.net/blog/104455

発生している問題・エラー

Warning: Undefined array key "id" in C:\xampp\htdocs\...\search.php on line 3

Warning: Undefined array key "user_name" in C:\xampp\htdocs\...\search.php on line 4

該当するソースコード

//➡このファイルは<form.php>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="search.php" method="post" enctype="multipart/form-data">
        ID:<input type="text" name="id2"><br>
        <input type="submit" value="検索">
    </form>

    <?php include('./search.php') ?>
    <table>
        <tr>
            <th>ID</th>
            <th>User Name</th>
        </tr>
        <?php foreach ($data2 as $row) { ?>
            <tr>
                <td><?php echo $row['ID']; ?></td>
                <td><?php echo $row['member_name']?></td>
            </tr>
        <?php }?>
    </table>

</body>
</html>

該当するソースコード

//➡このファイルは<search.php>
<?php

$id2 = $_POST['id2'];
$user_name2 = $_POST['user_name'];
$dbName = "mysql:host=localhost;dbname=test;charset=utf8";
$userName = "root";
try{
    $db = new PDO($dbName, $userName);
} catch (\Throwable $th){
    exit();
}


$sql2 = "SELECT * FROM user_list where ID=".$id2;
$sth2 = $db -> prepare($sql2);
$sth2 -> execute();
$data2 = $sth2->fetchall();

return $data2;

0 likes

1Answer

SQL文に変数を直接展開しないでください.このようなコードはSQLインジェクション脆弱性を容易に生じます.
SQLクエリにユーザから入力されたデータを渡す際は,必ずプレースホルダを使用します.

今出ているエラーの原因は単純にsearch.phpに送られるフォームデータと受け取るデータのキーが一致してないだけです.

1Like

Your answer might help someone💌