所以我试图创建一个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>
另外,我很清楚这个库是折旧的,我的字段没有消毒等等。我只是尽可能简单,然后在我有一个工作模型后实现它。变量越少越好。
以下是表格数据的示例:
地主
key,info,id(自动增量)
-*key*: ll1_07
-*info*: John Doe
-*id*: 77
field_data id,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)
答案 0 :(得分:2)
不,这不是“正确的”。你有一个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%正确的,但是它仍然有无数原因导致STILL失败(最大的一个:丢失外键)。
答案 1 :(得分:1)
试试这个并看看响应是什么:
$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);
这应该告诉你是否收到任何数据。