我正在使用HTML5 / CSS3 / PHP / MySql创建一个注册表单,其中包含以下列:
名字,姓氏,电子邮件,密码(填写在Web表格-1上)
用户名,国家/地区,年龄,SecurityQues,SecurityAns,Mobile(将在网络表单2上填写)。
对于所有字段,只有一个名为user_record的表,并且它具有自动生成的user_id,并在执行Web表单1时自动递增,并且它也是表的主键。
我正在使用网络表单1的插入查询和更新网络表单2的查询。但是,在网络表单1中生成UserId之前,无法提交第二个表单的数据。
我尝试使用lastInsertId()检索它;但它不起作用,因为它只在插入在同一页面上完成时返回id,因此它在表单1上工作,但不在表单2上。
在两个不同的网页上只使用了一个表。正在完成一次插入并正在生成user_id。 在另一个更新查询将执行以更新在第一个窗体中创建的行的其余字段。对于那个表单2需要主键,这是不可用的。
任何人都可以帮助我并告诉我如何在表单2上检索最后一个UserId,以便可以在用户刚刚在表单1上创建的同一行填充数据。
以下是表单1和表单2的代码段。
Form 1 PHP Snippet:
<?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;
?>
Plz告诉我如何使用第二种形式的数据更新同一行。
答案 0 :(得分:0)
显然,如果第一个记录不存在,则不能提交第二个表格。
我认为第二个表单已经在客户端浏览器上了。
您必须使用会话功能,首先必须在会话变量上设置lastInsertId()。
稍后,在form2提交时,php可以在UPDATE之前检索会话变量。如果未设置包含lastInsertID的会话变量,则表示客户端尚未提交第一个表单。
答案 1 :(得分:0)
正如@XPerez所提到的,我需要使用会话变量。所以在第一个Web表单上我在header语句之前添加了以下行:
$_SESSION['user_id'] = $conn->lastInsertId();
在第二个表单上,我在Update语句
之前添加了以下语句 $id = $_SESSION['user_id'];
它完成了伎俩。会话变量可以在单个会话中的不同网页上使用。在会话开始的第一页上,我将insert语句的id存储到会话变量中,然后在第二页上使用它。