【问题标题】:Load data from MySQL database to HTML textboxes on button click单击按钮时将数据从 MySQL 数据库加载到 HTML 文本框
【发布时间】:2012-06-30 10:05:07
【问题描述】:

我有一个用于更新现有记录的小表格。

我正在使用 PHP 将 服务 ID 加载到下拉框中。当用户点击 Load 按钮时,它应该在下面的文本框中显示与该 ID 相关的其他详细信息。 这是我到目前为止的代码。

<html>
<head>
</head>
<body>

<?php
//Database initialization
require_once("db_handler.php");

$conn = iniCon();
$db = selectDB($conn);

$query = "SELECT * FROM taxi_services ORDER BY SID";
$result2 = mysql_query($query, $conn);

?>

<div id="upserv">
<b id="caption2">Update location</b>
<br/><br/>
    <form name="upServForm" action="<?php echo $PHP_SELF; ?>" method="post" >
        <?php
        $dropdown = "<select name='codes'>";
        while($row = mysql_fetch_assoc($result2)) 
        {
            $dropdown .= "\r\n<option value='{$row['SID']}'>{$row['SID']}</option>";
        }
        $dropdown .= "\r\n</select>";
    ?>
     Service ID  <?php echo $dropdown; ?> <input type="submit" value="Load" name="loadbtn">
        <table width="300" border="0">
          <tr>
            <td>Name</td>
            <td><input type="text" name="upName" style="text-align:right" value="<? echo $savedName; ?>" /></td>
          </tr>
          <tr>
            <td>Cost</td>
            <td><input type="text" name="upCost" style="text-align:right" value="<? echo $savedCost; ?>" /></td>
          </tr>
          <tr>
            <td>Active</td>
            <td><input type="checkbox" name="upActive" value="<? echo $savedActive; ?>" /></td>
          </tr>
        </table>
</div>
<br/>
<div id="buttons">
    <input type="reset" value="Clear" /> <input type="submit" value="Save" name="updatebtn" />
</div>
    </form>

<?php

if(isset($_POST["loadbtn"]))
{
    $id = $_POST["codes"];

    $query = "SELECT Name, Cost, Active FROM taxi_services WHERE SID = '$id' ";
    $result = mysql_query($query, $conn);
    $details = mysql_fetch_array($result);

    $savedName = $details["Name"];
    $savedCost = $details["Cost"];
    $savedActive = $details["Active"];
}

?>

</body>
</html>

查询执行得很好,但数据没有显示在文本框中。谁能告诉我我在这里缺少什么?

谢谢。

【问题讨论】:

  • 你能不能也显示db表结构
  • 我认为你的服务器不支持short tags。换句话说,将&lt;? 替换为&lt;?php
  • @diEcho here 是。 @Adnan 我也尝试过&lt;?php ?&gt;,但无济于事。

标签: php mysql html


【解决方案1】:

您的查询必须在输出之前:

还要注意 id 的类型转换 (integer) 以防止 sql 注入。

还要注意$PHP_SELF http://php.about.com/od/learnphp/qt/_SERVER_PHP.htm 的安全问题 我把代码改成了$_SERVER['SCRIPT_NAME']

另外注意不要使用register_globals,如果可以的话,在配置中禁用它(使用$_SERVER['SCRIPT_NAME'] instead of$SCRIPT_NAME`):http://www.php.net/manual/en/security.globals.php

如果你从一本书中学习 php,并且这是基于本书中的源代码,你应该立即扔掉它。

<?php

//Database initialization
require_once("db_handler.php");

$conn = iniCon();
$db = selectDB($conn);

$query = "SELECT * FROM taxi_services ORDER BY SID";
$result2 = mysql_query($query, $conn);

if(isset($_POST["loadbtn"]))
{
    $id = (integer) $_POST["codes"];

    $query = "SELECT Name, Cost, Active FROM taxi_services WHERE SID = '$id' ";
    $result = mysql_query($query, $conn);
    $details = mysql_fetch_array($result);

    $savedName = $details["Name"];
    $savedCost = $details["Cost"];
    $savedActive = $details["Active"];
}

?>

<html>
<head>
</head>
<body>

<div id="upserv">
<b id="caption2">Update location</b>
<br/><br/>
    <form name="upServForm" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" >
        <?php
        $dropdown = "<select name='codes'>";
        while($row = mysql_fetch_assoc($result2)) 
        {
            $dropdown .= "\r\n<option value='{$row['SID']}'>{$row['SID']}</option>";
        }
        $dropdown .= "\r\n</select>";
    ?>
     Service ID  <?php echo $dropdown; ?> <input type="submit" value="Load" name="loadbtn">
        <table width="300" border="0">
          <tr>
            <td>Name</td>
            <td><input type="text" name="upName" style="text-align:right" value="<? echo $savedName; ?>" /></td>
          </tr>
          <tr>
            <td>Cost</td>
            <td><input type="text" name="upCost" style="text-align:right" value="<? echo $savedCost; ?>" /></td>
          </tr>
          <tr>
            <td>Active</td>
            <td><input type="checkbox" name="upActive" value="<? echo $savedActive; ?>" /></td>
          </tr>
        </table>
</div>
<br/>
<div id="buttons">
    <input type="reset" value="Clear" /> <input type="submit" value="Save" name="updatebtn" />
</div>
    </form>

</body>
</html>

【讨论】:

  • 你是对的!情况就是这样。感谢您提供有关 SQLi 的提示。
  • @nK0de SQLi 不是正确的术语,它指的是“新”MySQL php 扩展:de2.php.net/mysqli 请不要忘记标记已回答的问题 :-)
  • 对。知道了。我总是这样做,只需要等到 15 分钟的时间限制结束。 :)
  • @nK0de $PHP_SELF 是个坏主意。它存在安全问题:php.about.com/od/learnphp/qt/_SERVER_PHP.htm
  • @Thomas 是的,我通常使用外部 PHP 文件。这个页面只是我将使用的数据库的一个小前端。它不会向公众开放。所以我在开发时并没有过多考虑安全性。 :)
猜你喜欢
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2021-05-20
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多