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

时间:2015-01-08 13:53:02

标签: javascript php mysql forms populate

我有一个网站,用户可以注册,然后使用他们的注册信息登录,将他们带到一个带有表单的页面,我希望能够预先填写表单的某些部分以及他们注册时的数据/登录。

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

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

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

<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,在此行中给出null:

return mysqli_query($link, $sql);

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

return mysqli_fetch_assoc($query);

3 个答案:

答案 0 :(得分:0)

这不能在评论中添加。

回答会话部分的数据。

在您的登录代码中:

$_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..
}

答案 1 :(得分:0)

假设您已经安装了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
}

答案 2 :(得分:-1)

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

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

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'] ?>"/>

等等。

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