[英]An issue when update my table PHP/MySQL
我希望我的問題將足夠清楚和完美,以免被壓倒,甚至不會被關閉。
我有簡單的HTML形式:
<form ..>
<input type="hidden" name="user_id" value="1" />
<input type="text" name="tag[]" value="css" />
<input type="text" name="tag[]" value="php" />
<input type="text" name="tag[]" value="sql" />
...
<input type="text" name="email" value="love@stackoverflow.com" />
</form>
MySQL模式:
id
user_id
tag
....
我想更新user_id = 1
tag
,所以我寫了這段代碼:
注意:表中只有一個用戶。
$user_id = $_POST['user_id'];
$tag = mysql_escape_string($_POST['tag']); // $tag is an array - print $tag
$email = $_POST['email'];
foreach($tag as $value) {
$DB = "UPDATE table SET tag = '$value' AND email = '$email'
WHERE user_id = '$user_id'";
.... // run the query
}
我得到:
id user_id tag
1 1 sql
2 1 sql
3 1 sql
代替 :
id user_id tag
1 1 css
2 1 php
3 1 sql
我問我是否錯過了PHP代碼嗎?
在第一個更新查詢中,將所有user_id為1(所有3個)的記錄設置為“ css”,然后設置為“ php”,最后設置為“ sql”。 在foreach循環完成之后,它們都是“ sql”
您可以嘗試以下方法:
$i = 1;
foreach($tag as $value) {
$DB = "UPDATE table SET tag = '$value' WHERE user_id = '$user_id' AND id=$i";
.... // run the query
$i++;
}
問題是您要更新其中user_id是特定值的所有記錄。 因此,如果您要在foreach循環的每個階段中斷腳本,您將看到列出的3個CSS標記,然后是3個php標記,最后以3個sql標記結束。
對於這種事情,我傾向於走簡單的路線-開始事務,刪除舊標簽,然后插入新標簽,提交並完成。 否則,您將不得不確定哪些標簽是新標簽,哪些標簽已過時,並執行適當的插入/刪除命令來使內容同步。
因此,基本上,您將執行以下操作:
mysql_query("start transaction;") or die(mysql_error());
mysql_query("Delete from yourtable WHERE user_id=$user_id") or die(mysql_error());
$newtags = array();
foreach ($_POST['tag'] as $tag) {
$escaped = "($user_id, " . mysql_real_escape_string($tag) . ")";
}
if (count($escaped) > 0) {
$values = implode(',', $escaped);
$sql = "INSERT INTO yourtable (user_id, tag) VALUES $values";
mysql_query($sql) or die(mysql_error());
}
mysql_query("commit;") or die(mysql_error());
當然,這假定正在使用的表僅包含標簽信息。 如果沒有,那么...好吧...不要這樣做。
不,您錯過了SQL中的某些內容。 您的條件僅根據user_id進行過濾,因此您的UPDATE會更改user_id = 1的每條記錄。
您需要為數組中的每種標簽類型添加一列,以其結構化的方式,需要兩個選擇器
例如:
$DB = "UPDATE table SET tag = '$value' WHERE user_id = '$user_id' AND tag_type='1'";
標簽類型將具有不同的值,具體取決於數組項
假設表已正確索引,則可以執行以下查詢:
INSERT IGNORE INTO `table` (user_id, tag)
VALUES (1, 'css'), (1, 'php')
...和:
DELETE FROM `table`
WHERE user_id=1
AND tag NOT IN ('css', 'php')
我不會評論您的代碼,因為它顯然不是真實的,但請不要忘記正確地轉義輸入數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.