【问题标题】:Data is updated in the database but with error数据在数据库中更新但出现错误
【发布时间】:2020-04-02 05:17:16
【问题描述】:

在我的系统中,我有一个更新数据的功能。单击“更新”按钮后,数据库中的数据会更新,但也会显示如下错误:

PHP 注意:未定义索引:badgeid in C:\inetpub\wwwroot\tgotworker\pages\manage_engineer_admin\edit_engineer_admin.php 第 33 行

PHP 注意:未定义变量:全名 C:\inetpub\wwwroot\tgotworker\pages\manage_engineer_admin\edit_engineer_admin.php 210号线

PHP 注意:未定义变量:roles_id in C:\inetpub\wwwroot\tgotworker\pages\manage_engineer_admin\edit_engineer_admin.php 第220行

PHP 注意:未定义变量:roles_id in C:\inetpub\wwwroot\tgotworker\pages\manage_engineer_admin\edit_engineer_admin.php 在第 221 行

PHP 注意:未定义变量:team_id in C:\inetpub\wwwroot\tgotworker\pages\manage_engineer_admin\edit_engineer_admin.php 在第 231 行

PHP 注意:未定义变量:team_id in C:\inetpub\wwwroot\tgotworker\pages\manage_engineer_admin\edit_engineer_admin.php 在第 231 行

下面是我的代码:

<?php
$sql = "";
require_once "../../config/configPDO.php";
require_once "../../config/check.php";

if(isset($_POST['update']))
{   
  $badgeid = $_POST['badgeid'];

  // checking empty fields
  if(empty($badgeid)) { 

    if(empty($badgeid)) {
      echo "<font color='red'>Fac_Name field is empty.</font><br/>";
    }

  } else {  
    //updating the badgeid
    $sql = "UPDATE users SET roles_id = :roles_id, team_id = :team_id WHERE badgeid = :badgeid";
    $query = $conn->prepare($sql);

    $query->bindParam(':roles_id', $_POST['roles_id']);
    $query->bindParam(':team_id', $_POST['team_id']);
    $query->bindParam(':badgeid', $_POST['badgeid']);
    $query->execute();

    //redirectig to the display page. In our case, it is index.php
    header("Location: ../dashboard/dashboard_super_admin.php");
  }
}

//getting id from url
$badgeid = $_GET['badgeid']; //line 33

//selecting data associated with this particular id
$sql = "SELECT * FROM users LEFT JOIN roles on users.roles_id = roles.roles_id WHERE badgeid = :badgeid";
$query = $conn->prepare($sql);
$query->execute(array(':badgeid' => $badgeid));
$rows = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row)
{
  $badgeid = $row["badgeid"];;
  $fullname = $row["fullname"];
  $roles_id = $row["roles_id"];
  $team_id = $row['team_id'];
  $roles_name = $row["roles_name"];
}

$smt = $conn->prepare("SELECT * FROM team");
$smt->execute();
$data = $smt->fetchAll();

?>

   <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
  <table class = "table table-bordered">
    <tr>
      <td width="20%"><b>Full Name</b></td>
      <td width="80%"><?php echo $fullname; ?></td> //line 210
    </tr>
    <tr>
      <td width="20%"><b>Badge ID</b></td>
      <td width="80%"><?php echo $badgeid; ?></td>
    </tr>
    <tr>
      <td width="20%"><b>Role</b></td>
      <td width="80%">
        <select class="form-control" name="roles_id">
          <option value="1" <?php echo $roles_id == '1'? 'selected': '';?> >Super Admin</option> //line 220
          <option value="2" <?php echo $roles_id == '2'? 'selected': '';?> >Engineer</option> //line 221
        </select>
        <input type="hidden" name="badgeid" value="<?php echo $badgeid ?>">
      </td>
    </tr>
    <tr>
      <td width="20%"><b>Team</b></td>
      <td width="80%">
      <select class="form-control" name="team_id">
      <?php foreach ($data as $row): ?>
        <option value="<?php echo $row["team_id"]; ?>" <?php echo $row["team_id"] == $team_id ? 'selected': ''; ?>><?php echo $row["team_name"]; ?></option> //line 231
      <?php endforeach ?>
      </select>
      <input type="hidden" name="badgeid" value="<?php echo $badgeid ?>">
      </td>
    </tr>  
  </table><br>
  <div align="center">
    <td><button class ="btn btn-primary btn-block" name="update" value="Update" onclick="update()">Update</button></td>
  </div>
</form>

【问题讨论】:

  • 转储 $rows 数组以查看是否包含数据
  • @Hamza 怎么办?在哪里?
  • foreach 循环之前 print_r($rows)
  • @Hamza 喜欢这样吗? var_dump($rows)
  • 您正在使用$_SERVER["PHP_SELF"] 进行表单操作。这不会将badgeid 作为$_GET 变量传递。如果你想保留 GET 变量,你应该使用$_SERVER['REQUEST_URI']

标签: php


【解决方案1】:

问题是您使用$_SERVER["PHP_SELF"] 作为表单操作。

这会从重定向页面中删除$_GET 变量,这意味着您将被重定向到例如index.php 而不是index.php?badgeid=1

这导致该行抛出通知$badgeid = $_GET['badgeid']; 并使您的查询没有结果,因此永远不会初始化其余变量,这反过来会导致您收到其余通知。

为了解决这个问题,您可以改用$_SERVER['REQUEST_URI'],这将保留变量或保存并通过其他方式传递badgeid

【讨论】:

猜你喜欢
  • 2020-07-08
  • 2017-01-22
  • 1970-01-01
  • 2018-12-29
  • 2021-07-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多