我是编程新手。在我还是学生的几个小时后,我似乎无法修复它,这是我的论文。
我正在尝试从两个表中获取记录
prisoner
表visitations
表 - 此表有priser_id外键所以如果我点击囚犯,它也会显示他的访问记录。 这是我的代码:
<?php
include "connect.php";
$id = $_GET['id'];
$result = $connect->query(
"SELECT * FROM prisoner
INNER JOIN visitations ON prisoner.prisoner_id = visitations.prisoner_id
WHERE prisoner.prisoner_id = $id"
) or die($connect->error);
$visit = $connect->query(
"SELECT visitor,date_of_visit,time_of_visit,affinity,homeAddress FROM visitations
INNER JOIN prisoner ON prisoner.prisoner_id = visitations.prisoner_id
WHERE visitations.prisoner_id = $id"
) or die($connect->error);
囚犯表
while($row = $result->fetch_assoc()){
$id = $row['prisoner_id'];
$photo = $row['photo'];
$gname = $row['givenName'];
$mname = $row['middleName'];
$lname = $row['lastName'];
$aname = $row['nickname'];
<div class="row text-center">
<?php echo "<img style = 'width: 16%;height: 16%;margin-top:30px;'src='images/".$photo."' >";
echo "<br><br>$gname $mname $lname";
?>
</div>
<?php
echo "<div class='col-lg-3'>Nickname: $aname </div>";
}
探访
<h4>Visitations</h4>
</div>
<table border = 1>
<tr>
<th>Visitor Name</th>
<th>Date of Visit</th>
<th>Time of Visit</th>
<th>Affinity</th>
<th>Home Address</th>
<tr>
<?php
while($row2 = $visit->fetch_assoc()){
$v_visitor = $row2['visitor'];
$v_date = $row2['date_of_visit'];
$v_time = $row2['time_of_visit'];
$v_affinity = $row2['affinity'];
$v_address = $row2['homeAddress'];
echo "
<tr>
<td>$v_visitor</td>
<td>$v_date</td>
<td>$v_time</td>
<td>$v_affinity</td>
<td>$v_address</td>
</tr>
</table>";
}
它只从访问表中获取记录 我也不知道为什么其他记录不在HTML表格内。
这就是它显示的内容:
有人可以用我的代码指出问题,
答案 0 :(得分:2)
在此上下文中,每个连接只能使用一个活动语句,因此在继续使用新查询之前,您需要使用fetch_all使用第一个查询的整个结果集。
$result1 = $connect->query(...)
$rows1 = $result1->fetch_all(MYSQLI_ASSOC);
$result2 = $connect->query(...)
$rows2 = $result2->fetch_all(MYSQLI_ASSOC);
foreach ($rows1 as $row) ...
foreach ($rows2 as $row) ...
也可以使用multi_query在一个批处理中执行多个查询。
答案 1 :(得分:1)
接下来提到的SQL注入问题(归结为:我如何正确编码SQL查询)还有更多可能出错的问题,另一个是HTML注入问题(归结为:我如何正确编码HTML)。
简而言之:HTML表格只能关闭一次,并且始终是第一个匹配的结束</table>
标记。与在OPs代码中一样,每行输出一个关闭表标记(在while
主体内),在关闭表的第一行之后,按照HTML规则呈现进一步的数据,如何呈现文本 - 超出范围的标签内的数据(即此处表格下方的文字)。
因此,不仅关于SQL注入的SQL作业,而且首先要对如何改进编写PHP模板文件感到满意。例如,您可以从<?= $variable ?>
表示法中受益,因为这是HTML而不是纯文本,因此<?= htmlspecialchars($variable) ?>
变体更为正确。