也许问题标题不是很具描述性。那是因为我真的不知道如何写它。但我的问题是我有一个名为pagemeta
的表,其中有三列id
,page_property
和property_value
,这就是它的样子:
-----------------------------------
id | page_property | property_value|
------------------------------------
1 | telephone | 445854541 |
2 | email | c@gmail.com |
3 | icon | img/1.jpg |
到目前为止一切顺利。现在我有一个html表单,它发送一个post请求到php页面。 $_POST
数组键以page_property
列中的字段命名,如:电话,电子邮件和图标。 $_POST
数组值是从表单中的输入字段设置的。最后我有一个带有这些值的$ _POST数组:
telephone=>8988989
email=>b@gmail.com
icon=> img/2.jpg
问题从这里开始,我尝试更新pagemeta
表。我不知道如何编写UPDATE
查询,其中property_value
列中的字段使用$_POST
数组中的相应键进行更新。这意味着property_value
中的字段应与page_property
列中的字段值相关联。很抱歉要求这么不清楚和复杂。我真的不知道如何解释。欢迎任何编辑,任何答案都将是一个很大的帮助。谢谢
我到处搜索,但没有找到任何答案。
答案 0 :(得分:1)
使用这个数据库结构,你需要3个查询才能更新3个值,我认为这些值非常糟糕......
UPDATE pagemeta SET property_value = $_POST['telephone'] WHERE page_property = 'telephone'
UPDATE pagemeta SET property_value = $_POST['email'] WHERE page_property = 'email'
UPDATE pagemeta SET property_value = $_POST['icon'] WHERE page_property = 'icon'

您可能想要重新考虑您的数据库结构,我不确定您使用您的结构赢得了什么而不是正常运行并创建了一个名为telephone的列,另一个称为电子邮件,最后一个名为icon
PD:请使用准备好的陈述
答案 1 :(得分:1)
通常,当您创建HTML表单时,您会添加一个隐藏字段,其中包含您正在编辑的行的ID。
<form>
<input type="hidden" name="id" value="1"> <!-- id of record being edited -->
<input type="tel" name="telephone" value="8988989">
<input type="email" name="email" value="b@gmail.com">
<input type="text" name="icon" value="img/2.jpg">
</form>
您的$ POST数组将是:
id=>1
telephone=>8988989
email=>b@gmail.com
icon=> img/2.jpg
如果没有Id,您会假设您希望创建一个新记录,即将另一行插入表中。
您的表格布局也会更改为包含一行中所有内容的表格。
如果您获得了ID,您的更新将是:
UPDATE pagemeta SET
telephone=$_POST[telephone],
email=$_POST[email],
icon=$+POST[icon]
WHERE id=$_POST[id]
NB 以上SQL仅用于说明目的。实际上,必须验证表单输入以避免SQL注入攻击
答案 2 :(得分:0)
确定。您正在PHP IDE中查看一些全局变量并思考“如何将这些变量粉碎到数据库中?”
任何体面的IDE都会警告您使用Superglobal来检索数据。 IDE不会告诉你的是,如果你将它发布到网上,做你正在做的事情就会被利用。
听起来你的旅程一开始就是正确的,所以在你问的时候回答你的问题:
$conn = new mysqli("servername", "username", "password", "dbname");
foreach($_POST as $key => $value) {
$sql = "UPDATE pagemeta SET property_value = $value WHERE page_property = $key"
$conn->query($sql)
}
$conn->close()