好的,在这里我得到的一个正在杀死我的大脑。
由于显而易见的原因,我们发布了我们发送的备份磁带。我创建了一个小系统,可以根据返回日期计算每天早上需要从存储中返回的磁带,并自动发送包含此信息的邮件。
现在为了让它更甜,我创建了一个小输入表单来捕获磁带信息,然后再发送它。我想做的是让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>
答案 0 :(得分:2)
您可以通过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