【问题标题】:pulling database and update database - php拉取数据库和更新数据库 - php
【发布时间】:2015-05-04 23:50:11
【问题描述】:

我有显示产品及其长袜的行。 我可以从数据库中提取记录,但不知何故我被困在编辑部分。当我点击编辑时,我不知道如何传递 id,因此我可以使用 id 来选择需要在表格中选择的内容。

我有类似 stock.php 的东西,它显示了所有 item_name 和 stock

    <?php
        $sql    = "SELECT * FROM inventory";
        $result = mysqli_query($mysqli,$sql);

    //make sure database queries
    if (!$result) {
        echo "DB Error, could not query the database\n";
        echo 'MySQL Error: ' . mysql_error();
        exit;
    }

    if ($result->num_rows > 0) {
        echo "<table><tr><td>Name</td>
                         <td>Stock</td>
                     </tr>";
        // output data of each row
        while($row = $result->fetch_assoc()) {
            $id = $row['id'];
            echo "<tr>
                    <td>".$row["item_name"]."</td>
                    <td>".$row["stock"]."</td>
                    <td>
                        <form action='edit.php' method='POST'>
                            <input type='hidden' name='$id' value='$id'/>
                            <input type='submit' name='edit' value='edit' />
                        </form>
                    </td>
                 </tr>";
        }
        echo "</table>";
    } else {
        echo "0 results";
    }
?>

在我的 edit.php 中,我有类似这样的东西,因为 $id 没有通过,所以它给了我错误

include_once "init.php";
if ($_SERVER['REQUEST_METHOD']=='POST') {
    // query the table by matching up the int id
    $sql    = "SELECT * FROM inventory WHERE id = '$id'";
}

我想在新页面中再次提取数据,然后再次输入框,让用户更新库存#,甚至产品名称和其他信息。

【问题讨论】:

  • 使用 $_POST['id'] 代替 $id 它应该可以工作。

标签: php mysql edit


【解决方案1】:

您的输入声明中有错误。 HTML 项目的名称不能以特殊字符(如 $)开头。您应该以这种方式设置基于变量的名称:

<input type='hidden' name='".$id."' value='".$id."'/>

同样在您的edit.php 中,您的SQL 语句有错误。

$sql    = "SELECT * FROM inventory WHERE id = '$id'";

应该是:

$sql = "SELECT * FROM inventory WHERE id = ".intval($id);

【讨论】:

  • SQL 语句也可以使用引号,但是当$id 不是整数时,您绝对应该使用$sql = "SELECT * FROM inventory WHERE id = ".intval($id); 以避免注入或错误。除非您之前有 $id = intval($_POST['id']),否则您将同时需要它,因为 register_globals 已成为过去
  • 是的!在使用 htmlspecialchars 或类似的东西查询数据库之前,您必须筛选用户输入/会话变量。
  • htmlspecialchars 不会对 SQL 注入做任何事情,但 php.net/manual/en/mysqli.real-escape-string.php 或者一般来说,准备好的语句会
  • 不过,在您的回答中,当register_globals 关闭时,$id 将是未定义的(我猜是当今 PHP 服务器的 99%)
  • 我确实改变了所有这些但仍然$id不能被忽略并且仍然给我Undefined variable
【解决方案2】:

您需要进行以下更新:

股票.php

<input type='hidden' name='id' value='$id'/>

编辑.php

$sql    = "SELECT * FROM inventory WHERE id = '".$_POST["id"]."'";

您将当前 id 值作为帖子 var 名称传递,该 var 的名称应为“id”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 2013-09-17
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多