$_GET[]在php中编辑页面时返回零


$_GET[] returns zero in editing page in php

Im通过从auditplan.php页面按编辑按钮编辑数据库记录,并通过发送如下所选记录id重定向到编辑页面(auditplanedit.php):

<td> 
    <a href="auditplanedit.php?cid=<?php echo $row["id"]; ?>"><i class="ion ion-edit"></i></a>
    <a href="deleteauditplan.php?cid=<?php echo $row["id"]; ?>" onclick="return confirm('Are you sure?')"><i class="ion ion-close"></i></a>                
</td>

首先,我使用SELECT语句将所有数据放入控件中,编辑后,为了更新,我使用了UPDATE声明将编辑后的数据保存到数据库中,这里我使用了使用$_GET['id']auditplan.php获得的"id"。对于SELECT语句,这些id返回正确的选定值,但在更新过程中显示为零。

<?php
include("config.php"); 
include("header.php"); 
 try {
   $sql = "SELECT * FROM auditplan WHERE id = :cid";
   $stmt = $DB->prepare($sql);
   $stmt->bindValue(":cid",intval($_GET['cid']));   
   $stmt->execute();
   $results = $stmt->fetchAll();
} catch (Exception $ex) {
  echo $ex->getMessage();
}
?>    
<div class="col-md-10 main">       
    <h1 class="page-header">
         Audit Plan Edit          
    </h1>   
 <form class="form-horizontal" role="form" action="auditplanedit.php" method="POST">
<div class="form-group">
  <label class="control-label col-sm-2" for="usr">Audit ID:</label>  
    <div class="col-sm-5"> 
      <input  type="text" class="form-control" id="auditid" name ="auditid"  value="<?php echo $results[0]["auditid"] ?>">
    </div>
</div>
<div class="form-group">
  <label class="control-label col-sm-2" for="pwd">Year:</label>
    <div class="col-sm-5">
        <input type="text" class="form-control col-xs-3" id="year" name ="year" value="<?php echo $results[0]["year"] ?>">
    </div>
</div>
<div class="form-group">
  <label class="control-label col-sm-2" for="usr">Month:</label>
    <div class="col-sm-5">
        <input  type="text" class="form-control" id="month" name ="month" value="<?php echo $results[0]["month"] ?>">
    </div>
</div>
 <div class="form-group">
  <label class="control-label col-sm-2 " for="sel1">Status:</label>
    <div class="col-sm-5">
      <select class="form-control" id="sel1" name="status">
        <option>Planned</option>
        <option>Scheduled</option>
        <option>Completed</option>
        <option>Cancelled</option>
      </select>
    </div>
</div>
 <div class="form-group">
  <label class="control-label col-sm-2" for="comment">Comment:</label>
    <div class="col-sm-5">
        <textarea class="form-control" rows="3" id="comment" name="comment" value="<?php echo $results[0]["comment"] ?>"></textarea>
    </div>
</div>  
<div class="form-group">        
      <div class=" col-sm-offset-3">
        <button type="submit" name="submit" id ="submit" class="btn btn-primary">Update</button>
        <button type="submit" name="submit1" id ="clear" class="btn btn-primary">Cancel</button>
      </div>
 </div>     
</form>           
</div>
<?php
    if(isset($_POST['submit']))
        {               
            $audit=trim($_REQUEST['auditid']);
            $year=trim($_REQUEST['year']);
            $month=trim($_REQUEST['month']);        
            $status =$_REQUEST['status'];
            $comment=$_REQUEST['comment'];
            $cid = intval($_GET['cid']);  ////here it returns zero
            $sql = "UPDATE auditplan SET `auditid` = :audit, `year` = :year, `month` = :month, `status` = :status, `comment` = :comment" . "WHERE id = :cid ";

        try {           
              $stmt = $DB->prepare($sql);            
              $stmt->bindValue(":audit", $audit);
              $stmt->bindValue(":year", $year);
              $stmt->bindValue(":month", $month);
              $stmt->bindValue(":status", $status);
              $stmt->bindValue(":comment", $comment); 
              $stmt->bindValue(":cid", $cid);                
              $stmt->execute();
              $result = $stmt->rowCount();    
            } 
            catch (Exception $ex)
            {
              $_SESSION["errorType"] = "danger";
              $_SESSION["errorMsg"] = $ex->getMessage();
            }       
    }               
?>

首先,您的表单使用POST方法method="POST",但您正在尝试访问$_GET['cid']

其次,表单中没有名为cid的输入字段,因此即使使用$_POST['cid'],也不会得到任何结果。

因此,首先你需要在表单中添加一个名为cid的字段,现在我会使用这样的hidden字段,这样用户就看不到它了

<form class="form-horizontal" role="form" action="auditplanedit.php" method="POST">

<input type="hidden" name="cid" value="<?php echo $results[0]['id'] ?>">

<div class="form-group">
  <label class="control-label col-sm-2" for="usr">Audit ID:</label>  
    <div class="col-sm-5"> 
      <input  type="text" class="form-control" id="auditid" name ="auditid"  value="<?php echo $results[0]['auditid'] ?>">
    </div>
</div>

然后在您的更新查询中使用新值,如

<?php
    if(isset($_POST['submit']))
    {               
        $audit=trim($_REQUEST['auditid']);
        $year=trim($_REQUEST['year']);
        $month=trim($_REQUEST['month']);        
        $status =$_REQUEST['status'];
        $comment=$_REQUEST['comment'];
        //$cid = intval($_GET['cid']);  ////here it returns zero
        $cid = intval($_POST['cid']);  // changed line

您使用的双引号(")是错误的。请尝试以下操作:

注意:确保$row["id"]包含正确的值。

第一个代码段

<?php
//Store id into variable...
$getId = $row["id"];
?>
<td> 
    <a href="auditplanedit.php?cid=<?php echo $getId; ?>"><i class="ion ion-edit"></i></a>
    <a href="deleteauditplan.php?cid=<?php echo $getId; ?>" onclick="return confirm('Are you sure?')"><i class="ion ion-close"></i></a>                
</td>

第二代码段

<?php
include("config.php"); 
include("header.php"); 
 try {
   $sql = "SELECT * FROM auditplan WHERE id = :cid";
   $stmt = $DB->prepare($sql);
   $stmt->bindValue(":cid",intval($_GET['cid']));   
   $stmt->execute();
   $results = $stmt->fetchAll();
} catch (Exception $ex) {
  echo $ex->getMessage();
}
?>    
<div class="col-md-10 main">       
    <h1 class="page-header">
         Audit Plan Edit          
    </h1>   
 <form class="form-horizontal" role="form" action="auditplanedit.php" method="POST">
<div class="form-group">
  <label class="control-label col-sm-2" for="usr">Audit ID:</label>  
    <div class="col-sm-5"> 
      <input  type="text" class="form-control" id="auditid" name ="auditid"  value="<?php echo $results[0]['auditid'] ?>">
    </div>
</div>
<div class="form-group">
  <label class="control-label col-sm-2" for="pwd">Year:</label>
    <div class="col-sm-5">
        <input type="text" class="form-control col-xs-3" id="year" name ="year" value="<?php echo $results[0]['year'] ?>">
    </div>
</div>
<div class="form-group">
  <label class="control-label col-sm-2" for="usr">Month:</label>
    <div class="col-sm-5">
        <input  type="text" class="form-control" id="month" name ="month" value="<?php echo $results[0]['month'] ?>">
    </div>
</div>
 <div class="form-group">
  <label class="control-label col-sm-2 " for="sel1">Status:</label>
    <div class="col-sm-5">
      <select class="form-control" id="sel1" name="status">
        <option>Planned</option>
        <option>Scheduled</option>
        <option>Completed</option>
        <option>Cancelled</option>
      </select>
    </div>
</div>
 <div class="form-group">
  <label class="control-label col-sm-2" for="comment">Comment:</label>
    <div class="col-sm-5">
        <textarea class="form-control" rows="3" id="comment" name="comment" value="<?php echo $results[0]['comment'] ?>"></textarea>
    </div>
</div>  
<div class="form-group">        
      <div class=" col-sm-offset-3">
        <button type="submit" name="submit" id ="submit" class="btn btn-primary">Update</button>
        <button type="submit" name="submit1" id ="clear" class="btn btn-primary">Cancel</button>
      </div>
 </div>     
</form>           
</div>
<?php
    if(isset($_POST['submit']))
        {               
            $audit=trim($_REQUEST['auditid']);
            $year=trim($_REQUEST['year']);
            $month=trim($_REQUEST['month']);        
            $status =$_REQUEST['status'];
            $comment=$_REQUEST['comment'];
            $cid = intval($_GET['cid']);  ////here it returns zero
            $sql = "UPDATE auditplan SET `auditid` = :audit, `year` = :year, `month` = :month, `status` = :status, `comment` = :comment" . "WHERE id = :cid ";

        try {           
              $stmt = $DB->prepare($sql);            
              $stmt->bindValue(":audit", $audit);
              $stmt->bindValue(":year", $year);
              $stmt->bindValue(":month", $month);
              $stmt->bindValue(":status", $status);
              $stmt->bindValue(":comment", $comment); 
              $stmt->bindValue(":cid", $cid);                
              $stmt->execute();
              $result = $stmt->rowCount();    
            } 
            catch (Exception $ex)
            {
              $_SESSION["errorType"] = "danger";
              $_SESSION["errorMsg"] = $ex->getMessage();
            }       
    }               
?>