使用表单元素多次更新数据库
Posted
技术标签:
【中文标题】使用表单元素多次更新数据库【英文标题】:Update Database multiple times with form elements 【发布时间】:2012-10-08 09:37:34 【问题描述】:我一直在为一个医生办公室工作。我很擅长 html/CSS 和一些 php,但我仍在尝试学习 javascript/JQuery。
所以描述我的问题的最简单方法(至少对我来说,我的问题非常复杂)是使用图像(如果这不是描述这个问题的最佳方式,请告诉我,我会描述它更详细):
我有一个 PHP 代码,它接受传递给它的值(即位置编号)并将位置编号与用户的时间一起插入到数据库中。
这是 PHP 代码:
<?php
date_default_timezone_set('America/Denver');
$apptid = $_REQUEST['apptid'];
$currentlocation = $_REQUEST['currentlocation'];
$currentlocationstart = date("Y-m-d H:i:s");
/*** mysql hostname ***/
$hostname = '******';
/*** mysql username ***/
$username = '***********';
/*** mysql password ***/
$password = '***************';
$conn = new PDO("mysql:host=$hostname;dbname=sv", $username, $password);
/*** The SQL SELECT statement ***/
$sql = "UPDATE schedule SET currentlocation = ?, currentlocationstart = ? WHERE apptid= ? ";
$q = $conn->prepare($sql);
$q->execute(array($currentlocation,$currentlocationstart, $apptid));
?>
这里是 html 代码(其中填充了一点 php,用于填充):
$sql = "SELECT * FROM locations order by patientlocation ASC";
echo "<td><select name=location>";
foreach ($dbloc->query($sql) as $row2)
echo "<option>".$row2['patientlocation']."</option>";
echo "<option value='Check Out'>Check Out</option>";
echo "</select></td>";
所以我遇到的问题是如何使用 Javascript/JQuery 执行此操作,以及我的 php 是否可以使用 Javascript/Jquery。我还想存储从最初的“签入”按钮到用户点击签出时的所有内容。
另一个问题是我需要使用 AJAX 自动执行此操作,而不是多次刷新页面。
非常感谢大家的帮助。如果我没有很好地解释我的问题,请告诉我,我会填写更多详细信息!
【问题讨论】:
使用 jQuery,查看change
方法
一个非常有趣的业务交互。在我尝试回答之前,我想知道您是否有不想将所有签到存储在数据库中的原因。我与许多客户一起发现,这种类型的数据在未来可能是有益的。帮助他们解决运营效率低下的问题。
@TimWithers,谢谢,我会看看。
@BrianVanderbusch,实际上你有一个非常好的观点。我会改变我的问题。
【参考方案1】:
首先只是一个简短的问题,您是否可以将字段变成一个表单而不是让它们在更改时消失?
这样,当他们点击签入时,您可以让表单出现并填写,当他们在表单底部按下结账时,我们可以使用 AJAX 提交表单并显示回复。
所以应该是这样的:
<script type="text/javascript">
$(document).ready(function()
// Hide the form on load
$('#myForm').hide();
// Hide the completed message
$('#finished').show();
);
// When someone clicks checkin this function will be called
$('#checkIn').click(function()
$e = $(this);
$.ajax(
type: "POST",
url: "[URL OF PHP PAGE HERE]", // this page should add date to the database
data: "checkIn="+$(this).val(), // This will send $_POST['checkIn']
success: function()
// Display the form once the AJAX is finished
$('#myForm').show();
);
);
// This function will be called when someone uses the select field
$('.[yourClassName]').change(function()
$e = $(this);
$.ajax(
type: "POST",
url: "[URL OF PHP PAGE HERE]",
data: "yourFieldName="+$(this).val(),
success: function()
// Display the form once the AJAX is finished
alert('Done');
);
);
// When someone clicks checkOut this function will be called
$('#checkOut').click(function()
$e = $(this);
$.ajax(
type: "POST",
url: "[URL OF PHP PAGE HERE]", // this page should save data to db
data: "example="+$('select#exampleId').val(),
success: function()
// Hide the form again
$('#myForm').hide();
// Show the finished div with your success msg
$('#finished').show();
);
);
</script>
<input type="button" value="Check In" id="checkIn" />
<form method="post" id="myForm" action="">
// Build the rest of your form here
<select name="example" id="exampleId">
<option value="1">Test</option>
</select>
<input type="button" value="Check Out" id="checkOut" />
</form>
<div id="finished" style="color:#ff0000;">Checked Out</div>
应该就是这样,除非您当然需要在我的示例所在的位置构建自己的表单。使用您将 AJAX 发送到的 PHP 页面,它应该是一个常规的 PHP 页面,它接受 $_POST
数据,就像您正常发布表单时一样。
【讨论】:
我应该提到,这种方式将在加载时隐藏表单,当您单击签入时,它将签入发送到您的 php 页面(用于加载到数据库中)并显示表单。当您单击结帐时,它将再次隐藏表单并显示结帐消息。 不应该像这样格式化 POST 数据:data: key: value
非常感谢您的回答。我会尝试并回复你
@MistaJosh,这看起来只在您签入或签出时更新数据库?当您更改选择/下拉位置时,是否也可以更新数据库?
如果你想这样做,你需要给你的选择字段一个类名,并让另一个像上面那样的 jquery 函数发生 onchange。我会更新我的答案以上是关于使用表单元素多次更新数据库的主要内容,如果未能解决你的问题,请参考以下文章