【发布时间】:2011-05-25 06:21:57
【问题描述】:
我对 php 和 mysql 还很陌生,所以希望有更多经验的人能够在这里给我一些指导。
我有以下代码:
<?php
$npcname = $_GET['npcname'];
$npcinfo="SELECT * from npcs where name='$npcname'";
$npcinfo2=mysql_query($npcinfo) or die("could not get npc!");
$npcinfo3=mysql_fetch_array($npcinfo2);
$listquests = "SELECT * from quests where npcid = '$npcinfo3[npcid]'";
$listquests2 = mysql_query($listquests) or die("No Quests to list");
$listquests3=mysql_fetch_array($listquests2);
echo "<b>Quests Available for ".$npcname."</b><br>";
while($row=mysql_fetch_array($listquests2)) {
echo $row['name'];
}
?>
为此,我有一些看起来像这样的表格:
npcs
name|location|npcid
quests
name|qid|npcid
因此,任务通过 npcid 字段与 NPC 相关联。
我在每个表中都有一个条目。
Bob|Scrapyard|1
AND
Sort Scrap Metal|1|1
如您所见,任务和 Bob 共享 1 的 npcid。
在我的循环中,我试图列出 Bob 的所有任务。但是在运行代码时,我没有列出任何任务。
如果我输入代码:
$listquests3['name'];
在我的循环之外,它按预期成功显示“Sort Scrap Metal”。我使用循环的原因是在添加多个任务时显示它们。
如果有人好心看看代码并告诉我我做错了什么,我将不胜感激。
谢谢。
【问题讨论】:
-
+1 用于为您的第一个项目(其中一个)制作涉及任务和 npc 的东西。
-
示例代码易受SQL injection的攻击,这是一个非常严重的security risk。要修复这个漏洞,请从过时的 mysql 驱动程序切换到PDO 并使用prepared statements。如果您需要 PDO 教程,请尝试 "Writing MySQL Scripts with PHP and PDO"。您保存的站点可能只是您自己的。至于
or die, don't use it when outputting HTMl。 -
感谢您的提示。我确实会阅读 PDO 文章并切换到联接以提高效率。
标签: php mysql database while-loop