在表单提交后立即回显新生成的(自动递增)用户 ID?

Echo back a newly generated (auto increment) user id immediately after form submission?

提问人:DarthCoder 提问时间:3/20/2023 更新时间:3/20/2023 访问量:75

问:

我的用户在表单中提交一些基本信息后,如何让新创建的用户 ID 回显回标题(重定向)页面上的隐藏字段?

第一种形式包含基本姓名、电话、电子邮件输入。当用户提交表单(到数据库)时,AI 的“userID”列会生成其唯一的“userID”。

我需要该唯一 ID 回显回标题(重定向)页面上的隐藏字段,然后用户将在该字段上传他们的个人资料照片。

新用户表单:

<h1>New User Form</h1>

<form action="newUser_formHandler.php" method="POST" >

<input name="userName" placeholder="Enter Name"><br><br>

<input name="userPhone" placeholder="Enter Phone"><br><br>

<input name="userEmail" placeholder="Enter Email"><br><br>

<input type="submit" name="submit" value="Submit">

</form>

新的用户表单处理程序:

<?php include './secure/dbKey.php';?>

<?php

if(isset($_POST['submit'])){

$userName = $_POST['userName'] ;
$userPhone = $_POST['userPhone'] ;
$userEmail = $_POST['userEmail'] ;

$newUser = "insert into Users (userName, userPhone, userEmail)

values('$userName', '$userPhone', '$userEmail')";

$run = mysqli_query($conn,$newUser) or die(mysqli_error()) ;


//Page Re-direct after form submission

header('location: /profilePhoto_UploadPage.php');

}

?>

个人资料照片上传页面:

<?php include './secure/dbKey.php';?>

<html>

<head>

    <title>Profile Photo Upload Page</title>

</head>

<body>

    <h1>Congratulations!</h1>

    <h2>Your profile was succesfully created!</h2>

    <a>Please upload a photo to complete your profile:</a><br><br>

<form action="photoUpload_Handler.php" method="post" enctype="multipart/form-data">

  <input type="hidden" name="userID" id="userID" value="<?php echo $userID; ?>">

  <input type="file" name="fileToUpload" id="fileToUpload"><br><br>

  <input type="submit" value="Upload Image" name="submit">

</form>

</body>

</html>
php html 表单 mysqli 回显

评论

0赞 user3783243 3/20/2023
有关 ,请参见 php.net/manual/en/mysqli.insert-id.php。如果问题更具体地针对 DOM 输出,请澄清。此代码对 SQL 注入开放。使用参数化查询。how do I get the newly created userID
0赞 user3783243 3/20/2023
mysqli_error()将不起作用,因为此版本需要数据库连接。您也不应将错误抛出控制台。记录它们并查看您的日志。mysqli_*
0赞 DarthCoder 3/20/2023
@Phil 感谢您的回答。标题调整似乎很容易理解。但在我插入它之前,我只想正确理解,我是否会这样检索值;value=“<?php echo $conn->insert_id; ?>” ??
1赞 user3783243 3/20/2023
最好使用 SESSION。通过这种方法,任何人都可以操纵 DOM 并承担另一个人的角色。另外,用户如何重新上传任何内容,或者这是一个 1 次过程?
1赞 Your Common Sense 3/20/2023
提供的所有重复项都比下面提供的答案差得多。

答:

4赞 Phil 3/20/2023 #1

使用 $conn->insert_id 检索值,并将其传递到查询字符串中或将其设置到会话中。

此外,您遵循的任何教程或指南都严重过时或非常糟糕。使用准备好的语句并遵循一个好的教程

$stmt = $conn->prepare(
    "INSERT INTO `Users` (`userName`, `userPhone`, `userEmail`) VALUES (?, ?, ?)"
);
$stmt->bind_param(
    "sss",
    $_POST["userName"],
    $_POST["userPhone"],
    $_POST["userEmail"]
);
$stmt->execute();

header(
    "Location: /profilePhoto_UploadPage.php?" .
        http_build_query(["userID" => $conn->insert_id])
);
exit();

在辅助页面上,您将使用 query 参数

<input
  type="hidden"
  name="userID"
  id="userID"
  value="<?= htmlspecialchars($_GET['userID']) ?>"
/>

使用会话同样简单

session_start();

// same mysqli code as above

$_SESSION['userID'] = $conn->insert_id;
header('Location: /profilePhoto_UploadPage.php');
exit;

在辅助页面上,您实际上并不需要它,因为您发布到的任何页面都可以阅读会话

// photoUpload_Handler.php
session_start();
$userID = $_SESSION['userID'];