2017-07-07 94 views
0

我有一個可以由用戶編輯的形式。進行更改時,我只需要更新這些更改。一位工作人員在整個頁面加載之前按下「保存」,這意味着腳本將表單字段視爲空,因此將空字段替換爲空字段。僅更新編輯/更改的字段

當前的代碼:

$res= mysql_query ("UPDATE table SET site='$site', the1='$the1' WHERE id='$id'"); 

喜歡這裏幫助.....

+2

變化***請[停止使用'mysql_ *'功能(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)***這些擴展(HTTP: //php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7.瞭解[製備](http://en.wikipedia.org/wiki/Prepared_statement)語句被除去[ PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual /en/mysqli.quickstart.prepared-statements.php),並考慮使用PDO,[它真的很容易(http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

[小博](http://bobby-tables.com/)說***腳本是在對SQL注入攻擊的風險。(http://stackoverflow.com/questions/60174/how-can- I-防止-SQL注入式-PHP)***。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+0

在運行查詢之前,您必須驗證服務器端存在的變量。 –

回答

0

你需要寫檢查數據更改的javascript腳本,並只發送更改過的數據。例如,您可以將以前的數據保存在data-prev-value屬性中。

<input type="text" name="my_field" id="field_id" value="old_value" data-prev-value="old_value"> 

在提交時,你比較

$('#field_id').val() != $('#field_id').attr('data-prev-value') 

,如果他們不等於數據添加到陣列,並將其發送給服務器。

0

這裏是一個建議:

$res= mysqli_query("SELECT * from table where id ='$id'"); 

抓取結果陣列。 選擇這些數據後,您需要將它們與你的POST數據 比較,如果你的數據庫獲取數據和您發佈的數據不一樣,那麼你將樹立新的價值。

if($_POST['name'] == $res['name']){ 
    $name = $res['name']; 
} 
else{ 
$name = $_POST['name']; 
} 
0

另一種解決方案可能是將所有字段的值設置爲當前值在數據庫中的值。這樣,他們知道當前值是什麼,並且會更容易讓他們知道要更改什麼,並且在提交表單時,只需重新提交表單中的信息,無論它是否已更改。

例如:

<input type="text" name="firstname" value="<?php echo $row['firstname']; ?>" required> 

表單提交時,它會繼續,這是目前出現了同樣的數據,或更新它,如果值已經在輸入字段

相關問題