2010-07-27 3 views
1

Я искал онлайн скрипт, который демонстрирует, как я могу сделать так, чтобы пользователи на моем сайте могли редактировать поля и т. Д., Но я ничего не мог найти об этом. Поэтому мне было интересно, может ли кто-нибудь объяснить мне, как это работает или просто продемонстрировать со сценарием? Чтобы было ясно, я хочу, чтобы пользователи могли редактировать материалы, которые они отправили, просто нажав «изменить» и нажав кнопку, чтобы обновить все, что они изменили.«Редактировать» функцию для сообщений на форуме и т. Д.

Редактировать: Я забыл упомянуть, что то, что было изменено, должно обновлять таблицу в базе данных MySQL.

+0

Когда я писал свою CMS, я сделал это так, чтобы вы использовали ту же страницу для редактирования/создания для сообщений/потоков. Вы просто используете редактор «Создать новый пост», с полем редактирования, содержащим то, что они там помещают раньше. При отправке формы вы просто обновляете ячейку таблицы базы данных ... – Warty

ответ

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

+0

Спасибо Col.что помогает остановить атаки SQL-инъекций - mysql_real_escape_string ($ value) – Martin

+0

Не совсем. Сама mysql_real_escape_string ничего не останавливает. * в сочетании с кавычками * останавливает синтаксические ошибки. То, что останавливает инъекции - это «intval' вещь. –

0

Я не уверен, что понял, что вы сказали. Если вы хотите изменить порядок действий, вы можете использовать этот плагин jQuery: Jeditable (с Ajax).

+0

Да, извините за отсутствие упоминания; но то, что я хочу, это обновить измененное значение внутри таблицы MySQL. Например, если кто-то редактирует поле «Заголовок» на странице и нажимает кнопку обновления, я хочу, чтобы он обновил поле «Заголовок» в таблице. – Nisto

+0

"UPDATE Table SET field = 'value', another_field = 'another_value' WHERE id = 2" - О SQL UPDATE: http://www.w3schools.com/sql/sql_update.asp – CrociDB

+0

Да, я знаю об UPDATE но я не понимаю, как я «обнаруживаю», что было изменено, и как его обновлять. Или я могу просто использовать команду UPDATE и просто обновлять все, даже если было изменено только одно поле? – Nisto

1

Если вам просто нужна идея создания базовой формы редактирования в PhP, это достаточно просто. Когда они нажимают кнопку редактирования, переведите их в новую форму. Извлеките содержимое из базы данных, используя любую доступную базу данных, к которой вы работаете, и затем инициализируйте это поле. Например, если $content имеет содержание поля:

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

Когда они представляют форму, принять, Что сейчас в поле и использовать его для обновления таблицы. Это то же самое, что и исходный сценарий вставки, за исключением того, что вы используете операторы обновлений вместо вставки.

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> 
Смежные вопросы