使用 PHP 和 HTML 选择选项在另一个 mysql 查询中使用数组数据

Posted

技术标签:

【中文标题】使用 PHP 和 HTML 选择选项在另一个 mysql 查询中使用数组数据【英文标题】:Use Array data in another mysql query using PHP and HTML select option 【发布时间】:2022-01-21 06:45:23 【问题描述】:

亲爱的,

我的 php 代码有问题.. 我想要做的是在第二个 mysql 查询中使用数组数据来列出可用的选项。

解释:

$conn = mysqli_connect($dbhost,$dbuser,$dbpass) or sqlerror();
mysqli_select_db($conn,$dbname);
$sql = mysqli_query($conn,"SELECT * FROM ADMIN WHERE id='".$_SESSION["adminusername"]."'");
$isadmin=mysqli_fetch_array($sql);
$arraydata= $isadmin["Files"];
mysqli_close($conn);
$array3 = explode(',',$arraydata);

现在,上面的代码给了我: $arraydata = "26,27,28,29"

我使用 $array3 删除逗号 .. 然后尝试 foreach ,因为应该执行以下代码:

$conn = mysqli_connect($dbhost,$dbuser,$dbpass) or sqlerror();
mysqli_select_db($conn,$dbname);
foreach ($array3 as $singleID) 
    $sql=mysqli_query($conn,"SELECT FileID,FileTitle FROM Servers WHERE 
        FileType='CFG' AND FileID='".$singleID."'");
    if(mysqli_num_rows($sql))
        $select= '<select class="smallInput" name="serverfile" tabindex="6">';
        while($rs=mysqli_fetch_array($sql))
            $select.='<option value="'.$rs['FileID'].'">'.$rs['FileTitle'].'</option>';
        
    
    $select.='</select>';
    echo $select;

我正在跳跃,这将显示 Array 中与第二个 mysql 查询中的条件匹配的项的选择选项,如果找到数组项,则在 select 的选项中显示它..

谁能解决这个问题?

【问题讨论】:

为什么不直接将服务器表加入到原始查询中呢?您也对 SQL 注入持开放态度。始终参数化查询。 我可以将服务器表加入到原始查询中,但在 html 中使用 你不应该有嵌套循环。只需执行一个查询即可获取所有选项,方法是将两个表连接起来。 将分隔列表放在表格中也是不好的设计。见***.com/questions/3653462/… @Barmar 如何查询获取所有信息? html中的选择选项下拉列表怎么样,我希望它显示查询中的所有数据 【参考方案1】:

在外循环之前启动&lt;select&gt;,而不是每次都通过。

$select= '<select class="smallInput" name="serverfile" tabindex="6">';
foreach ($array3 as $singleID) 
    $sql=mysqli_query($conn,"SELECT FileID,FileTitle FROM Servers WHERE 
        FileType='CFG' AND FileID='".$singleID."'");
    while($rs=mysqli_fetch_array($sql))
        $select.='<option value="'.$rs['FileID'].'">'.$rs['FileTitle'].'</option>';
    

$select.='</select>';
echo $select;

如 cmets 中所述,您可以将两个查询与 JOIN 结合起来。我还展示了如何使用参数来防止 SQL 注入。

$stmt = mysqli_prepare($conn, "
    SELECT FileID, FileTitle
    FROM Servers AS s
    JOIN ADMIN AS a ON FIND_IN_SET(s.FileID, Servers.Files)
    WHERE s.FileType = 'CFG'
    AND a.id = ?");
mysqli_stmt_bind_param($stmt, "s", $_SESSION["adminusername"]);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$select= '<select class="smallInput" name="serverfile" tabindex="6">';
while($rs=mysqli_fetch_array($result))
    $select.='<option value="'.$rs['FileID'].'">'.$rs['FileTitle'].'</option>';

$select.='</select>';
echo $select;

【讨论】:

感谢您提供此解决方案,最佳答案

以上是关于使用 PHP 和 HTML 选择选项在另一个 mysql 查询中使用数组数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使已选择的选项不显示在另一个选择选项下拉 JAVASCRIPT/ANGULARJs

React Hooks-当我在另一个选择上选择一个选项时更改选择选项

PHP MySQL显示数据库基于选择的选项和onclick

如果已在另一个选项卡中打开,则阻止打开 html

下拉框取决于在另一个下拉框中选择的选项

PHP:HTML:在 POST 中发送 HTML 选择选项属性