【问题标题】:PHP - Undefined index : id - the value is not retrievedPHP - 未定义索引:id - 未检索到值
【发布时间】:2017-08-04 05:04:08
【问题描述】:

是的,我知道这里有很多“未定义索引”问题,在问这个问题之前我一直在查看它们。我从这些问题中复制了代码来尝试测试它,但它仍然不适用于我自己的项目。另外,我还是 PHP 的初学者。

所以这是我的问题。在完成删除和查看表单的编码后,我想尝试编写一个简单的编辑表单。

这是我的代码

<?php
require("config.php");
$id = $_GET['id'];
echo "id: ".$id;
$sql = "SELECT * FROM contracts WHERE id= '$id'";
$result = $con->query($sql);

$row = $result->fetch_assoc()

?>

<form action="editform.php" method="GET">
ID:
<?php echo $id; ?><br>
Contract Title<br>
<input type="text" name="contract_title" value="<?php echo $row['contract_title']; ?>" /><br>

<input type="submit" name = "edit "value="Update" />
</form>

?php

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

$id = $_GET['id'];

$upd= "UPDATE `contracts` SET 
`contract_title`='".$_POST['contract_title']."',
WHERE `id`='".$_POST['id']."";

if($do_upd = $con->query($upd))
{
    echo "Update Success";
}
else
{
    echo "Update Fail";
}

}
?>

这是错误之前的。

这是我收到的错误。

在第 3 行中,单击更新按钮后未检索到 id。 它没有检索到值。 我在编码中犯了哪些错误,我该如何解决?提前致谢。

【问题讨论】:

  • 这里有一个建议...测试id 键是否存在于$_GET 数组中并且该值不为NULL。 if ( isset($_GET['id']) ) { ... php.net/manual/en/function.isset.php
  • 你在第二张图片中的 URL 显然没有通过 id。未定义索引错误的原因。该索引未定义......另外,为了最佳实践,请注意您的提交按钮:

标签: php html mysql mysqli


【解决方案1】:

就在下面:

<form action="editform.php" method="GET">

添加:

<input type="hidden" name="id" value="<?php echo $id; ?>" />

更新:

修复了代码中的其他错误:

<?php
require("config.php");
$id = $_GET['id'];

echo "id: ".$id;
$sql = "SELECT * FROM contracts WHERE id= '$id'";
$result = $con->query($sql);
$row = $result->fetch_assoc()
?>

<form action="editform.php" method="GET">
    ID: <?php echo $id; ?><br>
    Contract Title<br>

    <input type="hidden" name="id" value="<?php echo $id; ?>" />
    <input type="text" name="contract_title" value="<?php echo $row['contract_title']; ?>" /><br>
    <input type="submit" name="edit" value="Update" />
</form>

<?php

if(isset($_GET['edit']) ){
     // needs escaping!~~~
    $upd= "UPDATE `contracts` SET `contract_title` = '".$_GET['contract_title']."' WHERE `id` = '".$id;

    if($do_upd = $con->query($upd)) {
        echo "Update Success";
    } else {
        echo "Update Fail";
    }
}

请考虑转义您的数据库输入以防止 SQL 注入

【讨论】:

  • 我复制了代码。它没有显示任何错误,但它什么也不做。
  • 因为之后你检查if(isset($_POST['edit']) ){,当你看起来应该检查if(isset($_GET['contract_title']) ){,因为表单是GET`
  • 还有&lt;input type="submit" name = "edit "value="Update" /&gt; -> &lt;input type="submit" name = "edit" value="Update" /&gt;
  • 我在答案中添加了代码的更正版本
  • 哦,好的。谢谢你。我现在开始明白了。我错过了一些编码错误。我复制了你的代码。它可以工作,但不能更新数据,只显示“更新失败”。我想知道这是什么错误?
【解决方案2】:
<?php
require("config.php");
$id = $_GET['id'];
echo "id: ".$id;
$sql = "SELECT * FROM contracts WHERE id= '$id'";
$result = $con->query($sql);

$row = $result->fetch_assoc()

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

        $contract_title = $row['contract_title'];

    }
} else {
    echo "0 results";
}



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

$upd = "UPDATE contracts SET contract_title='$contract_title' WHERE id='$id'";

if($do_upd = $con->query($upd))
{
    echo "Update Success";
}
else
{
    echo "Update Fail";
}

}

?>

<form action="" method="POST">
ID:
<?php echo $id; ?><br>
Contract Title<br>
<input type="text" name="contract_title" value="<?php echo $row['contract_title']; ?>" /><br>

<input type="submit" name = "edit" value="Update" />
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2021-08-22
    • 2015-03-24
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多