【问题标题】:Pre-filling php form on update更新时预先填写 php 表单
【发布时间】:2014-01-09 17:57:23
【问题描述】:

我目前只使用一种形式来更新和插入,它运作良好。但我只想在更新时预填充它。我不完全确定如何做到这一点。如果我使用 php 变量设置值,我会在日志中收到一个错误,指出它未定义。任何帮助表示赞赏。谢谢。

这是表格:

<?php 
include_once('Crud_class.php');
$obj = new Crud("loocalhost","root","password","mydb");
$id = $_GET['id'];
if (isset($_GET['id']) && $_GET['id'] > 0) {
  echo "Update for record id#:" . $_GET['id'];
} else {
  echo "Insert new book";
}
 ?>

 <html>
 <head>
 <title>Add New Product</title>
 </head>

 <body>
 <form method="post" action="actions.php">
 <ul class="form">

   <li><label for"title">Title:</label>
      <input type="text" name="title" value="<?php echo $title?>" /></li>

    <li><label for="author">Author:</label>
    <input type="text" name="author"/></li>

     <li><label for="category">Category:</label>
     <select name="category">
       <option value="General">General</option>
       <option value="HTML/CSS">HTML/CSS</option>
       <option value="Javascript">Javascript</option>
       <option value="PHP">PHP</option>
       <option value="Other">Other</option>
      </select></li>

   <li><label for"description">Description:</label>
   <textarea name="description"></textarea></li>

   <li><label for="img_path">Image Path:</label>
    <input type="text" name="img_path"/></li>

      <input type="hidden" name="id" value="<?php if ($id > 0) { echo $id;} else {echo 0;} ?>"/>
     <li><input class="submit" type="submit" name="submit" value="Submit"/></li>
 </ul>
 </form>

  </body>
  </html>

这是我的动作文件:

<?php
include('Crud_class.php');
$obj=new Crud("localhost","root","password","mydb");
if (isset($_POST['id']) && $_POST['id'] > 0) {
//update
extract($_REQUEST);
$obj->update($id,$title,$author,$category,$description,$img_path);

} else {
// insert
extract($_REQUEST); 
$obj->insert($title,$author,$category,$description,$img_path);
 }

?>

还有我的 crud 文件

       <?php
class Crud{
public $mysqli;
public $data;
public function __construct($host,$username,$password,$db_name){
    $this->mysqli = new mysqli('localhost', 'root', 'password', 'mydb');            
}

// BOOKS Table
//READ
public function readAll(){
    $query="SELECT * FROM books";
    $result= $this->mysqli->query($query);
    $num_result=$result->num_rows;      

    if($num_result>0){
        while($rows=$result->fetch_assoc()){        
            $this->data[]=$rows;
            //print_r($rows);
        }       
        return $this->data;
    }
}
//INSERT
public function insert($title,$author,$category,$description,$img_path){
    $query="INSERT INTO books SET title='$title', author='$author', category='$category', description='$description', img_path='$img_path'";
    $result= $this->mysqli->query($query) or die(mysqli_connect_errno()."Product Failed to Insert");

    if($result){
        header('location:read.php?insert_status=success');  
    }
}
//UPDATE
    public function update($id,$title,$author,$category,$description,$img_path){
        $query="UPDATE books SET title='$title', author='$author', category='$category', description='$description', img_path='$img_path' WHERE id='$id'";
        $result= $this->mysqli->query($query) or die(mysqli_connect_errno()."Cannot update");

        if($result){
            header('location:read.php?update_status=success');  
        }
    } 
//Delete
public function delete($id){
    $query="DELETE FROM books WHERE id='$id'";      
    $result= $this->mysqli->query($query) or die(mysqli_connect_errno()."Failed to Delete");

    if($result){
        header('location:read.php?delete_status=success');  
    }               
}


}




 ?>

【问题讨论】:

  • 什么没有定义?请包含您日志中的完整错误。
  • [Thu Jan 09 09:44:43 2014] [error] [client 127.0.0.1] PHP Notice: Undefined index: title in /home/prissipix/Projects/BTS_Bookshelf/form.php on line 39、推荐人:127.0.0.1/Projects/BTS_Bookshelf/read.php?update_status=success
  • 听起来您的表单尚未发布,因此 $_POST['title'] 不存在。见this

标签: php oop sql-update crud


【解决方案1】:

您需要从某人正在表单页面上编辑的记录中获取数据。

if (isset($_GET['id']) && $_GET['id'] > 0) {
  echo "Update for record id#:" . $_GET['id'];
  // GET row from database, something like $obj->read($_GET['id']);
}

为此,您需要向 CRUD 类添加一些读取函数,该类选择 id= 某个输入整数的行。

如果您有数据,请将其提取到对象或数组中,并以下列形式使用这些值:

<input type="text" value="<?php if (isset($data)) echo $data['author']; ?>">

(当然选择框需要多做一些工作)

【讨论】:

    【解决方案2】:

    您已经设置了 ID 和条件。现在你需要初始化你需要的变量:

    if (isset($_GET['id']) && $_GET['id'] > 0) {
      echo "Update for record id#:" . $_GET['id'];
      $formValues = readRecordByID($_GET['id']);  // you will need to create this crud select function
    } else {
      echo "Insert new book";
      //initialize blank values:
      $formValues = array(
            'author'=>'',
            'category'=>'',
            'description'=>'',
            'img_path'=>'');
    }
    

    现在在您的表单中可以安全使用:

    <input type="text" name="author" value="$formValues['author']"/>
    

    【讨论】:

      【解决方案3】:

      预填充表单依赖于在 HTML 中嵌入预填充内容并使用属性(例如文本框的 value= 属性)或在 option 上的 option 上设置 selected="selected",或者依赖于客户端javascript 基于通过 AJAX 检索或再次嵌入 HTML 中的数据来执行此操作。

      你在 php 表单中的 Title 字段就是我所说的一个例子——你有这个:

      value="<?php echo $title?>"
      

      这就是您在所有其他字段中所需要的(selected="selected" 用于 &lt;select&gt; 字段)。

      另外,请参阅this question

      【讨论】:

      • 对,但是这样做会给我一个错误,说明变量未定义。我以前见过两种形式,一种用于插入,一种用于更新,但在使用一种形式时似乎无法正常工作。我也试过 value="" 没有运气:/
      • 正如您对问题的评论,完整的错误信息是什么?什么变量没有定义?
      • 标题变量未定义。这是完整的错误消息 [Thu Jan 09 09:44:43 2014] [error] [client 127.0.0.1] PHP Notice: Undefined index: title in /home/prissipix/Projects/BTS_Bookshelf/form.php on line 39,参考:127.0.0.1/Projects/BTS_Bookshelf/read.php?
      • 这不是错误消息所说的。错误消息显示未定义 index.
      • 感谢您指出,我对 php 完全陌生,只是想弄清楚这一点
      【解决方案4】:

      把php改成

      <?php 
      include_once('Crud_class.php');
      $obj = new Crud("loocalhost","root","password","mydb");
      $id = $_GET['id'];
      
      if (isset($_GET['id']) && $_GET['id'] > 0) {
      echo "Update for record id#:" . $_GET['id'];
      }
      
      if(isset($_REQUEST['id'])){ // this is added
      $id=$_REQUEST['id'];
      $result=$obj->mysqli->query("SELECT * FROM books WHERE id='$id'");
      
      $rows=$result->fetch_assoc();
      
      extract($rows);
      } else {
        echo "Insert new book";
      }
      ?>
      

      并输入值到

           value="<?php echo $title; ?>"
      

      有效!

      感谢大家的帮助和意见! :)

      【讨论】:

      • 选择框仍有问题,但其余工作正常
      猜你喜欢
      • 2014-12-11
      • 2017-03-03
      • 2021-09-08
      • 2016-08-07
      • 2021-10-27
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多