试图从表中删除一行

时间:2017-05-03 21:09:42

标签: php mysql

目前,我正在一张桌子上显示所有注册到保健中心的患者。我添加了一个删除按钮或删除链接,将从表中删除患者。当我点击删除按钮时,我收到一条错误消息,之前显示的所有患者都已消失,并且所有患者视图都被删除了。页面现在回显' 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");

1 个答案:

答案 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错误,并在输出中显示尾随换行符。