2010-07-27 50 views
1

我一直在尋找在線演示我怎麼會去讓用戶有可能在我的網站能夠編輯領域和這樣一個劇本,但我無法找到任何關於它。所以我想知道如果有人能向我解釋它是如何工作的或只是用腳本來演示?爲了清楚起見,我希望用戶能夠通過點擊「編輯」並按下按鈕來更新他們提交的內容,以便更新他們更改的內容。「編輯」功能,這樣

編輯:我忘了,更不用說什麼改變應該在MySQL數據庫中更新的表。

+0

當我寫我的CMS,我做到了,讓你使用相同的頁面編輯/創造職位/線程。您只需使用「創建新帖子」編輯器,編輯框包含之前放置的內容。在提交表單時,您只需更新數據庫表的單元格... – Warty 2010-07-27 09:45:51

回答

1

您需要2個PHP文件來做到這一點。你可以使用單個文件,但這個概念更容易解釋。

  1. 一種形式,將加載數據庫內容到田間地頭,用戶可以再編輯值,然後按下一個按鈕做一次提交他們的變化。
  2. 接收更改的信息,並更新數據庫的文件。

這裏是爲所述第一文件的代碼實例:

<?php 
// connect to SQL 
$dbcnx = @mysql_connect("localhost", "db_name", "password"); 
if (!$dbcnx) { 
    echo("<P>Unable to connect to the database server at this time.</P>"); 
    exit(); 
} 
// connect to database 
$dbcon = @mysql_select_db("db_table", $dbcnx); 
if (!$dbcon) { 
    echo("<P>Unable to locate DB table at this time.</P>"); 
    exit(); 
} 

#data preparation for the query 
$id = intval($_GET["id"]); 

# selects title and description fields from database 
$sql = "SELECT * FROM table_name WHERE id=$id"; 
$result = mysql_query($sql) or die(mysql_error());   
# retrieved by using $row['col_name'] 
$row = mysql_fetch_array($result); 

?> 

<h3>Edit</h3> 
<form action="save_edit.php" enctype="multipart/form-data" method="post" name="myForm" /> 
    <table> 
    <tr> 
     <td><b>Title</b></td> 
     <td><input type="text" size="70" maxlength="100" name="title" value="<?php echo $row['title'] ?>"></td> 
    </tr> 
    <tr> 
     <td><b>Description</b></td> 
     <td><textarea cols="80" rows="18" name="description"><?php echo $row['description']; ?></textarea></td> 
    </tr> 
    </table> 
    <input type="hidden" name="id" value="<?php echo $id; ?>" /> 
    <input name="enter" type="submit" value="Edit"> 
</form> 

<?php 
mysql_close($dbcnx); 
?> 

這裏是用於那裏它接收由用戶做出的變化,並更新數據庫中的第二文件的代碼的示例。

<?php 
// connect to SQL 
$dbcnx = @mysql_connect("localhost", "db_name", "password"); 
if (!$dbcnx) { 
    echo("<P>Unable to connect to the database server at this time.</P>"); 
    exit(); 
} 
// connect to database 
$dbcon = @mysql_select_db("db_table", $dbcnx); 
if (!$dbcon) { 
    echo("<P>Unable to locate DB table at this time.</P>"); 
    exit(); 
} 

#data preparation for the query 
$id = intval($_POST["id"]); 
foreach ($_POST as $key => $value) $_POST[$key] = mysql_real_escape_string($value); 

$sql = "UPDATE table_name SET 
     title='$_POST[title]', 
     description='$_POST[description]', 
     WHERE id=$id"; 

if (!mysql_query($sql,$dbcnx)) { 
    die('Error: ' . mysql_error()); 
} 

mysql_close($dbcnx); 
header ("location: http://www.domain.com/url_to_go_to_after_update"); 
?> 
+0

非常感謝!真的很有幫助。會試試這個。接受這個答案。 – Nisto 2010-07-27 10:25:30

+0

謝謝上校。這有助於阻止SQL注入攻擊 - mysql_real_escape_string($ value) – Martin 2010-07-27 10:29:21

+0

不是。 mysql_real_escape_string本身不會停止任何操作。 *結合引號*可以停止語法錯誤。什麼停止注射 - 這是'intval'的東西。 – 2010-07-27 10:41:34

0

我不知道我明白你說什麼。如果你想要一種編輯方式,你可以使用這個jQuery插件:Jeditable(帶有Ajax)。

+0

是的,抱歉不提;但我想要它做的是更新MySQL表中更改的值。例如,如果有人在頁面上編輯了一個名爲'Title'的字段,並單擊更新按鈕,我希望它更新表中的'標題'字段。 – Nisto 2010-07-27 09:45:50

+0

「UPDATE Table SET field ='value',another_field ='another_value' WHERE id = 2」 - 關於SQL UPDATE:http://www.w3schools.com/sql/sql_update.asp – CrociDB 2010-07-27 09:49:46

+0

是的,我知道UPDATE命令,但我不明白的是我如何「檢測」已更改的內容以及如何更新它。或者我可以只使用UPDATE命令並簡單地更新所有內容,即使只有一個字段被更改? – Nisto 2010-07-27 09:53:18

1

如果你只需要一個想法如何在PHP中創建一個基本的編輯形式,這是很容易。當他們點擊編輯按鈕時,將它們轉換爲新的表單。從數據庫中提取內容,使用任何訪問api的數據庫,然後使用它初始化該字段。例如,在$content有字段的內容:

echo '<textarea name="content">'.htmlspecialchars($content).'</textarea>'; 

當他們提交表單,需要什麼,現在在外地,並用它來更新表。它與原始插入腳本相同,除了使用update語句而不是插入。

0

爲了擴大丹尼爾的代碼位

<?php 

$filename = "file.txt"; 

if ($_SERVER['REQUEST_METHOD'] == 'POST']) { 
    file_put_contents($filename, $_POST['content']); 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
} 
$content = htmlspecialchars(file_get_contents($filename)); 
?> 
<form method="POST"> 
<textarea name="content"><?php echo $content?></textarea><br> 
<input type="submit"> 
</form>