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

标签 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>

最佳答案

您可以通过 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

关于php - 根据项目类型自动计算输入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239304/

相关文章:

php - 使用 HTML 表单和 PHP 更新 MySQL

mysql - 将此查询分成批处理

mysql - 我可以将多个 MySQL 行连接到一个字段中吗?

javascript - 表单 POST 未显示在 Controller 中

php - 清理/替换所有日语、中文、韩语、俄语等字符

php - 获取文件名中包含空格的 AWS S3 对象

html - 无论标签长度如何,始终将表格居中并排列输入

html - 使用带输入的 Sprite 图像

javascript - 如何将多个文本字段传递给单个 Javascript 函数并计算结果

php - PHP 中的 json_encode 输出没有给数据提供标签,以便可以访问它