目前,我正在一张桌子上显示所有注册到保健中心的患者。我添加了一个删除按钮或删除链接,将从表中删除患者。当我点击删除按钮时,我收到一条错误消息,之前显示的所有患者都已消失,并且所有患者视图都被删除了。页面现在回显' 0结果'。
如果有人可以帮我解决问题,那么我可以从桌子上删除一位非常感激的病人。
错误消息
警告:main():无法在第48行的E:\ WebProgrammingAssignment \ views \ AllPatientsView.php中获取mysqli_result
更新注册患者模型
<?php
require_once('DAO.php');
class RegisterPatientModel extends DAO
{
protected $target = "patient";
public function __construct()
{
parent::__construct();
}
public function insertPatient($firstname, $lastname, $patstreet, $patcity, $patpostcode, $patphone, $doctorid, $dob)
{
$firstname = parent::escape($firstname);
$empnin = parent::escape($lastname);
$patstreet = parent::escape($patstreet);
$patcity = parent::escape($patcity);
$patpostcode = parent::escape($patpostcode);
$sql = "INSERT INTO {$this->target} (`firstname`, `lastname`, `patstreet`, `patcity`, `patpostcode`, `patphone`, `doctorid`, `dob`) VALUES ('{$firstname}', '{$lastname}', '{$patstreet}', '{$patcity}', '{$patpostcode}', '{$patphone}', '{$doctorid}', '{$dob}');";
return parent::query($sql);
}
public function deletePatient($patientid)
{
$sql = "DELETE
FROM {$this->target}
WHERE patientid='{$patientid}'";
return parent::query($sql);
}
function getAllPatients()
{
$sql = "SELECT a.patientid,
concat(d.firstname, ' ', d.lastname) as fullname_doctor,
a.firstname, a.lastname, a.patstreet, a.patcity, a.patpostcode, a.patphone, a.dob
FROM patient as a
INNER JOIN doctor as d
on a.doctorid = d.doctorid;";
return parent::query($sql);
}
}
?>
更新所有患者观点
<html>
<tr>
<td colspan="5" align="center">
<div id="boxalign2" class="boxalign2">
<div class="inputwrap">
<br>
<table id="customers" width="900" border="1" cellspacing="0" cellpadding="1">
<tr align="center">
<td bgcolor="#008000">Patient ID</td>
<td bgcolor="#008000">Doctor Name</td>
<td bgcolor="#008000">First Name</td>
<td bgcolor="#008000">Last Name</td>
<td bgcolor="#008000">Street</td>
<td bgcolor="#008000">City</td>
<td bgcolor="#008000">Post Code</td>
<td bgcolor="#008000">Telephone</td>
<td bgcolor="#008000">DOB</td>
</tr>
<?php
$allpatients = $_SESSION['patients'];
if ($allpatients->num_rows > 0) {
while ($row = $allpatients->fetch_assoc()) {
echo "<td>" . $row["patientid"] . "</td>";
echo "<td>" . $row["fullname_doctor"] . "</td>";
echo "<td>" . $row["firstname"] . "</td>";
echo "<td>" . $row["lastname"] . "</td>";
echo "<td>" . $row["patstreet"] . "</td>";
echo "<td>" . $row["patcity"] . "</td>";
echo "<td>" . $row["patpostcode"] . "</td>";
echo "<td>" . $row["patphone"] . "</td>";
echo "<td>" . $row["dob"] . "</td>";
echo "<td><a href='../controllers/ViewAllPatientsController.php?patientid=" . $row['patientid'] . "'>Delete</a></td>";
echo "</tr>";
}
} else {
echo "0 results.";
}
?>
更新查看患者控制器
<?php
session_start();
require_once("../models/RegisterPatientModel.php");
$vapc = new RegisterPatientModel;
if (isset($_GET['patientid'])) {
$vapc->deletePatient($_GET['patientid']);
}
$allpatients = $vapc->getAllPatients();
require_once("../views/AllPatientsView.php");
答案 0 :(得分:2)
试试这个:
public function deletePatient($patientid)
{
$sql = "DELETE
FROM {$this->target}
WHERE patientid='{$patientid}'";
echo $sql;
die();
return parent::query($sql);
}
您将能够确定是否正确创建了SQL查询。
强制警告:这不是查询的好方法。
请参阅How can I prevent SQL injection in PHP?
更新第一个
由于deletePatient()
未触发,因此问题必须在源代码中更早。
尝试删除
require_once("../views/AllPatientsView.php");
来自DeletePatientController.php
更新第二次
你没有使用$ _POST,所以删除
if (isset($_POST["Delete"])) {
然后使用$_GET
来访问patientid
更新第3次
if (isset($_GET['patientid'])) {
$patientid->{$_GET['patientid']}();
}
$rpms->deletePatient($patientid);
应该是
if (isset($_GET['patientid'])) {
$rpms->deletePatient($_GET['patientid']);
}
更新第4次
由于查询不是问题的根源,因此请删除调试语句:
public function deletePatient($patientid)
{
$sql = "DELETE
FROM {$this->target}
WHERE patientid='{$patientid}'";
return parent::query($sql);
}
更新第5次
由于删除本身不是问题的一部分,因此下一步是调试代码的其他部分。
$allpatients = $vapc->getAllPatients();
$_SESSION['patients'] = $allpatients;
...
$allpatients = $_SESSION['patients'];
不需要$_SESSION
诡计。移除$_SESSION['patients'] = $allpatients;
和$allpatients = $_SESSION['patients'];
。
然后,改变
if ($allpatients->num_rows > 0) {
到
var_dump($allpatients);
die();
if ($allpatients->num_rows > 0) {
并查看是否会导致任何问题。您应该看到某种DAO
对象或mysql_result(无论parent::query()
返回什么)。
快速提示
您可以从.php文件中删除最后一个?>
。这样可以避免出现一些奇怪的Header错误,并在输出中显示尾随换行符。