【问题标题】:Can't update or delete dynamically with twig and php oop无法使用 twig 和 php oop 动态更新或删除
【发布时间】:2017-04-29 02:58:33
【问题描述】:

我正在学习 php oop,我对此要发疯了......

我想用我网站中的表格更新我的数据库。

我这样创建模型:

public function update(Post $post){

$q = $this->_db->prepare('UPDATE posts SET title = :title, featuredImg = :featuredImg, content = :content, author = :author, date = :date, header = :header WHERE id = :id');

$q->bindValue(':title', $post->title(), PDO::PARAM_STR );
$q->bindValue(':content', $post->content(), PDO::PARAM_STR );
$q->bindValue(':author', $post->author(), PDO::PARAM_STR );
$q->bindValue(':header', $post->header(), PDO::PARAM_STR );
$q->bindValue(':date', $post->date(), PDO::PARAM_STR );
$q->bindValue(':featuredImg', $post->featuredImg(), PDO::PARAM_STR);
$q->bindValue(':id', $post->id(), PDO::PARAM_INT);

$q->execute();

和我的方法:

public function updatePost(){
        $manager = new PostsManager($this->db);
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            $p = new Post([
                          'title' => $_POST['title'],
                          'header' => $_POST['header'],
                          'author' => $_POST['author'],
                          'date' => date("Y-m-d H:i:s"),
                          'content' => $_POST['content']
                          ]);
            $manager->update($p);
        }
    }

当我var_dump($p) 我有我的表格中的数据,但是当我用我的方法尝试它时 $manager->update($p) 它说 null 所以我的数据库没有任何变化。

我没有使用 Doctrine 或其他 DBAL 层。

请你告诉我我做错了什么?我再说一遍,我正在学习。 非常感谢

编辑:

我的不好,当我var_dump($p)时,我的id是null,这不好对吧? :

$object(Post)[13]
    private '_id' => null    
    private '_title' => string 'Spicy jalapeno enim flank laborum prosciutto' (length=44)
    private '_content' => string 'Commodo shankle t-bone, pork loin occaecat ea andouille shoulder venison sausage chicken ... (length=1573)  
    private '_author' => string 'aaaaaaaaaaa' (length=11)
    private '_date' => null
    private '_header' => string 'Spicy jalapeno ...' (length=190)
    private '_featuredImg' => null_

【问题讨论】:

  • execute() 方法应该返回一个关于操作状态的布尔值。您使用的是学说(您的问题不清楚)还是其他 DBAL 层?
  • 嗨!不,我没有使用教义(我不知道它是什么:P)
  • 您是否将现有的id 传递给您的表单?使用隐藏字段或查询字符串
  • @DarkBee 我刚刚在我的表单中添加了 id,现在它正在工作......但这是一个好习惯?
  • @NathanMeyer 如果您担心用户使用 ID 进行调整,您应该验证 ID 或存储当前正在会话中编辑的 ID。无论如何,您必须通过ID,否则您的代码将永远不知道它必须编辑哪篇文章,因为PHP 是无状态的:)

标签: php oop crud


【解决方案1】:

只需在我的 Post 对象中添加 ID,一切都恢复正常

  $post = new Post([
  'id' => $_POST['id'],
  'title' => $_POST['title'],
  'header' => $_POST['header'],
  'author' => $_POST['author'],
  'date' => date("Y-m-d H:i:s"),
  'content' => $_POST['content'],
  'featuredImg' => $image
]);

【讨论】:

    【解决方案2】:

    问题似乎与您发布的代码的表面无关,但是通过将 prepare() 语句放在 try-catch 块中,您'将能够找出它是否是您的 SQL 查询或 PHP 代码中的问题....

    try {
         //...
         $q = $this->_db->prepare('UPDATE posts SET title = :title, featuredImg = :featuredImg, content = :content, author = :author, date = :date, header = :header WHERE id = :id');
         //...
         $q->execute();
    } catch (Exception $e) {
         echo "Problem happened: " . $e->getMessage() 
    }
    

    这样您可以获得比 NULL 更多的响应。

    【讨论】:

    • 您好,感谢您的回答。我刚刚尝试过这样做,当我var_dump($manager->update($p))时,我仍然有一个Controller/Controller.php:57:null
    【解决方案3】:

    您的添加功能是否适用于同一系统?

    可以试试这个

    public function updatePost() {
        $manager = new PostsManager($this->db);
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            $p = new Post($_POST);
            $manager->update($p);
        }
    }
    

    或者你的身份证是空的

    【讨论】:

    • 我试过了,结果一样。空..这让我发疯^^。我的添加功能运行良好
    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多