如何从我的 MySQL 数据库中提取数据以在页面加载时预填充表单?

How do I pull data from my MySQL database to pre populate a form on page load?

我有一个网站,用户可以在该网站上注册,然后使用他们的注册信息登录,这会将他们带到一个带有表单的页面,我希望能够使用他们何时使用的数据预填充表单的某些部分registered/logged 英寸

我假设因为登录功能使用会话数据,所以我可以找到他们的电子邮件地址并通过所述电子邮件地址识别行,然后提取与该行关联的字段中的数据。我找不到它如何工作的示例。

一旦我能够提取数据并填充字段,目标就是拥有 2 个按钮;一个用于保存和更新数据库,以便用户可以 return 并稍后完成表单,另一个按钮在所有字段填写完毕后变为活动状态,然后提交要在确认页面上打印的数据,并添加一个数据库字段的值指示表单已完成,因此当用户重新登录时,他们将看到表单已完成并且无法再提交。

我试图通过向其中添加一个值字符串来填充其中一个字段作为测试,但我似乎无法在任何地方找到一个示例来说明它是如何工作的。这是我的表格:

<div style="float:left;  width:450px;">

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">&nbsp;</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;">SET PART #</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;">INSTALL DATE</div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">1.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part1" value="<?php echo $_GET['first_name'];?>"> </div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part1-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">2.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part2"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part2-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">3.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part3"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part3-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">4.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part4"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part4-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">5.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part5"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part5-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">6.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part6"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part6-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">7.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part7"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part7-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">8.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part8"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part8-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">9.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part9"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part9-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">10.</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="text" id="part10"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input type="text" id="part10-install-date"></div>

  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:35px;">&nbsp;</div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:187px;"><input type="submit" name="save" value="Save"></div>
  <div style="float:left; padding-right:7px; padding-bottom:7px;  width:192px;"><input class="send" id="register" type="submit" value="Submit" disabled="disabled"></div>
</form>



</div>

更新:

我试过这个方法:

<?php

if(isset($_SESSION)){
$userEmail=$_SESSION['email'];
$userData = fetch_assoc(query("SELECT * FROM login WHERE email = '$userEmail'"));
}

$link = mysqli_connect('localhost','username','password','database'); //TODO: your connection here
function query($sql) {
 return mysqli_query($link, $sql);
}
function fetch_assoc($query) {
return mysqli_fetch_assoc($query);
}

?>

并将此值添加到表单输入之一:

value="<?= $userData['first_name'] ?>">

现在出现 2 个错误:

警告:mysqli_query() 期望参数 1 为 mysqli,此行给出的空值:

return mysqli_query($link, $sql);

和另一个错误: 警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,此行给出的空值:

return mysqli_fetch_assoc($query);

无法在评论中添加。

回答您的会话部分以获取数据。

在您的登录代码中:

$_SESSION['email']=$_POST['email']; //make sure not to assign any weird characters.. (SQL-INJECTION)

以及获取数据:

if(isset($_SESSION)){
$userEmail=$_SESSION['email'];
echo $userEmail;
//and for selecting ofc you would use the value..
}

假设您已经设置了 MySQL 数据库并填充了数据,我建议您阅读 PHP PDO: http://php.net/manual/en/book.pdo.php

更具体地看看如何连接到您的数据库: http://php.net/manual/en/pdo.connections.php

在您设置好连接后,查询您的数据库以获取信息: http://php.net/manual/en/pdo.prepared-statements.php

特别看例子#3。

获取用户的示例:

$user = <INSERT USER>;
$pass = <INSERT PASS>;
$dbh = new PDO('mysql:host=localhost;dbname=<DATABASE NAME>', $user, $pass);

$stmt = $dbh->prepare("SELECT * FROM login WHERE email = :userEmail");
$stmt->bindParam(':userEmail', $userEmail);

if ($stmt->execute()) {
    $user = $stmt->fetch(PDO::FETCH_ASSOC);
    // now you can get your user details, for example, $user['username'] or however you have it set up in your database
}

首先,您需要使用一个(或多个)字段作为数据库中的主键。您提到您可以使用电子邮件字段来执行此操作,但请检查该字段是否设置为唯一。

然后您可以捕获电子邮件的会话值并获取其余数据的数据库:

if(isset($_SESSION)){
 $userEmail=$_SESSION['email'];
 $userData = fetch_assoc(query("SELECT * FROM your_table WHERE email = '$userEmail'"));
}

请注意,您应该根据连接数据库的方式定义fetch_assocquery方法。类似于:

global $link = mysqli_connect('localhost','username','password','database'); //TODO: your connection here
function query($sql) {
 return mysqli_query($link, $sql);
}
function fetch_assoc($query) {
 return mysqli_fetch_assoc($query);
}

一旦你有了它,你就在每个输入中添加相应的值:

<input type="text" id="part2" value="<?= $userData['lastName'] ?>"/>

以此类推

此外,考虑使用 类 而不是在样式中重复代码。