【问题标题】:$_POST not triggering when submitting form and passing variable data via URL提交表单并通过 URL 传递变量数据时 $_POST 未触发
【发布时间】:2017-08-20 00:04:55
【问题描述】:

简单的 CRUD 应用程序。
主列表包含几个孩子 删除孩子时,我将 parentID 和 childID 传递给我的 deleteItem 脚本“deleteitem.php”。

从数据库信息中呈现的表格

<form action="deleteitem.php" method="post">

<?php

$var = 1;
$listID = $_GET['listID'];

$select = "SELECT subtasks.createdOn, subtasks.subtask_id, subtasks.listTitle, subtasks.createdBy, subtasks.listStatus, subtasks.createdOn
           FROM subtasks
           INNER JOIN userlists 
           ON subtasks.parentID = userlists.listID
           WHERE subtasks.isChild = :var
           AND subtasks.parentID = :listID";
$select = $pdo->prepare($select);
$select->bindParam(':var',$var);
$select->bindParam(':listID',$listID);
$select->execute();

while ($row = $select->fetch(PDO::FETCH_ASSOC)) {

    $listID = $row['subtask_id'];
    $listTitle = $row['listTitle'];

    echo "<tr>";
    echo "<td>".$createdOn = $row['createdOn']."</td>";
    echo "<td>".$listTitle = $row['listTitle']. "</td>";
    echo "<td>".$listStatus = $row['listStatus']."</td>";
    echo "<td><a class=\"btn btn-warning\" href='edit.php?edit_id=$listID'";
    echo "</a><i class=\"fa fa-pencil-square-o\"></i>";
    echo "<a>";
    echo " ";
    echo "<a href='deleteitem.php?listID=$listID&parentID=$parentID'>";
    echo "<input=\"submit\" class=\"btn btn-danger\" value=name=\"deleteItem\"/>";
    echo "<i class=\"fa fa-trash-o\"></i></a>";
    echo "<a></td>";
    echo "</tr>";
}
echo "</tbody>";
echo "</table>";
echo "</div>";
?>

</tbody>
</form>

deleteitem.php

<?php

session_start();

if(!isset($_SESSION['user_id'])) {
    header("Location: index.php");
}

/**Include our MySQL connection.*/
require 'database.php';

$listID = $_GET['listID'];
$parentID = $_GET['parentID'];

try {
    if(isset($_POST['deleteItem'])) {

        $delete = "DELETE FROM subtasks 
                   WHERE subtask_id = :listID 
                   AND parentID = :parentID";
        $delete = $pdo->prepare($delete);
        $delete->bindParam(':listID',$listID);
        $delete->bindParam(':parentID',$parentID);
        $delete->execute();

        $listID = $parentID;

        header("location:list.php?listID=$listID&parentID=$parentID");
        echo 'The delete happened';
    }
    /* catch any exceptions that may occur */
} catch(PDOException $e) {
    echo "error:".$e->getMessage();
}

echo 'Parent ID ';
var_dump($parentID);
echo '<br/>';
echo 'List ID ';
var_dump($listID);

?>

我的 var_dump 行正在输出 parentID 和 listID,所以我知道数据正在被推送到 deleteitem.php 文件。然而,出于某种原因,DELETE 语句根本没有运行。

任何帮助找出 DELETE 语句未执行的原因将不胜感激。

【问题讨论】:

  • $_POST 不使用 url,$_GET 使用。
  • 链接不会提交表单,只有 submit/input 会提交表单,或者使用一些 JS。
  • 你最近不太善于接受答案。如果您从不留下提示,那么 SO 社区为什么要帮助您
  • 我假设你在跟我说话。如果有人回答了我的帖子并且该答案确实有效,我将其标记为已接受。仅仅因为有人发布了一些东西并不能保证他们得到答案。如果有多个答案而我选择了您不会选择的答案,您会进一步抱怨吗?事实上,您的帖子根本没有提供任何帮助。

标签: php mysql pdo


【解决方案1】:

$_POST['deleteitem'] 只有在您按下提交按钮时才会出现。

如果您单击此处创建的锚标记:

echo "<a href='deleteitem.php?listID=$listID&parentID=$parentID'>";

您不会使用 POST 而是使用 GET 发送到 php。也只有存在于查询字符串中的变量,即?listID=$listID&amp;parentID=$parentID,将被传递,而不是deleteItem

因此,如果您单击锚标记,则此 IF 测试行将永远不会为真

if(isset($_POST['deleteItem'])) {

【讨论】:

  • 让我看看。
  • 这是有道理的。这可以解释为什么 DELETE 语句从未真正运行过。我摆脱了if(isset($_POST['deleteItem'])) {,所以现在该语句只在调用页面时运行。像冠军一样工作!!谢谢
【解决方案2】:

$_POST 用于POST 方法,$_GET 用于GET 方法。 $_REQUEST 两者都适用。

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多