【问题标题】:how to maintain last inserted id and store in session?如何维护最后插入的 id 并存储在会话中?
【发布时间】:2016-12-16 21:41:56
【问题描述】:

我编写了一个代码,我必须在整个应用程序中维护最后插入的行 ID,而不刷新该页面具有分步表单的页面,而无需重新加载页面。我已经为此编写了代码,但是最后一秒插入的 id 不是最后插入的 id。这里第一次插入是通过 jquery ajax 调用发生的,其中将在该文件中的 ajax 中调用一个文件,该文件存储会话变量。我的代码如下:

<form class="" id="myFOrm" method="post" id="my_form_id"  >
<input type="hidden" id="user_id" name="user_id" value="<?php echo $fet['id']; ?>">
<div class="form-group">
<input type='text' name=''>
</div>
<div class="form-group">
<input type='text' name=''>
</div>
<a onclick="return submitFunction('1', '2')" >Submit</a>

我的js代码是:

function submitFunction(current, next) {
var data = new FormData($('#myFOrm')[0]);/
  $.ajax({
        type:"POST",
        url:"insert.php",
        data:data,
        contentType: false,
        cache: false,
        processData: false,
        async:false,
        dataType: 'json',
        success:function(response)
        {
            alert(response);
        }
}

插入.php

<?php
 session_start();
 $sql = "INSERT INTO table_name(col1,col2,col3,col4)
        VALUES ('".$val1."','".$val2."', '".$val3."', '".$val4."')";
 if ($conn->query($sql) === TRUE)
{
    $my_id = mysqli_insert_id($conn);

    unset($_SESSION['my_id']);

    $_SESSION['my_id'] = $my_id;
    echo $_SESSION['my_id'];
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

我需要该会话值的下一个表单是:

<form id="myFOrm1" class="form-label-left" method="post" id="my_form_id">
<input type="hidden" id="user_id" name="user_id" value="<?php echo $fet['id']; ?>">
<input type="hidden" id="my_id" name="my_id" value="<?php echo $_SESSION['my_id']; ?>">
<div class="form-group">
<input type="text" name="field1">                                                        
</div>
<div class="form-group">
<input type="text" name="field2">                                                         
</div>
<div class="form-group">
<input type="text" name="field3">                                                         
</div> 

谁能告诉我我做错了什么?提前致谢。

【问题讨论】:

  • 在插入脚本运行后,它将被重定向到下一个表单,即我在上面写的需要会话 ID 的最后一个表单。我的要求是在用户登录后,他被重定向到仪表板页面,那里总共有 7 个步骤,在第 1 步中完成的插入是我首先编写的表单(上图)。无需通过 ajax 调用刷新页面即可执行所有 7 个步骤。
  • 我会告诉你这个故事。首先,正如我所说,总共有 7 个步骤。每一步都有一个数据库后端表,在第 1 步中,我将数据插入到表 1 中,然后我将获得一个自动增量。该表中的 id 我想将该 id 存储在会话中,因为由于我的应用程序基于 step-1 表 ID,所有进一步的步骤都将运行(我们的整个应用程序运行)。我想为此使用会话,你能建议如何维护这样的信息吗?或者还有其他方法吗?

标签: php session session-variables


【解决方案1】:

试试这个:

<?php
 session_start();
 $sql = "INSERT INTO table_name(col1,col2,col3,col4)
        VALUES ('".$val1."','".$val2."', '".$val3."', '".$val4."')";

$result = $conn->query($sql);
if (!$result) {
    echo "Error: " . $sql . "<br>" . $conn->error;
} else {
    while ($raw = $conn->mysqli_fetch_array($result)) {
        $object_array[] = static::instantiate($row);
    }
    $_SESSION['my_id'] = $object_array->first()->id;
    echo $_SESSION['my_id'];
}

您必须编写实例化方法才能调用它:

private static function instantiate ($record) {
    $object = new static;
    foreach($record as $attribute=>$value) {
        if($object->has_attribute($attribute)) {
            $object->$attribute = $value;
        }
    }
    return $object;
}

显然,在您的表格模块中,您必须提供“可填写”的字段列表

<?php 
    class User extends DatabaseObject {
        public static $table_name = "users";
        public static $fillable = array('id', 'username', 'full_name', 'email', 'dob');

    }

【讨论】:

  • 我试过了,数据被插入到表中,但什么也没显示。只是在警告框中清空。
  • @prasadchinthala 已添加修改。
  • 我创建了一个非常小的应用程序,作为 PHP 基础培训的一部分。
  • 我正在获取最后插入的 id 并成功存储在会话 $_SESSION['my_id'] 中,但是在打开下一个表单之后,如果我在隐藏中使用该会话 $_SESSION['my_id']字段,然后是最后一秒插入的 id,它显示的比最后插入的 id 还要多。
  • 如果你使用 MySQLi 连接数据库,.您可以调用一个 PHP 方法:mysqli_affected_rows($this->conn)。这个返回 $conn 范围内记录的 id(有关它的详细信息,请查看 PHP.net)。
【解决方案2】:

请删除此

unset($_SESSION['my_id']);

【讨论】:

  • 首先,感谢您的快速回复。我试过了,但没有运气,我在最后插入的 id 之前得到了,就像最后插入的行 id 是 100 我在会话中得到 99 值但是在插入后最后插入的 id 在警报中正确显示。
【解决方案3】:

你必须先将 id 插入数据库,然后如果你想获取它然后获取它,然后你在那个地方插入另一个 id

【讨论】:

  • 我有那个脚本
猜你喜欢
  • 1970-01-01
  • 2017-12-11
  • 2014-10-06
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多