PHP:表单选择框不会将更改的选择写入DB

时间:2009-07-08 18:04:18

标签: php mysql select

好的,所以我将此表单设置为预加载数据库记录以进行编辑,如果向网址添加?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)

谢谢!

4 个答案:

答案 0 :(得分:4)

看起来像&lt; select&gt;元素没有名称或ID - 您的代码中的情况是这样吗?如果是这样,我相信$ _POST [has_amenities]将不会被设置 - $ _POST中没有has_amenities值。你会得到一个空字符串。

答案 1 :(得分:2)

在{}(花括号)中包装$ _POST []的所有实例,所以它看起来像这样

'{$_POST['key']}'

花括号需要强制PHP将$ _POST计算为变量,当它在双引号字符串中时。

另外,引用你的$ _POST数组键,如下所示

$_POST['key']

你想养成这个习惯,即使$ _POST [key]通常会有效。 PHP将视为常量,如果未定义,则会自动转换为字符串“key”,以便获得您期望的行为。

但是,如果已作为常量存在(通过 define() )功能,您将获得 常量,这不是你想要的。

查看Array do's and don'ts部分。

答案 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注入”。