[英]Update database based on input value
我的網頁上有一個下拉框和三個輸入框。 每當我在下拉框中進行選擇時,它都會自動將信息填充到文本框中。 每個文本框旁邊都有一個“保存”按鈕。 一旦單擊保存按鈕,這使我可以更新該字段(如果需要更改)。 因此,例如,如果我將下拉框值硬編碼到我的update語句中,則可以使用它,但是如果不對它進行硬編碼,我就無法使其正常工作。 因此,我認為我只需要獲取Javascript即可讀取在下拉框中選擇的值。 我怎樣才能解決這個問題?
下拉框代碼:
<div>
<div id="vendor">
<strong>Vendor:</strong>
</div>
<div class="align">
<select name="vendor_dropdown" id="ven" onChange="updateinput();">
<option value="">Choose a Vendor</option>
<?php foreach($users->fetchAll() as $user): ?>
<option
data-name="<?php echo $user['MR_POC_N'];?>"
data-email="<?php echo $user['MR_POC_E'];?>"
data-phone="<?php echo $user['MR_POC_P'];?>"
>
<?php echo $user['MR_Name'];?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
自動填充的聯系信息代碼:
<div>
<div id="contact_info">
<strong>Contact Information:</strong><br>
</div>
<div class="align1">
<table align="left" id="contact">
<tr>
<td align="left">Name:</td>
<td><input type="text" id="name" class="name" name="name" style="margin-left: 5px"></td>
<td><input type="button" class="edit" name="edit" value="Save"></td>
</tr>
<tr>
<td align="left">Email:</td>
<td><input type="email" id="email" class="email" name="email" style="margin-left: 5px"></td>
<td><input type="button" class="edit" name="edit" value="Save"></td>
</tr>
<tr>
<td align="left">Phone Number:</td>
<td><input type="tel" id="tel" class="tel" name="number" style="margin-left: 5px"></td>
<td><input type="button" class="edit" name="edit" value="Save"></td>
</tr>
</table>
</div>
</div>
用於編輯信息的Javascript:
// ----- Edit Contact Info -----
$(document).on("click", "#contact .edit", function () {
var $this = $(this);
var tds = $this.closest('tr').find('td').filter(function () {
return $(this).find('.edit').length === 0;
});
if ($this.val() === 'Edit') {
/*if($this.id !== '.mr_id') {
tds.not('.mr_id').not('.mr_name').prop('contenteditable', true);
}*/
} else {
var isValid = true;
var errors = '';
$('#myDialogBox').empty();
var elements = tds;
if (tds.find('input').length > 0) {
elements = tds.find('input');
}
var dict = {};
elements.each(function (index, element) {
var type = $(this).attr('class');
var value = (element.tagName == 'INPUT') ? $(this).val() : $(this).text();
console.log(type);
// ----- Switch statement that provides validation for each table cell -----
switch (type) {
case "ven":
dict["MR_Name"] = value;
break;
case "name":
if (value == value.match(/^[a-zA-Z\s]+$/)) {
dict["MR_POC_N"] = value;
break;
}
else {
isValid = false;
errors += "Please enter a valid Name\n";
}
break;
case "email":
if (value == value.match(/^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/)) {
dict["MR_POC_E"] = value;
break;
}
else {
isValid = false;
errors += "Please enter a valid Email\n";
}
break;
case "tel":
if (value == value.match('^[0-9 ()+/-]{10,}$')) {
dict["MR_POC_P"] = value;
break;
}
else {
isValid = false;
errors += "Please enter a valid Phone Number\n";
}
break;
}
})
if (isValid) {
console.log(dict);
//$this.val('Save');
//tds.prop('contenteditable', false);
var request = $.ajax({
type: "POST",
url: "update.php",
data: dict
});
request.done(function (response, textStatus, jqXHR){
if(JSON.parse(response) == true){
console.log("Data saved");
} else {
console.log("Data failed to save");
console.log(response);
console.log(textStatus);
console.log(jqXHR);
}
});
// Callback handler that will be called on failure
request.fail(function (jqXHR, textStatus, errorThrown){
// Log the error to the console
console.log(textStatus);
console.log(jqXHR);
console.error(
"The following error occurred: "+
textStatus, errorThrown
);
});
// Callback handler that will be called regardless
// if the request failed or succeeded
request.always(function () {
});
} else {
alert(errors);
}
}
});
update.php:
<?php
$MR_Name = $_POST['MR_Name'];
$MR_POC_N = $_POST['MR_POC_N'];
$MR_POC_E = $_POST['MR_POC_E'];
$MR_POC_P = $_POST['MR_POC_P'];
$host="xxxxxxx";
$dbName="xxxxxxxxx";
$dbUser="xxxx";
$dbPass="xxxxxxxx";
$pdo = new PDO("sqlsrv:server=".$host.";Database=".$dbName, $dbUser, $dbPass);
$sql = "UPDATE Stage_Rebate_Master SET MR_POC_N = :MR_POC_N, MR_POC_E = :MR_POC_E, MR_POC_P = :MR_POC_P WHERE MR_Name = :MR_Name";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':MR_Name', $MR_Name);
$stmt->bindValue(':MR_POC_N', $MR_POC_N);
$stmt->bindValue(':MR_POC_E', $MR_POC_E);
$stmt->bindValue(':MR_POC_P', $MR_POC_P);
$result = $stmt->execute();
echo json_encode($result);
?>
我認為沒有必要做所有這些只是制作一個更新表格。 處理此問題的最佳方法是,首先根據特殊ID從數據庫中進行選擇查詢,以從該ID獲取所有數據,然后用該數據填充表單值。
之后,您將獲得一個包含來自數據庫的數據的表格。 在頁面末尾放置一個提交按鈕(僅一個)。 編輯您喜歡的每個字段,然后單擊更新。
以更改的形式對所有字段進行更新查詢,將使用值更新它們;如果不更改,則將僅使用其先前值甚至使用表單中的空值進行更新。
我剛剛創建了一個非常相似的表格。 我在頁面頂部有一個提交按鈕。 提交時:對於每一行,我檢查數據庫和輸入框之間是否有任何更改(用戶可以更改),然后(如果(且僅)當它們不同時)我對該行使用更新表查詢。 這很簡單,效果很好。
這是一個php示例:
if (isset($_POST['submit']) and !empty($_POST['submit'])){
$column_1 = $_POST['Col1'];
$column_2 = $_POST['Col2'];
foreach ($_POST['KeyColumn'] as $key => $variable){
$select = "SELECT * FROM tblTable WHERE KeyColumn='".$variable."'";
$result = $conn->query($select);
if ($result->num_rows>0){
while ($row=$result->fetchassoc()){
$same = true;
if (($row['Col1'] != $Col1[$key]) or ($row['Col2'] != $Col2[$key])){
$same = false;
}
if (!$same){
/* update sql on this line */
}
}
}
}
}
注意:我使用了很多循環,因為我的電子表格不是一種形式。 但是它的工作原理是沒有循環,只是簡單得多
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.