根据项目类型自动计算输入日期

时间:2015-05-14 13:58:31

标签: php mysql forms validation

好的,在这里我得到的一个正在杀死我的大脑。

由于显而易见的原因,我们发布了我们发送的备份磁带。我创建了一个小系统,可以根据返回日期计算每天早上需要从存储中返回的磁带,并自动发送包含此信息的邮件。

现在为了让它更甜,我创建了一个小输入表单来捕获磁带信息,然后再发送它。我想做的是让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>

1 个答案:

答案 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>&nbsp;</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>&nbsp;</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">&nbsp;</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