困惑如何编写这个简单的UPDATE / INSERT

时间:2009-01-09 18:36:46

标签: php mysql insert

好的,我很困惑如何为我在本地开发的这个简单应用程序编写INSERT / UPDATE,以了解有关数据库交互的更多信息。

我有一个“编辑”页面,它从数据库填充并列出最多9个用户链接(在这种情况下为 user_id 2 ),所以类似于:

<input type="text" name="link1" value="www.yahoo.com">  
<input type="text" name="link2" value="www.google.com">  
<input type="text" name="link3" value="www.amazon.com">  
<input type="text" name="link4" value="">  
<input type="text" name="link5" value="">  
<input type="text" name="link6" value="">  
<input type="text" name="link7" value="">  
<input type="text" name="link8" value="">  
<input type="text" name="link9" value="">  
<input type="submit" name="submitted" value="update">

这里应该显示9个文本输入,前3个输入填充了下面链接表中的URL ...这些输入似乎没有显示在我的问题中,即使它们在我的预览。

我的链接表只有2列,如下所示:

user_id     linkurl
1           http://www.abcnews.com

2           http://www.yahoo.com
2           http://www.google.com        
2           http://www.amazon.com

3           http://www.ebay.com
3           http://www.craigslist.org

如何编写INSERT / UPDATE查询,比如编辑第3个链接并添加第4个,可能是第5个,第6个,第7个,第8个和第9个?

我在同一页面上也有一个用户个人信息的部分,我可以通过以下查询轻松更新:

$query = "UPDATE users
          SET first_name='$firstname', last_name='$lastname', email='$email', state='$state'"  

if($newpass1){
    $query .= ", pass=md5('$newpass1')";
}

$query .= " WHERE user_id = {$_SESSION['user_id']}";

4 个答案:

答案 0 :(得分:2)

我能想到的最简单的方法是将你的html改为这样的

<input type="text" name="link1" value="www.yahoo.com">  
<input type="hidden" name="oldlink1" value="www.yahoo.com">  
<input type="text" name="link2" value="">  
<input type="hidden" name="oldlink2" value=""> 

然后当你检查它是否隐藏元素是空白时,如果是这样的话,如果没有使用更新语句中的值

UPDATE table_name SET linkurl='www.mynewlink.com' 
WHERE linkurl='www.yahoo.com' and user_id=1

答案 1 :(得分:1)

我真的不明白你遇到了什么麻烦。如果你展示了一些你没想过的东西,那可能会有所帮助。

我所做的一条建议是你可能想在link表中添加一个link_id列。这样可以更容易地唯一标识每一行,并保留原始输入顺序。 (我不知道MySQL的实现,但一般来说RDBMS理论你不应该假设行按它们插入的顺序存储。)

更多详细信息:我认为link_id是1到9之间的数字,因此user_id和link_id一起唯一标识链接表中的一行。我不认为这可以通过自动增量实现,但我不知道mysql。当您从表中选择时,它将类似于“SELECT url FROM links WHERE user_id = 3 ORDER BY link_id”;这将使链接保持正确的顺序。提交表单时,我认为您将从字段编号中确定link_id的值。假设您的环境有办法确定受SQL操作影响的行数,我建议您尝试更新,例如“UPDATE links SET url ='newvalue'WHERERE user_id = 3 AND link_id = 4”,如果是报告更新了0行,而不是INSERT。

P.S。我知道你说这是一个学习项目,但随着你的进一步了解请阅读SQL注入以及如何避免它!

答案 2 :(得分:0)

所以我可能会删除用户的所有现有条目,然后重新填充它们:

$query = "DELETE FROM links WHERE user_id = {$_SESSION['user_id']}";
foreach ($i = 1; $i < 10; $i++) {
  if (!empty($_POST['link' . $i])) {
    $query = "INSERT INTO links (user_id, linkurl) VALUES ({$_SESSION['user_id']}, '" . $_POST['link' . $i] . "')";
  }
}

答案 3 :(得分:-1)

我建议在表中添加一个唯一的行标识符(例如SQL Server中的标识列),并使用它来决定要更新的记录。没有行标识符的操作必然是插入。