我用HTML和PHP编写一个页面,连接到Marina数据库(船只,所有者等......),在下拉列表中显示所有所有者姓氏,然后显示姓氏下的所有船只被选中了。
这是我的相关代码......
$sql = 'select LastName from Owner';
$result = $conn->query($sql);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$values[] = array(
'LastName' => $row['LastName']
);
}
echo '<form align="left" top="200" action="page2.php" method="post">
<p>Select an owner:</p>
<select top="200" name="form1" id="form1">';
foreach($values as $v){
echo '<option value="'.$v['LastName'].'">'.$v['LastName'].'</option>';
}
echo '</select>
<input type="submit" value="Submit">
</form>';
if(isset($_POST['form1'])){//if there was input data submitted
$form1 = $_POST['form1'];
$sql = 'select BoatName from MarinaSlip,Owner where MarinaSlip.OwnerNum = Owner.OwnerNum and Owner.LastName = '.$form1;
$result = $conn->query($sql);
while ($row = mysqli_fetch_array($result1, MYSQLI_ASSOC)) {
$values[] = array(
'BoatName' => $row['BoatName']
);
}
echo '<ol>';
foreach($values as $v){
echo '<li>'.$v.'</li>';
}
echo '</ol>';
}
我已设法在下拉列表中正确显示姓氏,并将名称保留为变量,但我遇到了一些我无法解决的错误。
1)当我尝试重新加载页面时(使用Firefox)我收到一条消息“要显示此页面,Firefox必须发送信息,这些信息将重复之前执行的任何操作(例如搜索或订单确认)”所以我想知道如何编写它以便我不需要最初发送数据。
2)在提交姓氏并且我尝试运行查询以匹配该姓氏下的所有船只后,我得到一个错误,即$result
变量不是MYSQLI
结果类型虽然我在剧本中使用了相同的代码。
我是HTML和PHP的新手,所以非常感谢任何帮助。
答案 0 :(得分:1)
当您重新加载作为表单提交结果的页面时,会发生该消息。这意味着它必须重新提交表单才能重现相同的结果。防止它的方法是让表单将用户重定向到显示结果的页面,而不是显示结果本身。这可能很复杂,除非表单提交只是对数据库进行了更改,然后您想要显示内容,而不是直接显示依赖于表单提交的内容。
您需要在名称旁边加上引号:
$sql = 'select BoatName from MarinaSlip,Owner where MarinaSlip.OwnerNum = Owner.OwnerNum and Owner.LastName = "'.$form1.'"';
但最好使用参数化查询。见How can I prevent SQL injection in PHP?