所以我正在尝试创建一个HTML下拉列表。这个列表很好——它显示了我从自己的MySQL查询中想要的所有选项;然而,我的下一步是为租户设置默认值(即当前房东)。
现在,我能够成功,但只有房东的钥匙(在单独的表格中)。我有第二个查询,它根据钥匙查找房东的名字,我甚至无法得到回应。我必须假设这个查询很糟糕——但在看了整个上午相同的代码行之后,我相信我可以自信地说它不是。我希望第二双眼睛能看到我没有看到的东西。
为租户获取当前房东:
$sql = mysql_query("SELECT data_txt FROM field_data WHERE itemid = $uid AND fieldid = 16");
$row = mysql_fetch_array($sql);
$ll1 = $row[0];
$sql = mysql_query("SELECT info FROM landlords WHERE key = $ll1 LIMIT 1");
$row = mysql_fetch_array($sql);
$ll1_name = $row[0]
在下拉列表中设置默认值:
我不认为问题出在这里,因为我不能做任何简单的事情,比如回显变量$ll1_name;但我觉得这是值得的。
<td>
<?php echo "$ll1"; ?><br>
<?php echo "$ll1_name"; ?><br>
<select name=ll1>
<option value="<?php echo "$ll1"; ?>"> <?php echo "$ll1_name"; ?></option>
<?php
while ($curLandlord = mysql_fetch_array($landlordRows)){
?>
<option value="<?php echo "$curLandlord[0]"; ?>"> <?php echo "$curLandlord[1]"; ?></option>
<?php
}
?>
</select>
</td>
此外,我很清楚这个图书馆被贬值了,我的田地也没有被消毒,等等。我只是尽可能简单地做这件事,然后在我有了工作模式后实施。变量越少越好。
以下是表格数据的示例:
地主
密钥、信息、id(自动递增)
-*key*: ll1_07
-*info*: John Doe
-*id*: 77
field_dataid,fieldid,data_txt,itemid
-*id*: 1234 (auto increment)
-*fieldid*: 18 (each fieldid corresponds to a field name in another table. 18 is landlord)
-*data_txt*: ll1_77
-*itemid*: 33 (tenants unique ID)
不,这不是"正确的"。您存在sql注入漏洞。仅仅因为$ll1
值来自数据库,并不意味着在另一个查询中重用它是安全的。你正在做相当于的事情
SELECT info FROM landlords WHERE key = foo LIMIT 1
^^^---unknown/illegal field name
而不是
SELECT info FROM landlords WHERE key = 'foo' LIMIT 1
^^^^^--string literal
如果你在查询调用中有BASIC错误处理,你会被告知这一点:
$sql = mysql_query("SELECT [..snip..]") or die(mysql_error());
^^^^^^^^^^^^^^^^^^^^^^
永远不要EVER假设查询成功。即使sql在语法上是100%正确的,它仍然失败的原因几乎是无限多的(最大的原因是缺少外键)。
试试这个,看看响应是什么:
$sql = "
SELECT
fd.data_text,
l.info
FROM
field_data fd
JOIN
landlords l
ON fd.data_text = l.key
WHERE
fd.itemid = $uid
AND fd.fieldid = 16
LIMIT 1";
$rs = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($rs);
var_dump($row);
这应该会告诉你是否正在获取任何数据。