2010-07-27 132 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>