【问题标题】:HTML / PHP / SQL - Why won't my form updates submit if my form values are pre-set?HTML / PHP / SQL - 如果我的表单值是预设的,为什么我的表单更新不会提交?
【发布时间】:2017-04-14 19:52:47
【问题描述】:

我目前正在开发一个用 PHP 制作的博客网站,我正在尝试制作一个表单来更新预先存在的博客文章。由于这是一个更新,我希望在打开表单时预先填充旧内容,因此我将值设置为包含我正在编辑的帖子的标题和内容的变量。问题是当这个值被设置时,如果我按下提交编辑的文本没有被传递到数据库中,它仍然传递我开始时的相同值。 sql 查询应该没问题,因为如果我在没有设置值的情况下打开表单,我可以覆盖有问题的博客文章而不会出现任何问题。我在想它可能是 $_POST 变量没有在正确的时间更新并获取预设值而不是输入的值。我该如何解决这个问题?

这是发布功能:

  if (isset ($_POST['btn-post'])){
//getting rid of whitespace
    $title     = trim($_POST['title']);
    $content   = trim($_POST['content']);
    $ID = $postID;
   // $tags      = trim($_POST['tags']);

if (empty ($title)){

        $error[] = "Please enter a title."; 
    }

    if (empty($content)) {

        $error[] = "Please enter some text.";
    } 

    if (strlen($title) > 250) {
    $errors = 'Please shorten your title, it is too long (250 character limit).';
    }

    if (strlen($content) > 2000) {
    $errors = 'Please shorten your blog post, it is too long (2000 character limit).';
    }

    else {
        $post->updatePost($title, $content, $ID);
        header('Location: index.php');
        exit;
    }
}

查询如下:

    public function updatePost($title,$content,$postID)
{
   try
   {$stmt = $this->db->prepare("UPDATE posts
                                SET post_title = :post_title, post_content = :post_content
                                WHERE post_id=:post_id");

       $stmt->bindParam(":post_title", $title);
       $stmt->bindParam(":post_content", $content);
       $stmt->bindParam(":post_id", $postID);  
       $stmt->execute();

       return $stmt; 
   }
   catch(PDOException $e)
   {
       echo $e->getMessage();
   }    
}

这是带有预设值的帖子表单($postTitle 和 $postValue 在另一个文件中定义):

 <form class ="col-sm-8 well well-lg" action="" method="post">



            <div class="form-group">
                <label for="title">Title</label>
                <input class="form-control" type="text" name="title" value="<?= $postTitle ?>">
            </div>  

            <div class="form-group">
                <label for="content"> Content </label>
                <textarea class="form-control" name="content" rows="10"><?= $postContent ?></textarea>
            </div>

                <div>
                <input type="submit" value="Update Post" name="btn-post">
                </div>
                       </form>

【问题讨论】:

    标签: php forms post sql-update submit


    【解决方案1】:

    案例已结束 - 其中一个变量调用了数组中的错误索引,并且两个表单元素最终使用了相同的名称。

    【讨论】:

    • Ergo,仅凭您提供的信息,我们无法弄清楚这一点。但在调试自己方面做得很好。通常 var_dump 变量将有助于解决问题。
    • 对此还是很陌生,抱歉,下次遇到问题时会确保包含完整代码。感谢您的尝试,并开始更多地使用 var_dump!
    【解决方案2】:

    您应该像绑定 post_id 一样绑定您的标题和内容。也是 bindParam()。

    【讨论】:

    • 我最初确实是这样绑定的,但这并没有什么不同。我只是将它们更改为这种方式,看看它是否有帮助,但它没有。 (我会把它们改回来,只需要解决这个问题)
    • 您需要输出调用这些函数的实际脚本。对这些变量执行 var_dump 以查看您对它们有什么输出。您需要修复函数名称并去掉单引号并绑定它们。更新您的代码。
    • 我已经用 bindParams 等更新了我的帖子。这不是问题。该查询工作得很好,唯一一次它不起作用是当我没有从一个空表单开始时。当表单输入具有设定值时,$_POST 变量似乎没有及时更新新输入以将其传递到查询中。
    • 我无法通过你告诉我问题来调试你的代码。需要查看实际输出和您的代码。如果你的表格是空的,你不会做插入吗?您甚至没有显示检索这些 $_POST 变量的位置。也需要你的前端表单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多