Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将mysql\u insert\u id()传递给$\u POST或form action?_Php_Mysql Insert Id - Fatal编程技术网

Php 如何将mysql\u insert\u id()传递给$\u POST或form action?

Php 如何将mysql\u insert\u id()传递给$\u POST或form action?,php,mysql-insert-id,Php,Mysql Insert Id,我有一个表单页面,其中提交了一个插入或更新查询,具体取决于ID的存在/不存在(当有ID时,它用于检索记录和预填充表单)。在任何一种情况下,处理都是在form.php中进行的,因此表单的操作就是它本身(action=“/form.php”>)。我的问题是,当form.php重新加载post submit时,URL的ID为空,因此页面进入“插入”模式,而不是“更新”模式。解决这个问题的最佳实践方法是什么 我应该在“如果”中添加什么运算符/条件 if(isset($\u GET['ID'])和&is_

我有一个表单页面,其中提交了一个插入或更新查询,具体取决于ID的存在/不存在(当有ID时,它用于检索记录和预填充表单)。在任何一种情况下,处理都是在form.php中进行的,因此表单的操作就是它本身(
action=“/form.php”>
)。我的问题是,当form.php重新加载post submit时,URL的ID为空,因此页面进入“插入”模式,而不是“更新”模式。解决这个问题的最佳实践方法是什么

  • 我应该在“如果”中添加什么运算符/条件

    if(isset($\u GET['ID'])和&is_numeric($\u GET['ID']){

  • …包括提交后的空ID URL(即,
    form.php?ID=

    或者

  • 如何将`$newID=mysql_insert_id();1传递给表单的操作?(我在这里尝试了许多变体,但都成功了)

    $newID=mysql\u insert\u id();
    …[剪断]。。。
    通常的做法应该是将数据发布与数据显示分开。这可以防止在用户首次到达页面时意外添加内容,以及在用户点击刷新时意外重复发布内容

    此外,保持逻辑的独立性使代码在将来更具可读性和可维护性

    您可能应该寻找的方法是:

    view.php?ID=<record to view> // Only displays a record already in the DB
    add.php                      // The add record form with action="process_add.php"
    process_add.php?Field1=<>&Field2=<>... // Receives data from add.php, puts it in
                                           // the database and then forwards back to
                                           // view.php or add.php as you see fit.
    
    view.php?ID=//只显示数据库中已有的记录
    add.php//使用action=“process\u add.php”添加记录表单
    process_add.php?Field1=&Field2=…//从add.php接收数据,将其放入
    //数据库,然后转发回
    //view.php或add.php。
    

    EDIT:虽然我在process\u add.php上有GET参数,但它们只是用来证明它们是被传递的。它们应该作为POST参数发送到实际实现中。

    下面是这样一个代码示例,使用模板。
    基于传递id思想的CRUD应用

    但不知道,为什么需要传递新生成的id

    <?  
    mysql_connect(); 
    mysql_select_db("new"); 
    $table = "test"; 
    if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part: 
      $name = mysql_real_escape_string($_POST['name']); 
      if ($id = intval($_POST['id'])) { 
        $query="UPDATE $table SET name='$name' WHERE id=$id"; 
      } else { 
        $query="INSERT INTO $table SET name='$name'"; 
      } 
      mysql_query($query) or trigger_error(mysql_error()." in ".$query); 
      header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);  
      exit;  
    }  
    if (!isset($_GET['id'])) { //listing part: 
      $LIST=array(); 
      $query="SELECT * FROM $table";  
      $res=mysql_query($query); 
      while($row=mysql_fetch_assoc($res)) $LIST[]=$row; 
      include 'list.php'; 
    } else { // form displaying part: 
      if ($id=intval($_GET['id'])) { 
        $query="SELECT * FROM $table WHERE id=$id";  
        $res=mysql_query($query); 
        $row=mysql_fetch_assoc($res); 
        foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v); 
      } else { 
        $row['name']=''; 
        $row['id']=0; 
      } 
      include 'form.php'; 
    }  
    ?>
    

    谢谢Rikudo。我已经重温了我之前的一些帖子,并在可能的情况下进行了更新。否则,为什么投票被否决?我的问题不合法/有用吗?p.s.谢谢修复马歇尔。(我尝试了几次添加此评论)不知道,我没有投反对票,但投了赞成票以保持平衡。这个问题非常有效。谢谢tdk001。事实上,当form.php比现在更简单时,我本来有一个单独的process.php,所以我会继续将INSERT&UPDATE查询移回。不过,我必须将mysql_INSERT_id从process.php传递到form.php,所以提交后,我将始终处于上次编辑/创建记录的编辑模式。CheersGET方法不应用于存储数据。Thx Col。我使用GET是因为我有时会从摘要视图页面(所有记录)访问form.php使用“编辑记录”链接;否则,我会从“新记录”链接进入form.php。我认为@Col.shrapanel对于处理页面是有意义的,他是对的。
    get
    可以转到
    view.php
    add.php
    ,但从
    add.php
    proces时应该使用
    POST
    s_add.php
    。啊,是的,我明白了(没有双关语;)…我在提交formCheers时使用了$\u POST,这里有很多要消化的内容。现在,由于我可能要从form.php中删除处理,我还没有想到我要做什么POST submit,所以我可能根本不需要传递mysql\u insert\u id。也就是说,我可能只需要返回到summary视图,正如我上面提到的,我可以从该视图她编辑了一个现有的记录,或者启动了一个新的记录。再次感谢Col。我肯定可以从你的代码中学习一些语法,并改进我迄今为止的工作。很高兴你喜欢它。我相信你也可以得到一些想法,比如在未设置、零或pozitie时使用模板或3向使用id
    <? include TPL_TOP ?>
    <form method="POST">
    <input type="text" name="name" value="<?=$row['name']?>"><br>
    <input type="hidden" name="id" value="<?=$row['id']?>">
    <input type="submit"><br>
    <a href="?">Return to the list</a>
    </form>
    <? include TPL_BOTTOM ?>
    
    <? include TPL_TOP ?>
    <a href="?id=0">Add item</a>
    <? foreach ($LIST as $row): ?>
    <li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
    <? endforeach ?>
    <? include TPL_BOTTOM ?>