1

手伝ってください?レコードテーブルを持つデータベースがあります。特定の数値を取得するために計算しようとしている 2 つのフィールドが機能していません。私はphpに本当に慣れていないので、助けていただければ幸いです。

私のテーブルには、 「startdate」「terminationdate」という名前の 2 つのフィールドがあります。これらは、計算が完了した後にエコーアウトしたい 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>
4

1 に答える 1

1

ここでは、値ではなく配列のインデックスを追加しています。

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

フェッチの前に MySQL クエリで計算を行い、次のようにすべての列名を明示的に定義することをお勧めします。

SELECT startdate + terminationdate WHERE....

または、次のように PHP で実行します。

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

私が理解していることから、2つの日付の差を計算して、 を使用して期間を取得しようとしてい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 インジェクションの傾向があります。

于 2013-10-03T07:02:33.473 に答える