我试图在从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>
答案 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()
函数。
另外在旁注方面,我强烈建议您学习一些验证,清理,转义和会话。