计算两个字段时遇到问题


Having issues with calculating two fields

请协助?我有一个带有记录表的数据库。我试图计算以获得某个数字的两个字段不起作用。我真的是 php 的新手,希望得到任何帮助。

我的表有 2 个名为"开始日期""终止日期"的字段,这是我想在为它们完成计算后回显的两个字段

守则:

    <?php
include 'core/init.php';
protect_page();
include 'includes/overall/header.php';
error_reporting(1);
?>
<div class="article">
      <h2>    
      <br> 
      SEARCH A REFERENCE
      <br> 
       </h2>
    </center>
    <body>
    <div id="formsearch">
    <br> 
       <form method="post" action="" name="form1" id="form1" >   
     Enter the  ID Number 
     <br><br>
     <b>Search Record  </b> <input type="text" name="term" /><br />
     <br>
    <input type="submit" name="submit" value="Search" class="btn" />
    </form>
    </div>
    <h3> <center> Search Result (s) </h3> 
 <?php
if ($_REQUEST['submit']) {
$term = $_POST['term'];
$row ['employerid'] == $user_data ['user_id'];
$XX = "<br><br><div class='messagebox'><h2> <center> Oops! </h2> <p>We were only to retrieve a partial record on <strong>$term</strong>  you have entered. Please make use of our contact form if you would like us to get you your reference. Be sure to enter the three required fields.  <a href='Mailforms/refrequest.php'  class='lightbox'>Click Here!</a> or to validate the id <a href='idverification.php'> Click here</a></p>
<br />
</div>";  
$sql = mysql_query("SELECT idnumber, 
firstname, 
lastname, 
companyname,
jobtitle,
dismissal,
floor(terminationdate - startdate) + ' days ' +
MOD(FLOOR ((terminationdate - startdate) * 24), 24) + 'hours' +
MOD (FLOOR ((terminationdate - startdate) * 24 * 60), 60) + ' minutes ' 'time_diff'
FROM ref_employees
WHERE idnumber= '$term'")
   or die('Error in query : $sql. ' .mysql_error());

if (mysql_num_rows($sql) > 0  )  {
while ($row = mysql_fetch_array($sql)){
    if ($row ['employed'] == '1') {
    echo '<h4>Currently Employed By :   '.$row['companyname'];
    echo '</h4> ';
    echo '<a href="#">Any doubts? Enquire about this candidate</a> ';
    }
    if ($row ['employed'] == '0') {
        echo ' <h4>Some Available Options For:</h4>';
        include 'includes/admenu.php';
    echo '<h4>Not Currently employed    '.$row['companyname'];
    echo '</h4> ';
    }
     echo "<table border='1' cellpadding='10'>";
        echo "<tr> <th>ID Number</th> <th>First Name</th> <th>Last Name</th><th>company</th> <th>Job Title</th> <th>Period</th><th>Reason for dismissal</th><th></th><th></th></tr>";
   echo "<tr>";
             echo '<td>' . $row['idnumber'] . '</td>';
echo '<td>' . $row['firstname'] . '</td>';
echo '<td>' . $row['lastname'] . '</td>';
echo '<td>' . $row['companyname'] . '</td>';
echo '<td>' . $row['jobtitle'] . '</td>';
echo '<td>' .($row['startdate'] + $row['terminationdate']).'</td>';
echo '<td>' . $row['dismissal'] . '</td>';
                echo '<td><a href="editemp.php?idnumber=' . $row['idnumber'] . '">Achievements</a></td>';
                echo '<td><a href="delete.php?idnumber=' . $row['idnumber'] . '">training</a></td>';
                echo "</tr>"; 
        } 
        // close table>
        echo "</table>";

}
}
else
 {
print ("$XX");
}
mysql_free_result($sql);
mysql_close($connection);

?>
 <div>
 </div>
<?php 
include  'includes/overall/footer.php'; ?></div>

您添加的是数组的索引,而不是此处的值:

echo '<td>' . $row['$sdate+$edate'] . '</td>';

我建议您在获取之前对MySQL查询进行计算,并显式定义所有列名,例如:

SELECT startdate + terminationdate WHERE....

或者在PHP中像这样做:

echo '<td>' .($row['startdate'] + $row['terminationdate']).'</td>';

现在,从我所理解的情况来看,您正在尝试计算两个日期的差异,以使用TIMEDIFF()获得持续时间。在这里:

SELECT idnumber, firstname, lastname, companyname,jobtitle,dismissal TIMEDIFF(startdate,terminationdate) time_diff WHERE idnumber= '$term'

在 PHP 中:

$sql = mysql_query("SELECT idnumber, 
firstname, 
lastname, 
companyname,
jobtitle,
dismissal,
floor(terminationdate - startdate) + ' days ' +
MOD(FLOOR ((terminationdate - startdate) * 24), 24) + 'hours' +
MOD (FLOOR ((terminationdate - startdate) * 24 * 60), 60) + ' minutes ' 'time_diff'
FROM ref_employees
WHERE idnumber= '$term'")
   or die('Error in query : $sql. ' .mysql_error());

在您的评论中,您希望使用 php 计算它。在这里:

$date1 = $row['startdate'];
$date2 = $row['terminationdate'];
$diff = abs(strtotime($date2) - strtotime($date1)); // change here if plus or minus
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

* 请注意,mysql 扩展现已弃用,并将在将来的某个时候被删除。那是因为它很古老,充满了不良做法,缺乏一些现代功能。不要用它来编写新代码。请改用 PDO 或 mysqli_*。您的查询容易出现 SQL 注入。