使用PHP确认提示删除记录

时间:2016-08-09 14:25:51

标签: php html mysql pdo

我试图在从Mysql数据库中删除作者之前向用户显示确认是/否提示。当用户在authors.html.php中点击Delete时,控制器包含confirm.php。 confirm.php提示用户是或否确认。如果单击yes按钮,则confirm.php用于将id传递回控制器,然后控制器检查是否设置了操作,如果是,则根据id删除作者。

不幸的是,作者没有被删除,所以问题在于包含了确认提示。没有确认包含,脚本运行得很好,但我想弄清楚出了什么问题,使用Javascript太容易了。

任何帮助表示感谢。

我的控制器:index.php

//inlcude the data connection.
include $_SERVER['DOCUMENT_ROOT'] . '/authors/includes/db.inc.php';

try
{
  $result = $pdo->query('SELECT id, name FROM author'); //Rows of a result set returned by fetch are represented as associative arrays,
}
catch (PDOException $e)
{
  $error = 'Error fetching authors from the database!';
  include 'error.html.php';
  exit();
}

foreach ($result as $row)
{
  $authors[] = array('id' => $row['id'], 'name' => $row['name']);
}

include 'authors.html.php';


if(isset($_POST['action']) and $_POST['action'] == 'Delete') {

include "confirm.php";

  if(isset($_POST['action']) and $_POST['action'] == 'Yes') {

    try {
        $sql = 'DELETE FROM author WHERE id = :id';
        $s = $pdo -> prepare($sql);
        $s->bindValue(':id', $_POST['id']);
        $s->execute();
    }

    catch (PDOException $e) {
        $error = "Error deleting author.";
        include 'error.html.php';
        exit();
    }

    header('Location: .');
    exit();

  }// if yes

} // end if isset delete

authors.html.php然后显示作者列表:

<?php foreach ($authors as $author): ?><!-- loop through the list of authors pulled from the database by the controller -->
    <li>
      <form action="" method="post">
        <div>
          <?php htmlout($author['name']); ?> <!--display a list of authors and an edit and delete button-->
          <input type="hidden" name="id" value="<?php
              echo $author['id']; ?>">
          <input type="submit" name="action" value="Edit">
          <input type="submit" name="action" value="Delete">
        </div>
      </form>
    </li>
  <?php endforeach; ?>

confirm.php ......

<form action="" method="post">
 <input type="hidden" name="id" value="<?php echo $author['id']; ?>">
 <input type="submit" name="action" value="Yes">
 <!--input type="submit" name="action" value="No"-->
</form>

2 个答案:

答案 0 :(得分:1)

对不起,我不能在你的帖子中发表评论,只是答案(我没有要求的声誉)。

所以,你的逻辑错了,见:

if(isset($_POST['action']) and $_POST['action'] == 'Delete') {

include "confirm.php";

  if(isset($_POST['action']) and $_POST['action'] == 'Yes') {

$_POST['action'] == 'Yes'脚本无法传递给:

try {
        $sql = 'DELETE FROM author WHERE id = :id';
        $s = $pdo -> prepare($sql);
        $s->bindValue(':id', $_POST['id']);
        $s->execute();
    }

因为$_POST['action']不再是&#39;删除&#39;

我认为条件if(isset($_POST['action']) and $_POST['action'] == 'Yes')必须在if(isset($_POST['action']) and $_POST['action'] == 'Delete')之外。

答案 1 :(得分:1)

严格来说,就PHP而言,不是试图处理单个action文件(MVC 中的控制器)中的所有内容,而应该做的是...制作第二个表单发布到不同的控制器。

假设您有一个表单/表格,其中包含删除作者的按钮/表单。让表单/按钮调用名为confirm.php的文件,并传递该作者的id

在确认页面中,您使用yes / no输入呈现确认表单。然后,此confirm.php将发布到delete.php,这将检查确认值是否已在$_GET / $_POST内设置并继续执行。

另外在旁注中我建议您学习一些非常基本的JavaScript并使用confirm()函数。

另外在旁注方面,我强烈建议您学习一些验证,清理,转义和会话。