下拉列表填写准备好的声明

时间:2017-05-17 21:22:50

标签: php mysql html5

您好,并提前感谢您的时间。

我希望使用PHP中的预准备语句从mysql数据库填充下拉菜单。我只是在寻找具有匹配" client_id"的任何条目。我已经看到这个问题涉及很多方面(其中一些已经过时,其中一些已经过时很复杂)但是却无法找到一个以类似于我一直使用的方式使用php的示例(见下文),以便我可以凑齐一些有效的东西。

以下是我想要使用的代码。

<?php
include ('connect.php');

if ($_POST) {

    if (!empty($_POST['client_id'])) {
        $client_id = htmlspecialchars($_POST['client_id']);

        $stmt = $link->prepare("SELECT project_id, nickname FROM project WHERE client_id=?");
        $stmt->bind_param('s', $client_id);
        $stmt->execute();

        $row = $stmt->fetch();

        while ($stmt->fetch()) {
            echo ("<option value='$row['project_id']'>$row['nickname']</option>");
        }

        $stmt->close();

    }
}

include ('disconnect.php');
?>

我知道回声部分不正确,但我希望能够展示我至少想到的东西。一般来说,我不是100%我也正确使用行变量。我很感激这里的任何帮助。

编辑:

以上文件名为&#34; fetchProjects.php&#34;

这是包含此PHP文件的代码。

<div class="twelve columns">
    <p>select an existing project below</p>     
    <select size="10" name="selectedProject">
        <?php include('fetchProjects.php')?>
    </select>
</div>

3 个答案:

答案 0 :(得分:3)

您忘记在此处指定您的提取:

while ($stmt->fetch()) {...

应该是:

while ($row = $stmt->fetch()) {...

现在,您尝试使用$row访问的数组元素将起作用。您应该删除第一次获取,因为这将消耗第一行数据。还有一件事:你不需要括号echo

答案 1 :(得分:2)

您可以在while循环$ project_id的每次迭代中使用bind_result,并使用当前数据库行值更新$ nickname

$stmt = $link->prepare("SELECT project_id, nickname FROM project WHERE client_id=?");
$stmt->bind_param('s', $client_id);
$stmt->bind_result($project_id, $nickname);
$stmt->execute();
$stmt->store_result();

while ($stmt->fetch()) {
    echo '<option value="'.$project_id.'">'.$nickname.'</option>';
}

$stmt->close();

未经测试但应该可以正常使用

答案 2 :(得分:1)

请查看:

http://php.net/manual/en/mysqli-result.fetch-assoc.php http://php.net/manual/en/mysqli-stmt.fetch.php

会建议:

<?php
include ('connect.php');

if (isset($_POST['client_id'])) {

    if (!empty($_POST['client_id'])) {
        $client_id = htmlspecialchars($_POST['client_id']);

        $stmt = $link->prepare("SELECT project_id, nickname FROM project WHERE client_id=?");
        $stmt->bind_param('s', $client_id);
        $stmt->execute();

        $stmt->bind_result($pid, $nick);

        while ($stmt->fetch()) {
            echo ("<option value='$pid'>$nick</option>");
        }

        $stmt->close();
    }
}

include ('disconnect.php');
?>