【问题标题】:PHP/MYSQL - Fetch DB values from dropdown menu, then into table in same pagePHP/MYSQL - 从下拉菜单中获取数据库值,然后进入同一页面中的表
【发布时间】:2015-11-29 11:51:06
【问题描述】:

我正在构建一个考试管理网站,其中一个页面用于将学生添加到课程中。我有一个学生编号的下拉菜单(从表中获取值),但是我想这样做,以便当老师从下拉菜单中选择学生编号时,该学生的姓名和专业会出现在下表中.我有几乎所有的代码,但我似乎无法让它工作。现在的方式是显示表头,但不显示任何行。

  • 错误始终出现在我声明 $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>

感谢大家的帮助!!

【问题讨论】:

  • "当老师从下拉菜单中选择学号时" - 因此,此时向网络服务器发送一个新请求,以获取与当前选择的学生证?(!)。不管请求是否由同一个脚本处理,它都是一个新实例,前一个实例的所有变量都消失了,脚本只能使用客户端发送的 this 新请求(和会话数据等等...) -> $row in "SELECT name FROM students WHERE number='$row'" 是什么?
  • 这决定了表格行中出现的内容。它应该显示从下拉菜单中选择的学生的姓名。语法可能是错误的,但我不知道如何处理它。对不起,我是个新手,不明白请求是如何工作的。

标签: php html mysql mysqli


【解决方案1】:

在我制定一个完整的答案之前,我必须告诉您,您的代码中存在一些逻辑错误。

  1. 您的页面如何“知道”用户从select 中选择了一个选项?您或许应该拦截该事件并使用异步机制响应该事件,例如通过 AJAX。

  2. 无论如何,如果您只需一个查询,就无需运行两个查询:

    SELECT name, major FROM students WHERE number = ...
    

一旦您描述了您打算如何解决问题 #1,我们就可以继续讨论完整的解决方案。

【讨论】:

  • 是的,我不知道该怎么做:/ 我想我得用谷歌搜索一下,谢谢。
  • 顺便说一句,它们都在同一个页面中。如果是这样,我还需要 AJAX 吗?
  • 是的,如果它在同一个页面中,我建议包含 jquery 和 google 一些 jquery AJAX 教程。您必须编写一种网络服务(PHP 也很适合)并以机器可读的格式返回您的数组。 PHP 的json_encode() 函数可用于此目的。
  • 另外,使用 jQuery 的on() 函数可以拦截select 的更改事件并采取相应的行动。这就是 AJAX 函数通常的启动方式。
【解决方案2】:

好吧,我认为第二个 sn-p 中不会有 $row。
看来您没有将 $row 从第一个 sn-p 传递到第二个 sn-p。

您可以阅读:

PHP Pass variable to next page

您可以使用会话、cookie、get 和 post。
或者也可以简单的使用"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's answer below,mysql查询应该是这样的:

无论如何,如果您只需一个查询,就无需运行两个查询:

SELECT name, major FROM students WHERE number = ...

我注意到您使用 $row 作为第二个查询的键。
但是在第一个sn-p中,你获取的数据是“$row”(它是一个数组,见PHP - fetch_assoc
您应该改用 $row['number']。

【讨论】:

  • 它在同一个页面中,这里的问题在于,我如何知道从下拉菜单中选择了哪个数字,然后将其存储在一个字符串变量中,以便稍后在该语句中使用。有人说我需要 AJAX,但我不确定。
  • 是的,你可以google一些AJAX教程。或者尝试简单的方法:将您的变量传递到另一个页面,让这个“第 2 页”处理您想要的查询和打印输出。
  • 快到了。唯一的问题在这里:" $sql1 = "SELECT nome, curso FROM alunos WHERE numero='$row'"; "。 $row 需要更改为其他内容,或者我可能需要创建一个变量来存储从下拉菜单中选择的选项并使用它而不是 $row。你怎么看?
  • 是的,最简单的方法就像sn -p:创建$number 来存储$row['name']。因为在mysql查询(单双引号)中使用引号可能会出现一些问题。如果你对 php & mysql 不是很熟悉,创建一个变量是安全的。
猜你喜欢
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
相关资源
最近更新 更多