PHP 删除、编辑、保存帖子
Posted
技术标签:
【中文标题】PHP 删除、编辑、保存帖子【英文标题】:PHP Delete, Edit, Save Post 【发布时间】:2017-11-22 19:38:09 【问题描述】:我已经查询了我的数据库,并且我有一个帖子的 ID,如下所示:
<?php
//Database query code is here.
$post_id = $row['id'];
?>
我为每个帖子添加了一个带有按钮的表单,这样当点击时,action.php 文件中的相应函数将被执行以输出一个字符串。 如下
<form action = "action.php" method = "post">
<input type = "hidden" name = <?php echo "$post_id"?>">
<button type = "submit" name = "delete_post">Delete post </button>
<button type = "submit" name = "edit_post">Edit post </button>
<button type = "submit" name = "save_post">Save post </button>
</form>
我有一个 PHP 文件,其中包含如下几个函数
action.php
<?php
//first function
function delete_post($post_id)
if(isset($_POST["delete_post"]))
$post_id = $_POST["$post_id"];
echo " you attempted to delete the post, baby";
//Second function
function edit_post($post_id)
if(isset($_POST["edit_post"]))
$post_id = $_POST["$post_id"];
echo "Hey you attempted to edit the post!";
//Third function
function save_post($post_id)
if(isset($_POST["save_post"]))
$post_id = $_POST["$post_id"];
echo " Wow, did you really need to save that post?";
delete_post($post_id);
edit_post($post_id);
save_post($post_id);
?>
我想要实现的是,例如,当点击 delete_post 按钮时,只有 函数 delete_post($post_id) 应该被执行。
如果点击了edit_post按钮,只需要执行函数edit_post($post_id)。
如果单击 save_post 按钮,则只应执行函数 save_post($post_id)。
但我的代码不起作用。我的问题是表单和 action.php 文件。单击按钮时,我想通过 URL 将 $post_id 作为函数的参数传递,但它不起作用。我是一个初学者,我花了几个小时没有成功。
【问题讨论】:
_$POST
应该是$_POST
,否则发生了什么?
需要先在表单中输出$post_id
。检查命名索引,如果存在则执行适当的函数。 if(!empty($_POST[edit_post'])) delete_post($_GET['post_id'];
隐藏的输入也应该有一个静态名称和一个值,否则你不需要它。
@kchason,感谢您的更正。我现在已将 _POST 更改为 $_POST 并在添加 delete_post($post_id);编辑帖子($post_id); save_post($post_id);成功了
@chris85 谢谢。这对我帮助很大。然后我的代码起作用了。但是我需要隐藏的输入变量名不是静态的
所以你需要回显变量,并将其放入阀门中,而不是名称。
【参考方案1】:
感谢@chris85 鼓励您重新阅读问题。
以下是输入表单和支持表单的功能。
input_form.php
<html>
<body>
<form action="action.php" method="post">
<?php echo '<input type="hidden" name="post_id" value="$post_id">' ?>
<input type="radio" name="action" value="delete_post">Delete
<br>
<input type="radio" name="action" value="edit_post">Edit
<br>
<input type="radio" name="action" value="save_post">Save
<br>
<input type="submit">
</form>
</body>
</html>
action.php
<?php
if ( ! isset($_POST['post_id']) )
// Handle the case if $_POST['post_id'] is not set
if ( ! isset($_POST['action']) )
// Handle the case if $_POST['action'] is not set
# Print the input we got
echo $_POST['post_id'];
echo '<br>';
echo $_POST['action'];
echo '<br>';
if ( $_POST['action'] === 'delete_post' )
delete_post($_POST['post_id']);
elseif ( $_POST['action'] === 'edit_post' )
edit_post($_POST['post_id']);
elseif ( $_POST['action'] === 'save_post' )
save_post($_POST['post_id']);
//first function
function delete_post($post_id)
echo " you attempted to delete the post, baby";
//Second function
function edit_post($post_id)
echo "Hey you attempted to edit the post!";
//Third function
function save_post($post_id)
echo " Wow, did you really need to save that post?";
?>
希望对您有所帮助!
在您的原始代码中,每种操作类型都有一个单独的按钮(即,一个用于删除、编辑和保存)。如果您强烈希望使用多个按钮而不是单选按钮,我建议您使用以下 javascript 答案:Pass a hidden field value based on which button is clicked with JavaScript
【讨论】:
谢谢,你的方法有效,但实际上我需要三个按钮【参考方案2】:你有三个问题:
您拨打的是_$POST
而不是 $_POST
。
除上述内容外,您不应在帖子中传递美元符号:例如,_$POST["$save_post"]
应为 $_POST["save_post"]
。
<input ... name = "$post_id">
应该有一个正确的 ID。您实际上需要在此处输出 $post_id
,而不仅仅是写出PHP 变量。记住;这是原始 HTML;您不在 PHP 块中,因此您的 ID 实际上只是字符串 $post_id
。要更正此问题,请使用<input ... name = "<?php echo $post_id; ?>">
输出变量。
您实际上并没有调用您的任何功能;您需要将代码放在函数之外,以便三个条件都可以独立触发:
if(isset($_POST["delete_post"]))
$post_id = $_POST["post_id"];
echo " you attempted to delete the post, baby";
if(isset($_POST["edit_post"]))
$post_id = $_POST["post_id"];
echo "Hey you attempted to edit the post!";
if(isset($_POST["save_post"]))
$post_id = $_POST["post_id"];
echo " Wow, did you really need to save that post?";
或者确保在页面加载时调用所有三个函数:
function delete_post() ...
function edit_post() ...
function save_post() ...
delete_post();
edit_post();
save_post();
请注意,这三个函数都不需要任何函数参数,因为您在函数本身内部定义了$post_id
。
希望这会有所帮助:)
【讨论】:
感谢您的回复。那很有帮助。但是,您没有指出 _$POST 必须是 $_POST 并且 "$save_post" 必须是 _$POST["$save_post"] 中没有美元符号的 "save_post"。早期的 cmets 已经指出了这一点。我只是添加了正确的,所以另一个初学者可能不会感到困惑 我的第一个要点指出_$POST
必须是$_POST
。但是,是的,您正在寻找$_POST["save_post"]
。虽然我在要点中提到了更正,但我忘记了实际更新 代码。我现在已经更正了:)
如果不循环$_POST
,也很难识别<input ... name = "<?php echo $post_id; ?>">
,我建议将其移至value
并使用静态名称。
@chris85,实际上从数据库中检索到的每个帖子都有自己的 ID,该函数将使用该 ID 删除、编辑或保存该帖子。如果我设置 ,那么该函数将删除所有 name = "static_id" 的帖子,但我只想删除、编辑或保存目标帖子一种。这就是为什么我需要一个帖子有变量名=“$post_id”
@ElizabethKof 仍然不知道您是如何访问它的,$_POST['static_id']
不会比foreach($_POST as $name => $useless) if ($name == 'what you are checking');
更容易【参考方案3】:
您必须从表单中接收元素,并执行 if 语句。
<form action = "action.php?post_id=$post_id" method = "post">
<input type="hidden" name = "$post_id">
<button type="submit" name="delete_post" value="delete_post">Delete post </button>
<button type="submit" name="edit_post" value="edit_post">Edit post </button>
<button type="submit" name="save_post" value="save_post">Save post </button>
</form>
在 PHP 中,是这样的(注意,你必须防止 SQL 注入!!!):
if ($_SERVER['REQUEST_METHOD'] === 'POST')
//something posted
if (isset($_POST['delete_post']))
// delete_post code
else if (isset($_POST['edit_post']))
//edit_post code
else
// save_post code
【讨论】:
以上是关于PHP 删除、编辑、保存帖子的主要内容,如果未能解决你的问题,请参考以下文章