簡體   English   中英

如何從MySQL數據庫中提取數據以在頁面加載時預先填充表單?

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

我有一個網站,用戶可以在該網站上進行注冊,然后使用他們的注冊信息登錄,該信息將他們帶到帶有表單的頁面,我希望能夠使用他們注冊/登錄時的數據來預先填充表單的某些部分。

我假設由於登錄功能使用會話數據,因此我可以找到他們的電子郵件地址並通過所述電子郵件地址標識該行,然后將數據提取到與該行關聯的字段中。 我找不到這是如何工作的示例。

一旦我能夠提取數據並填充字段,目標就是要有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);

無法在評論中添加。

回答會話部分的數據。

在您的登錄代碼中:

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

等等。

另外,考慮使用類而不是在樣式中重復代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM