我正在建立一个考试管理网站,其中一个页面是为课程添加学生。我有一个学生编号的下拉菜单(从表中获取值),但我希望这样做,当老师从下拉菜单中选择学生编号时,该学生的姓名和专业会显示在下表中。我有几乎所有的代码,但我似乎无法使它工作。按照现在的方式,它显示了表格的标题,但没有显示任何行。
- 错误总是在我声明$sql1和$sql2的行中,并根据我在语句中定义条件的方式而变化
我的下拉菜单代码:(工作正常)
<label class="control-label" for="number">Student Number</label>
<?php
$sql = "SELECT number FROM students";
$result = $conn->query($sql);
echo "<select class=".'"form-control"'.' id="number" name="number" for="number">';
while ($row = $result->fetch_assoc()) {
echo '<option value="' . $row['number'] . '">' . $row['number'] . "</option>";
}
echo "</select>";
?>
我的表的代码:(只显示表的头部,这是我在代码周围移动并得到转换错误等之后得到的最好的)
- 错误总是在我声明$sql1和$sql2的行中,并根据我在语句中定义条件的方式而变化
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Major</th>
</tr>
</thead>
<tbody>
<?php
$sql1 = "SELECT name FROM students WHERE number='$row'";
$result1 = $conn->query($sql1);
$value = $result1->fetch_object();
$sql2 = "SELECT major FROM students where number='$row'";
$result2 = $conn->query($sql2);
$value1 = $result2->fetch_object();
echo "<tr>
<td>".$value."</td>
<td>".$value1."</td>
</tr>";
?>
</tbody>
</table>
谢谢你的帮助!!
在我能够制定一个完整的答案之前,我必须告诉您,您的代码中存在一些逻辑错误。
-
您的页面如何"知道"用户从
select
中选择了一个选项?您也许应该拦截事件,并使用异步机制对此做出响应,例如通过AJAX。 -
无论如何,当你只需要一个就可以进行查询时,不需要运行两个查询
SELECT name, major FROM students WHERE number = ...
一旦您描述了如何解决问题#1,我们可以继续讨论完整的解决方案。
好吧,我认为第二个片段中不会有$行
似乎您没有将$行从第一个代码段传递到第二个代码段。
你可以阅读:
PHP将变量传递到下一页
您可以使用会话、cookie、获取和发布
或者可以简单地使用"include",然后可以在第二页中使用您定义的变量。
<?php
include "page1.php";
?>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Major</th>
</tr>
</thead>
<tbody>
<?php
$number = $row['number'];
$sql1 = "SELECT name, major FROM students WHERE number='$number'";
$result1 = $conn->query($sql1);
$value = $result1->fetch_object();
echo "<tr>
<td>".$value['name']."</td>
<td>".$value['major']."</td>
</tr>";
?>
</tbody>
</table>
根据godzillante下面的回答,mysql查询应该是这样的:
无论如何,当你只需要一个就可以进行查询时,不需要运行两个查询
从学生中选择姓名,专业,其中编号=。。。
我注意到您使用$row作为第二个查询的关键字
但在第一个代码段中,您获取的数据是"$row"(它是一个数组,请参阅PHP-fetch_assoc)
您应该使用$row['number']