好吧,我得到了一个正在杀死我大脑的东西。
出于显而易见的原因,我们将备份磁带发送到异地。我创建了一个小系统,可以根据返回日期计算每天早上需要从存储中返回哪些磁带,并自动发送包含此信息的邮件。
现在,为了让它更加甜蜜,我创建了一个小输入表单来在发送磁带之前捕获磁带信息。我想做的是让 RETURNDATE 字段根据磁带类型(每日、每月、每周、每年)自动计算返回日期,但我不知道如何执行此操作。
如有任何建议,我们将不胜感激。下面是我的表格。日期以 YYYY-MM-DD 格式存储。
<html>
<head>
<title>Update a Tape Record in Database</title>
</head>
<body>
<?php
if(isset($_POST['update']))
{
$dbhost = '10.32.6.13';
$dbuser = 'remote';
$dbpass = '[cGadm1n]';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error()); }
$tapeserial = $_POST['tapeserial'];
$tapetype = $_POST['tapetype'];
$dateused = $_POST['dateused'];
$datereturn = $_POST['datereturn'];
$sql = "UPDATE tapeman SET dateused = '".$dateused."', datereturn = '".$datereturn."', tapetype = '".$tapetype."' WHERE tapeserial = '".$tapeserial."';";
mysql_select_db('tapeman');
$retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not update data: ' . mysql_error()); }
header("location:http://10.32.6.13/ops-center/index.php/2015-05-13-06-05-16/tape-backup-management/capture-tape-information");
mysql_close($conn);}else{ ?>
<form method="post" action="<?php $_PHP_SELF ?>">
<table width="750" border="0" cellspacing="1" cellpadding="2">
<tr align="center">
<td>Tape Serial : </td>
<td><input name="tapeserial" type="text" id="tapeserial" tabindex="1"></td>
</tr>
<tr align="center">
<td>Tape Type : </td>
<td>
<select name="tapetype" id="tapetype">
<option value="Daily">Daily</option>
<option value="Weekly">Weekly</option>
<option value="Monthly">Monthly</option>
<option value="Yearly">Yearly</option>
</select>
</td>
</tr>
<tr align="center">
<td>Date Used : </td>
<td><input name="dateused" type="date" id="dateused"></td>
<td>Date Format - YYYY-MM-DD</td>
</tr>
<tr align="center">
<td>Date Return : </td>
<td><input name="datereturn" type="date" id="datereturn" </td>
<td>Date Format - YYYY-MM-DD</td>
</tr>
<tr align="center">
<td> </td>
<td> </td>
</tr>
<tr align="center">
<td colspan="2" align="center">
<input name="update" type="submit" id="update" value="Update">
</td>
</tr>
</table>
</form>
<?php}?>
</body>
</html>
最佳答案
您可以通过 JavaScript 或 JQuery 来完成此操作。您将无法使用 PHP 真正做到这一点,因为条件是基于用户的选择。
jsFiddle Exmaple(更加模块化):https://jsfiddle.net/Twisty/6ds6vw2d/
鉴于您的表单采用 HTML 格式,您可以进行一些更改:
<form method="post" action="<?php $_PHP_SELF ?>">
<table width="750" border="0" cellspacing="1" cellpadding="2">
<tr align="center">
<td>Tape Serial : </td>
<td><input name="tapeserial" type="text" id="tapeserial" tabindex="1"></td>
<td> </td>
</tr>
<tr align="center">
<td>Tape Type : </td>
<td>
<select name="tapetype" id="tapetype">
<option value="1">Daily</option>
<option value="7">Weekly</option>
<option value="30">Monthly</option>
<option value="365">Yearly</option>
</select>
</td>
<td> </td>
</tr>
<tr align="center">
<td>Date Used : </td>
<td><input name="dateused" type="date" id="dateused" /></td>
<td>Date Format - YYYY-MM-DD</td>
</tr>
<tr align="center">
<td>Date Return : </td>
<td><input name="datereturn" type="date" id="datereturn" /></td>
<td>Date Format - YYYY-MM-DD</td>
</tr>
<tr align="center">
<td colspan="3"> </td>
</tr>
<tr align="center">
<td colspan="3" align="center">
<input name="update" type="submit" id="update" value="Update" />
</td>
</tr>
</table>
</form>
首先,您遇到了一些专栏问题。您的表有时使用 3 列。其次,我更改了值以匹配 tapetype
的天数。现在您可以使用 JQuery 为您创建新日期:
<script>
$(function(){
$("#dateused").on("change", function(){
var tt = parseInt($("#tapetype").val());
var du = $("#dateused").val();
var parts = du.split("-");
var date = new Date(
parseInt(parts[0], 10), // year
parseInt(parts[1], 10) - 1, // month (starts with 0)
parseInt(parts[2], 10) // date
);
date.setDate(date.getDate() + tt); // Increment based on tapetype
parts[0] = "" + date.getFullYear();
parts[1] = "" + (date.getMonth() + 1);
if (parts[1].length < 2) {
parts[1] = "0" + parts[1];
}
parts[2] = "" + date.getDate();
if (parts[2].length < 2) {
parts[2] = "0" + parts[2];
}
$("#datereturn").val(parts.join("-"));
});
});
</script>
这也可以在这里看到:javascript: how can I increment a date string (YYYY-MM-DD) by 1 day
关于php - 根据项目类型自动计算输入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239304/