我正在使用“编辑”按钮,并且试图在表单输入字段中显示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 *
任何想法/建议如何解决?预先感谢!
[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;
}
此外,再次检查数据库连接是否正常以及查询是否正在运行。