繁体   English   中英

如何在不同的php-html页面上检索同一表格的最后插入的自动生成的ID

[英]How to retrive last inserted auto generated id for the same table on different php-html page

我正在使用HTML5 / CSS3 / PHP / MySql创建一个注册表单,该表单将包含以下各列:

名,姓,电子邮件,密码(在Web表格1上填写)

用户名,国家/地区,年龄,安全性,安全性,移动性(在网络表格2上填写)。

对于所有字段,只有一个名为user_record的表,并且具有执行Web窗体1时自动生成并自动递增的user_id,它也是该表的主键。

我正在使用针对Web表单1的插入查询和针对Web表单2的更新查询,但是第二个表单的数据只有在Web表单1中生成了UserId后才能提交。

我试图使用lastInsertId()检索它; 但它不起作用,因为它仅在同一页上完成插入时才返回ID,因此它适用于表单1,但不适用于表单2。

在两个不同的网页上只使用一个表。 在一次插入中,正在生成user_id。 在另一个更新查询将被执行以更新在第一个窗体中创建的行的其余字段。 该表格2需要主键,该主键不可用。

谁能帮我一个忙,告诉我如何在表格2上检索最后一个UserId,以便可以在用户刚在表格1上创建的同一行上填充数据。

以下是表格1和表格2的代码段。

表格1 PHP代码段:

 <?php

$servername = "localhost";
$username = "root";
$password = "";
$db = "myDB";

$conn = new PDO("mysql:host=$servername;dbname=$db", $username, $password);


$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if(isset($_POST['sign_up-btn'])){
    session_start();

    $first_name = ($_POST['first_name']);
    $last_name = ($_POST['last_name']);
    $email_id = ($_POST['email_id']);
    $password = ($_POST['password']);
    $password2 = ($_POST['password2']);

    if($password == $password2){
        $password = md5($password);

        $sql = "INSERT INTO user_record(first_name, last_name, email, password) VALUES('$first_name', '$last_name', '$email_id', '$password')";
        $conn->exec($sql);
        $_SESSION['message'] =  "You are almost done";
        $_SESSION['first_name'] = $first_name;
        header("location: pro.php");

    }else{
        $_SESSION['message'] =  "Password do not match";
    }
}
 $conn = null;
 ?>

形式2的PHP脚本为:

 <?php

$servername = "localhost";
$username = "root";
$password = "";
$db = "myDB";

$conn = new PDO("mysql:host=$servername;dbname=$db", $username, $password);


$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if(isset($_POST['sub_btn'])){
    session_start();

    $user_name = ($_POST['user_name']);
    $sel_cont = ($_POST['sel_cont']);
    $age = ($_POST['age']);
    $sec_que = ($_POST['sec_que']);
    $sec_ans = ($_POST['sec_ans']);
    $mob_num = ($_POST['mob_num']);
    $con_code = ($_POST['con_code']);

    $id = $conn->lastInsertId();


    $sql = "UPDATE user_record SET user_name = '$user_name', country = '$sel_cont', 
    age = '$age', security_ques = '$sec_que', security_ans = '$sec_ans', 
    mobile_num = '$mob_num', c_code = '$con_code' WHERE user_id = '$id' ";

    $conn->exec($sql);
    $_SESSION['message'] =  "Welcome";
    $_SESSION['user_name'] = $user_name;
    header("location: home.php");

}

$conn = null;
 ?>

请告诉我如何用第二种格式的数据更新同一行。

显然,如果不存在第一个插入的记录,则无法提交第二个表单。

我认为第二种形式已经在客户端浏览器上。

您必须使用会话功能,在第一种形式上,必须在会话变量上设置lastInsertId()。

稍后,在form2上提交时,php可以在UPDATE之前检索会话变量。 如果未设置包含lastInsertID的会话变量,则表示客户端尚未提交第一个表单。

正如@XPerez所述,我需要使用会话变量。 因此,在第一个Web表单上,我在标题语句之前添加了以下行:

 $_SESSION['user_id'] = $conn->lastInsertId();

在第二种形式上,我在Update语句之前添加了以下语句

 $id = $_SESSION['user_id'];

它成功了。 会话变量可以在整个会话中用于不同的网页。 在会话启动的第一页上,我将插入语句的ID存储到会话变量中,然后在第二页上使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM