我需要检查是否存在月度合同以及是否已签署。 我会改进代码,因为它似乎太重了
是时候切换到PDO了,也许我可以重写一些东西来加速脚本
基本上我有一个包含2列的表格 第1列有日期参考,2013 / jan,2013 / fev ...和第2列显示检查文件是否存在并有签名。
这是我的代码。有一种方法可以改善吗?
// QUERY DB
// Get contract
$contract = array();
$query1 = mysql_query("SELECT * FROM contracts
WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
$contract[] = $row['month'];
}
$signature = array();
$query1 = mysql_query("SELECT * FROM contracts
WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
$signature[] = $row['sign'];
}
// Get START AND END DATE
$startYear = '2012';
$startMonth = '12';
$endYear = '2013';
$endMonth = '12';
$startDate = strtotime("$startYear/$startMonth/01");
$endDate = strtotime("$endYear/$endMonth/01");
$currentDate = $endDate;
结果表
<tbody>
<?php
while ($currentDate >= $startDate) {
$foo = date('Y-m',$currentDate);
$currentDate = strtotime( date('Y/m/01/',$currentDate).' -1 month');
?>
<tr class="grade">
<td>
<?php echo $foo; ?>
</td>
<td>
<?php
if (in_array($foo, $contract)) {
echo "<img src='images/ok.png';
} else {
echo "<img src='images/ko.png'/>";
}
if (in_array($foo, $signature)) {
echo "<img src='imagens/ok.png'/>";
} else {
echo "<img src='imagens/sign.png'/>";
}
?>
</td>
</tr>
<?php
$i++;
}
?>
</tbody>
答案 0 :(得分:3)
连接到PDO。
<?php
$contract = array();
$signature = array();
$db = new PDO('mysql:host=localhost;dbname=<SOMEDB>', '<USERNAME>', 'PASSWORD');
$st = $db->prepare("SELECT month ,sign FROM contracts WHERE ic_id=?");
$st->execute(array('28'));
foreach($st as $row)
{
$contract[] = $row['month'];
$signature[] = $row['sign'];
}
?>
为什么在有信息的地方使用变量?例如,在开始和结束日期。如你所知,mysql_ *被删除,所以你应该尽快转移到PDO。将变量命名为$ var1,$ var2是非常糟糕的约定。
检查以下链接:
正如我上面写的那样
$startYear = '2012';
$startMonth = '12';
$endYear = '2013';
$endMonth = '12';
$startDate = strtotime("$startYear/$startMonth/01");
$endDate = strtotime("$endYear/$endMonth/01");
这些变量似乎是常量所以使用常量字符串。
$startDate = strtotime("2012/12/01");
$endDate = strtotime("2013/12/01");
此外,您选择查询中的所有列,但只使用2,我已更改您的查询。
这部分代码
<?php
if (in_array($foo, $contract)) {
echo "<img src='images/ok.png';
} else {
echo "<img src='images/ko.png'/>";
}
if (in_array($foo, $signature)) {
echo "<img src='imagens/ok.png'/>";
} else {
echo "<img src='imagens/sign.png'/>";
}
?>
可以更改为
<?php
echo "<img src='images/".(in_array($foo, $contract) ? "ok" : "ko").".png";
echo "<img src='imagens/".(in_array($foo, $signature) ? "ok" : "ko").".png";
?>
更少的代码:)
echo还有一个快捷语法,您可以使用等号立即跟随开始标记。你可以改变这个:
<?php echo $foo; ?>
到这个
<?=$foo?>
最后一个提示是使用预增量,因为它更快。如果您不需要后期增量操作,请使用pre!
将$ i ++更改为++ $ i;
答案 1 :(得分:1)
首先想到的是这个重复的SQL查询...
<强>现有强>
$contract = array();
$query1 = mysql_query("SELECT * FROM contracts
WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
$contract[] = $row['month'];
}
$signature = array();
$query1 = mysql_query("SELECT * FROM contracts
WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
$signature[] = $row['sign'];
}
<强>更新强>
$contract = array();
$signature = array();
$query1 = mysql_query("SELECT month, sign FROM contracts
WHERE ic_id='28'");
while ($row = mysql_fetch_assoc($query1)) {
$contract[] = $row['month'];
$signature[] = $row['sign'];
}
<强>更改强>