【问题标题】:Using Select Option's value to query database [closed]使用 Select Option 的值查询数据库 [关闭]
【发布时间】:2013-12-10 18:22:35
【问题描述】:

我有以下代码来生成我的选项:

<?php
$sql = "SELECT DISTINCT MyID FROM database";
$query = $db->prepare($sql);
$query->execute();
$option = "";
foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $rows) {
    $id = $rows[MyID];
    $option.="<option>".$id."</option>";
}
?>

<select name="options" id="options" class="options"> 
<option value="$id">Select an Option</option>
<?php echo $option?>
</select>

我想在下一个查询中使用所选选项的值。像这样:

<?php
$myDB= $db->prepare("SELECT * FROM names WHERE RowID = :option");
$myDB->bindParam(':option', $option); //the value of the option selected in my dropdown
$myDB->execute();
$result = $myDB->fetchAll();

由于某种原因,这不起作用。你能帮忙吗?谢谢

【问题讨论】:

  • $options 应该在 $_POST 或 $_GET 超级全局变量中
  • 您是否将选定的值发送到服务器,如果是,如何发送?
  • 另外它是$rows['MyID'] 而不是$rows[MyID],请注意单引号。
  • 感谢大家的评论。 @jeroen 不,我没有将值发送到服务器。我认为这是不必要的,因为我将立即使用选定的值进行查询
  • @user3045800 php 在将输出发送给访问者之前在服务器上运行。如果您想在页面已经加载后运行 php,您需要 ajax - javascript 和 php 的组合 - 向服务器发出请求并返回/处理结果。

标签: php html mysql pdo


【解决方案1】:
<?php
$sql = "SELECT DISTINCT MyID FROM database";
$query = $db->prepare($sql);
$query->execute();
$option = "";
$result = $query->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
    $id = $row['MyID'];
    $option.='<option value="'.$id.'">'.$id.'</option>';
}
?>
<form method="post" action"(`The url of the next page`)">
<select name="options" id="options" class="options"> 
<option disabled>Select an Option</option>
<?php echo $option?>
</select>
<input type="submit" value="submit" />
</form>

下一页:

<?php
if(isset($_POST['submit']) && isset($_POST['options'])) {

    $option = $_POST['option'];
    $myDB= $db->prepare("SELECT * FROM names WHERE RowID = :option");
    $myDB->bindParam(':option', $option); //the value of the option selected in my dropdown
    $myDB->execute();
    $result = $myDB->fetchAll();
}
  1. 使用fetchAll(),您应该将它分配给一个变量,然后循环遍历它。
  2. $row[MyID] MyID 应该包含在 '' 或 "" 中,因为索引是一个字符串,所以 $row['MyId']
  3. 您需要将数据提交回服务器,以便 PHP 能够在 PHP 创建 HTML 并将其从服务器发送到浏览器时对其执行任何操作。
  4. 我已将if(isset()) 用于 REQUEST 变量($_GET、$_POST),如果您尝试在页面不可用的情况下加载页面,这将防止 PHP 抛出错误。

如果您有任何其他问题,我很乐意提供帮助。

希望这会有所帮助! :)

编辑

<?php
if(isset($_GET['submit']) && isset($_GET['options'])) {

    $option = $_GET['option'];
    $myDB= $db->prepare("SELECT * FROM names WHERE RowID = :option");
    $myDB->bindParam(':option', $option); //the value of the option selected in my dropdown
    $myDB->execute();
    $result = $myDB->fetchAll();

    /**
     * You'll need to put the logic for the query above here
     **/   
} else {        

    $sql = "SELECT DISTINCT MyID FROM database";
    $query = $db->prepare($sql);
    $query->execute();
    $option = "";
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
    foreach ($result as $row) {
        $id = $row['MyID'];
        $option.='<option value="'.$id.'">'.$id.'</option>';
    }
?>

    <form method="get" action"">
    <select name="options" id="options" class="options"> 
    <option disabled>Select an Option</option>
    <?php echo $option?>
    </select>
    <input type="submit" value="submit" />
    </form>
<?php
} // End of else
?>

我还更改了表单方法以获取和删除操作,因此它将提交到当前页面。

【讨论】:

  • 感谢您的帮助。真的很翔实。但问题是我可以将表单数据发送到同一页面,即 。我想这样做并且仍然得到相同的结果。基本上我想根据同一页面上的查询显示一个表格
  • @user3045800,我在我的答案中添加了一个编辑,以显示我认为你的意思。这意味着您只有一页。希望这会有所帮助!
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 2018-09-14
  • 2022-10-13
  • 1970-01-01
  • 2012-09-02
  • 2021-01-25
  • 1970-01-01
  • 2018-06-29
相关资源
最近更新 更多