好的,所以我将此表单设置为预加载数据库记录以进行编辑,如果向网址添加?edit = 1,它将加载记录#1以便编辑到表单中。我有一个像这样的盒子 -
<select class="field select addr">
<option value="no"<?php if($row['has_amenities'] == "no") {echo ' selected=\"selected\"'; } ?>>No</option>
<option value="yes"<?php if($row['has_amenities'] == "yes") {echo 'selected=\"selected\"'; } ?>>Yes</option>
</select>
现在,假设$ row ['has_amenities']为“是”,因此当表单加载时,选择框显示“是”。
但是,如果我将选择框更改为“否”并单击“保存”,则不会向数据库写入“否”,但它会删除该记录的“是”,没有任何内容。
我做错了什么?
这是更新代码 -
$sql = "UPDATE venues SET microsite_title = '$_POST[microsite_title]',
microsite_city_title = '$_POST[microsite_city_title]', logo = '$_POST[logo]', photo1 =
'$_POST[photo1]', photo2 = '$_POST[photo2]', photo3 = '$_POST[photo3]', photo4 =
'$_POST[photo4]', photo5 = '$_POST[photo5]', photo6 = '$_POST[photo6]', photo7 =
'$_POST[photo7]', photo8 = '$_POST[photo8]', website_primary = '$_POST[website_primary]',
website_secondary = '$_POST[website_secondary]', paragraph_1_title =
'$_POST[paragraph_1_title]', paragraph_1 = '$_POST[paragraph_1]', paragraph_2_title =
'$_POST[paragraph_2_title]', paragraph_2 = '$_POST[paragraph_2]', paragraph_3_title =
'$_POST[paragraph_3_title]', paragraph_3 = '$_POST[paragraph_3]', paragraph_4_title =
'$_POST[paragraph_4_title]', paragraph_4 = '$_POST[paragraph_4]', paragraph_5_title =
'$_POST[paragraph_5_title]', paragraph_5 = '$_POST[paragraph_5]', paragraph_6_title =
'$_POST[paragraph_6_title]', paragraph_6 = '$_POST[paragraph_6]', top10_1 =
'$_POST[top10_1]', top10_2 = '$_POST[top10_2]', top10_3 = '$_POST[top10_3]', top10_4 =
'$_POST[top10_4]', top10_5 = '$_POST[top10_5]', top10_6 = '$_POST[top10_6]', top10_7 =
'$_POST[top10_7]', top10_8 = '$_POST[top10_8]', top10_9 = '$_POST[top10_9]', top10_10 =
'$_POST[top10_10]', top10_locale = '$_POST[top10_locale]', contact_title =
'$_POST[contact_title]', contact_street_addr = '$_POST[contact_street_addr]',
contact_street_addr2 = '$_POST[contact_street_addr2]', contact_city =
'$_POST[contact_city]', contact_state = '$_POST[contact_state]', contact_zip =
'$_POST[contact_zip]', contact_phone = '$_POST[contact_phone]', contact_tollfree =
'$_POST[contact_tollfree]', latitude = '$_POST[latitude]', longitude = '$_POST[longitude]',
testimonial = '$_POST[testimonial]', sidebar_title = '$_POST[sidebar_title]',
sidebar_content = '$_POST[sidebar_content]', has_amenities = '$_POST[has_amenities]'
WHERE id = '$_POST[query]'";
另外,我知道在没有先清理它们的情况下编写$ _POST值并不是一个好主意,但这是防火墙后面的内部形式等等。我会在它工作后清理它:o)
谢谢!
答案 0 :(得分:4)
看起来像&lt; select&gt;元素没有名称或ID - 您的代码中的情况是这样吗?如果是这样,我相信$ _POST [has_amenities]将不会被设置 - $ _POST中没有has_amenities值。你会得到一个空字符串。
答案 1 :(得分:2)
'{$_POST['key']}'
花括号需要强制PHP将$ _POST计算为变量,当它在双引号字符串中时。
$_POST['key']
你想养成这个习惯,即使$ _POST [key]通常会有效。 PHP将键视为常量,如果未定义,则会自动转换为字符串“key”,以便获得您期望的行为。
但是,如果键已作为常量存在(通过 define() )功能,您将获得值 键常量,这不是你想要的。
答案 2 :(得分:1)
尝试使用大括号包装数组变量,如下所示:
'$_POST[paragraph_3]' = '{$_POST[paragraph_3]}'
答案 3 :(得分:1)
您需要为此选择标记指定名称。我也看到你用反斜杠转义你的双引号,这是不必要的(它会字面上使用\“所以输出看起来像:selected = \”selected \“这是坏的html)。
尝试使用:
<select name="has_amenities" class="field select addr">
<option value="no"<?php if($row['has_amenities'] == "no") {echo ' selected="selected"'; } ?>>No</option>
<option value="yes"<?php if($row['has_amenities'] == "yes") {echo 'selected="selected"'; } ?>>Yes</option>
</select>
您的SQL语句将按照它的方式工作,但不是如果用户输入单引号,它将破坏语句...可能导致巨大的安全漏洞。查看谷歌上的“SQL注入”。