Php 在注册第二个查询后使用用户ID
我创建了一个注册页面,但我想将用户信息发送到我创建的另一个db表。我正在创建的新添加的查询正在工作并将我想要的信息发送到db,但它没有将用户id发送到我的名为“payment_status”的新db表 我不确定我是否正确处理了这个问题。我正试图通过会话获取用户id,但我还没有登录,所以我不知道这是否是原因 有没有办法确保我的新查询在信息到达我的第一个名为“users”的db表后发送,然后从“users”表中获取用户id并将其放入我的表“payment\u status”中 在我的初始查询中,我没有手动输入用户id。它是我的users表的主要自动递增“id” 我的初始创建查询:Php 在注册第二个查询后使用用户ID,php,database,variables,mysqli,Php,Database,Variables,Mysqli,我创建了一个注册页面,但我想将用户信息发送到我创建的另一个db表。我正在创建的新添加的查询正在工作并将我想要的信息发送到db,但它没有将用户id发送到我的名为“payment_status”的新db表 我不确定我是否正确处理了这个问题。我正试图通过会话获取用户id,但我还没有登录,所以我不知道这是否是原因 有没有办法确保我的新查询在信息到达我的第一个名为“users”的db表后发送,然后从“users”表中获取用户id并将其放入我的表“payment\u status”中 在我的初始查询中,我没
if($validation->passed()) {
$user = new User();
$salt = Hash::salt(32);
try {
$user->create(array(
'firstname' => Input::get('firstname'),
'lastname' => Input::get('lastname'),
'email' => Input::get('email'),
'phone_number' => Input::get('phone_number'),
'username' => Input::get('username'),
'password' => Hash::make(Input::get('password'), $salt),
'salt' => $salt,
'joined' => date('Y-m-d H:i:s'),
'group' => 1
));
$success = "You have successfully created an account. We will notify you once the account has been approved. Then you will be able to login.";
echo $success;
} catch(Exception $e) {
die($e->getMessage());
}
} else {
foreach($validation->errors() as $error) {
$error;
}
}
}
}
}
然后我的新查询:
if(isset($_POST['submit'])){
$id = ( isset( $_SESSION['id'] ) ? $_SESSION['id'] : "" );
$user_id = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );
$firstname = Input::get('firstname');
$payment_name = "Owes";
$payment_id = 1;
$payment_amount = 0;
}
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("INSERT INTO payment_status (id, user_id, firstname, payment_name, payment_id, payment_amount) VALUES (?, ?, ?, ?, ?, ?)");
if ( false===$stmt ) {
// Check Errors for prepare
die('prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('iissii', $id, $user_id, $firstname, $payment_name, $payment_id, $payment_amount);
if ( false===$stmt ) {
// Check errors for binding parameters
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->execute();
if ( false===$stmt ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
这是发送不正确的线路
$user_id = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );
对于我注册的任何人,它都显示为0。如果有用户登录,这行代码就可以工作,因为它从users表中获取“id”行。因此,我试图获取的users表中的行是'id'
我这样做是否正确,或者我可以尝试什么
更新:
我试过这个
$stmt = $con->prepare("INSERT INTO payment_status (id, user_id, firstname, payment_name, payment_id, payment_amount) VALUES (?, ?, ?, ?, ?, ?)");
$user_id = mysqli_insert_id($con);
我注释掉了在此之前列出的用户id变量。您需要使用上次插入id
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"INSERT INTO Persons (FirstName,LastName,Age)
VALUES ('Glenn','Quagmire',33)");
// Print auto-generated id
echo "New record has id: " . mysqli_insert_id($con);
mysqli_close($con);
From:使用全局变量、会话或cookie存储最后一个插入id。
并在$stmt->execute之后使用最后一个insert id
试试这个代码。您正在执行提交请求之外的查询。如何将此添加到第二个查询中?它会像这个$user\u id=mysqli\u insert\u id$con@Becky在插入查询后面加上$user\u id=mysqli\u insert\u id$con;这将返回您最后一次插入idI更新了我的问题与我所做的。我尝试将变量放在prepare insert之后。它在数据库中仍然返回0。不工作。我已经启动了一个会话,并且收到了一个警告,因此我在开始时删除了您的会话代码。我的付款状态数据库表中的“我的用户id”字段中的值仍然为0。请回显您的查询或检查付款状态表的数据类型。它与bind_参数中的相同吗?对于payment_状态,我将id设置为AI,primary设置为int 11。我的用户名也是int 11。你能在这里回显你的查询吗?我真的不知道如何回显查询结果。我以前从未做过。我只是搜索了一下,但不知道如何将它应用到我的代码中。
if(isset($_POST['submit'])){
$id = ( isset( $_SESSION['id'] ) ? $_SESSION['id'] : "" );
$user_id = $_SESSION['last'];
$firstname = Input::get('firstname');
$payment_name = "Owes";
$payment_id = 1;
$payment_amount = 0;
$con = mysqli_connect("localhost","root","","db");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $con->prepare("INSERT INTO payment_status (id, user_id, firstname, payment_name, payment_id, payment_amount) VALUES (?, ?, ?, ?, ?, ?)");
if ( false===$stmt ) {
// Check Errors for prepare
die('prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('iissii', $id, $user_id, $firstname, $payment_name, $payment_id, $payment_amount);
if ( false===$stmt ) {
// Check errors for binding parameters
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->execute();
$_SESSION['last']=$stmt->insert_id;
if ( false===$stmt ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
}