2017-04-14 59 views
1

我正在评论系统,我希望用户能够编辑它们。我已经制作了一个有效的发布系统和一个可行的删除系统。当我尝试更新帖子,虽然它将我重定向到?edit_success url。但它只是不更新​​帖子。表格不更新帖子

将用户带到更新页面的表单。

<form class='edit-form' method='POST' action='editmessage.php'> 
       <input type='hidden' name='cid' value='".$row['cid']."'> 
       <input type='hidden' name='uid' value='".$row['uid']."'> 
       <input type='hidden' name='date' value='".$row['date']."'> 
       <input type='hidden' name='content' value='".$row['content']."'> 
       <button>Edit</button> 
      </form> 

提交表单后,它进入这个PHP文件

<?php include('header.php'); ?> 

    <body> 
     <div class="container"> 
     <?php 

     $cid = $_POST['cid']; 
     $uid = $_POST['uid']; 
     $date = $_POST['date']; 
     $content = $_POST['content']; 

    echo "<form method='POST' action='includes/edit_post.inc.php'> 
     <input type='hidden' name='uid' value='".$_SESSION['username']."'> 
     <input type='hidden' name='date' value='".date(' Y-m-d ')."'> 
     <textarea class='ckeditor' name='content2'></textarea> 
     <br> 
     <button type='submit' class='btn btn-default' name='submit_vault_edit'>Edit</button> 
    </form>"; 
?> 
      </div> 

    <?php include('footer.php'); ?> 

进入后这种形式是不言而喻的PHP脚本,更新后

<?php 
include 'dbh.php'; 

    if (isset($_POST['submit_vault_edit'])) { 
     $cid = $_POST['cid']; 
     $uid = $_POST['uid']; 
     $date = $_POST['date']; 
     $content = $_POST['content2']; 

     $sql = "UPDATE vaults SET content='$content' WHERE cid='$cid'"; 
     $result = mysqli_query($conn, $sql); 

     header("Location: http://www.generationdiary.com/user_vault.php?editsuccess"); 
    } 

我所有的数据库连接是正确的,一切都在这个意义上建立我只是觉得我在我的最后一位代码有问题(代码块3)

+1

你没有从post方法传入'$ cid'! – Saty

+0

OMG !!!我怎么错过那个先生,谢谢你! – cosmichero2025

+1

永远不会信任来自用户的数据 - >您应该真的**考虑使用[PPS:Prepared Parameterized Statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)。这将有助于[阻止SQL注入](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)。它也有助于使用'error_reporting(E_ALL); ini_set('display_errors',1);'在你的页面之上,让PHP警告你。正如@Saty所说的那样,好像你错过了$ var – OldPadawan

回答

1

您尚未从代码的第二部分传递cid值。

,你可以将它列为

<input type='hidden' name='cid' value='".$cid."'> 

你的代码是开放的valnurable SQL注入

检查How can I prevent SQL injection in PHP?,以防止它。

+0

呵呵我实际上会问,但是我使用的textarea使用ckeditor来设置文章的样式,所以当我使用mysqli_real_escape_string时,用户会看到样式标签与他们的文本。哦,我已经在我的登录/注册表格中保护了这一点,这是唯一一个没有做到的事情。 – cosmichero2025

+0

而不是'mysqli_real_escape_string'您可以使用[Prepare Statement](http://php.net/manual/en/mysqli.prepare.php) – Saty

+0

好的,谢谢我将尽快实施 – cosmichero2025