2017-04-14 57 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