如何在表单输入字段PHP HTML中显示MySQL的内容

问题描述 投票:-1回答:1

我正在使用“编辑”按钮,并且试图在表单输入字段中显示userId,id,title(已完成)(来自MySQL),在$ _GET设置之前,一切工作正常。但是!isset($_GET)何时会给我错误。这是我的“编辑”按钮的PHP代码以及如何连接数据库:

$user_id = '';
$id_id = '';
$titel_db = '';
$completed_db = '';

 //DATABASE
    class Database
    {
        private $db_host;
        private $db_name;
        private $db_username;
        private $db_password;

        public function dbConnection()
        {
            $this->db_host = 'localhost';
            $this->db_name = 'items';
            $this->db_username = 'root';
            $this->db_password = '';
            try {
                $conn = new PDO('mysql:host=' . $this->db_host . ';dbname=' . $this->db_name, $this->db_username, $this->db_password);
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                return $conn;
            } catch (PDOException $e) {
                echo "Connection error " . $e->getMessage();
                exit;
            }
        }
    } 
//WHEN BTN EDIT IS SET
        if (isset($_GET['edit'])) {
            $id = $_GET['edit'];

            $database = new Database;
            $db = $database->dbConnection();
            $sql = "SELECT * FROM posts WHERE id = '$id'";
            $stmt = $db->prepare($sql);
            $stmt->execute([':id' => $id]);
            $item = $stmt->fetch(PDO::FETCH_OBJ);

            $user_id = $item->userId;
            $id_id = $item->id;
            $titel_db = $item->title;
            $completed_db = $item->completed;

        }

这里是用于编辑表单的HTML:

<?php require_once 'process.php' ?>
    <div class="row justify-content-center">
        <form action="process.php" method="post">
            <div class="form-grup">
                <label for="">User ID :</label>
                <input type="text" class="form-control" name="userId" value="<?php echo $item->userId; ?>" placeholder="1" required>
            </div>
            <div class="form-grup">
                <label for="">ID :</label>
                <input type="text" class="form-control" name="id" value="<?php echo $item->id; ?>" placeholder="1" required>
            </div>
            <div class="form-grup">
                <label for="">Title :</label>
                <input type="text" class="form-control" name="title" value="<?php echo $item->title; ?>" placeholder="Enter title" required>
            </div>
            <div class="form-grup">
                <label for="">Completed :</label>
                <input type="text" class="form-control" name="completed" value="<?php echo $item->completed; ?>" placeholder="Not/Completed" required>
            </div>
            <div class="form-grup">
                <hr>
                <button type="submit" class="btn btn-primary btn-block" name="save">Save</button>
                <hr>
            </div>
        </form>
    </div>

直到设置了$ _GET,它才有效。但是当我重新加载索引页面时,它给我这个错误*注意:试图获取属性; **未定义的变量:item *

任何想法/建议如何解决?预先感谢!

php html crud
1个回答
-1
投票

[Undefined variable: item表示$stmt->fetch(PDO::FETCH_OBJ);返回空值。

首先,您应该在这里进行调整:

$sql = "SELECT * FROM posts WHERE id = '$id'";

至:

$sql = "SELECT * FROM posts WHERE id = :id";

然后,在尝试从中获取数据之前,应检查$ item是否存在:

...
$item = $stmt->fetch(PDO::FETCH_OBJ);
if($item) {
    $user_id = $item->userId;
    $id_id = $item->id;
    $titel_db = $item->title;
    $completed_db = $item->completed; 
}

此外,再次检查数据库连接是否正常以及查询是否正在运行。

© www.soinside.com 2019 - 2024. All rights reserved.