2013-07-26 4 views
1

Я пытаюсь выяснить, как обновлять данные в определенной строке базы данных вместо удаления, а затем снова вставлять другой запрос. Кто-нибудь знает, как я могу это сделать?Как использовать замену существующих данных в строке?

содержание main.php

<body> 

<h1>Introduction Box</h1> 
<form action="edit.php" method="post"> 
Title: <input type="text" name="introtitle"> 
Description: <textarea name="introdescription"></textarea> 
<input type="submit"> 
</form> 

</body> 

содержание edit.php (Сейчас это только добавляет запись из формы)

<?php 
// Connnection to MySQL 
$connection = mysqli_connect(""); 

// Check Connection and Display If Error 

if (mysqli_connect_errno($connection)) { 
    echo "Failed to connect to MySQL: " . mysqli_conncet_error(); 
} 

$introduction="INSERT INTO Introduction (Title, Description) 
VALUES ('$_POST[introtitle]','$_POST[introdescription]')"; 

if (!mysqli_query($connection, $introduction) or die(mysql_error())) 
    { 
    die('Error: ' . mysqli_error($connection)); 
    } 
echo "Record has been updated."; 

mysqli_close($connection); 

?> 

Любая помощь будет принята с благодарностью!

+0

Вам нужно иметь уникальное значение, которое вы передаете, затем вы можете добавить в свой SQL дубликат ключа ... – cmorrissey

+0

Что именно вы подразумеваете под уникальным значением и дублирующим ключом? – user1804933

+0

Во-первых, SELECT * FROM tbl_name WHERE value = ""; Если rowcount> 1, ваше значение существует, тогда ваш запрос должен ОБНОВИТЬ else INSERT. Надеюсь, эта логика может помочь. –

ответ

1

В форме «Редактировать» вам нужно скрытое поле с идентификатором. Является ли «Заголовок» идентификатором или есть отдельный столбец идентификатора?

В SQL, в зависимости от того, ID или TITLE является ключом, вам нужно:

update INTRODUCTION set TITLE=?, DESCRIPTION=? where ID=? 
update INTRODUCTION set TITLE=?, DESCRIPTION=? where TITLE=? -- set new title, WHERE previous title 

Если вы настаиваете на использовании, не подготовленных заявлений (уязвимыми для инъекций SQL), убедитесь, вы фильтруете или дезинфицируете значения, входящие в ваш оператор SQL. См: What are the best PHP input sanitizing functions?

UPDATE Introduction SET Title='value', Description='value' WHERE ID=id 

отфильтрованных значения из Интернета в SQL позволяют злоумышленникам взломать или разрушить вашу базу данных с тривиальной легкостью.

1

Есть два варианта, вы можете использовать выражение «Дубликат KEY UPDATE» и просто получить то, что вы хотите обновляться, когда запись уже есть

INSERT INTO `table` 
    (`col1`,`col2`) 
SELECT * FROM table 
ON DUPLICATE KEY UPDATE col1 = 'value'; 

Второй вариант использования REPLACE. Для этого один раз поменять INSERT для ЗАМЕНЫ, и он должен работать нормально:

REPLACE INTO Introduction (Title, Description) 
VALUES ('$_POST[introtitle]','$_POST[introdescription]') 

http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

http://dev.mysql.com/doc/refman/5.0/en/replace.html

+0

Собственный синтаксис, только MySQL, также может иметь многопользовательские/параллельные проблемы. Я рекомендую использовать правильный ANSI SQL и оставаться переносимым между базами данных. –

+0

Это то, о чем я говорил ... – cmorrissey

+0

Он не просил PORTABLE SQL. Я даже не думаю, что он действительно дерьмо за это, иначе он будет использовать PDO вместо mysqli. Никаких конструктивных комментариев. – medina

0

Синтаксис запроса mysql_query("UPDATE tablename SET column='value' WHERE CONDITION")

2

HTML код формы будет выглядеть

<h1>Introduction Box</h1> 
<form action="edit.php" method="post"> 
Title: <input type="text" name="introtitle"> 
Description: <textarea name="introdescription"></textarea> 
<input type="hidden" name="id" value="<?php echo $current_edit_id;?>"> 
<input type="submit"> 
</form> 

</body> 

код PHP скрипт будет выглядеть

<?php 
// Connnection to MySQL 
$connection = mysqli_connect(""); 

$current_edit_id = $_POST['current_edit_id']; 

// Check Connection and Display If Error 

if (mysqli_connect_errno($connection)) { 
    echo "Failed to connect to MySQL: " . mysqli_conncet_error(); 
} 

$introduction="UPDATE Introduction SET Title='value', Description='value' WHERE ID='$current_edit_id'"; 

if (!mysqli_query($connection, $introduction) or die(mysql_error())) 
    { 
    die('Error: ' . mysqli_error($connection)); 
    } 
echo "Record has been updated."; 

mysqli_close($connection); 

?> 

надеюсь, что это будет уверен, что поможет вам.

+0

Это выглядит правильно? '$ Introduction =" UPDATE Введение SET Title = '$ _ POST [introtitle]', Description = '$ _ POST [introdescription]' WHERE ID = '$ current_edit_id' ";' – user1804933

+0

thats just statement вам нужно написать правильный запрос обновления mysql, надеюсь, вы могли бы сделать это уверенно. – liyakat

+0

Ah okay thank you – user1804933