求教PHP:数据读取、日期计算以及生成图片

下面的PHP脚本是从数据表Programs读取(项目)网站名称、支付状态,开始日期,加入日期,以相关参数生成图片。

我感觉读取的两个日期可能有问题,这样,计算项目的寿命(今日-开始日期)以及加入时间(今日-加入日期)显示出来不准确。

请高手们指教。

<?php
if(strlen($_GET['id']))
{
include('./config/config.php');
if($result=mysql_query("SELECT `sitename`, `status`, `date_started`, `date_added` FROM `programs` WHERE `id_program`='". $_GET['id'] ."' AND `blacklist`='' AND `status`>'0'"))
{
if(mysql_num_rows($result)==1)
{
$name=mysql_result($result, 0, 0);
$status=mysql_result($result, 0, 1);

$date_started=mysql_result($result, 0, 2);
$date_added=mysql_result($result, 0, 3);

$Date_1=date("Y-m-d h:i:s");
$Date_2=$row['date_started'];
$Date_3=$row['date_added'];
$Date_List_1=explode("-",$Date_1);
$Date_List_2=explode("-",$Date_2);
$Date_List_3=explode("-",$Date_3);
$d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]);
$d2=mktime(0,0,0,$Date_List_2[1],$Date_List_2[2],0+$Date_List_2[0]);
$d3=mktime(0,0,0,$Date_List_3[1],$Date_List_3[2],0+$Date_List_3[0]);

//monitored xx days and lifetime
$Days=round(($d1-$d2)/3600/24);
$life="Lifetime ".$Days." Days";

$MDays=round(($d1-$d3)/3600/24);
$monit="Listed ".$MDays." Days";

mysql_free_result($result);

$img=imagecreatefrompng('gfx/banner.png');
$black=imagecolorallocate($img, 0, 0, 0);
$red=imagecolorallocate($img, 255, 0, 0);
$name=((strlen($name)>15) ? substr($name, 0, 13). '...' : $name);
$x = floor((ImageSX($img) / 2) - ((ImageFontWidth(2) * strlen($name)) / 2));
imagestring($img, 3, $x, 55, $name, $black);

imagestring($img, 2, 8, 75, $life, $red);
imagestring($img, 2, 10, 90, $monit, $red);

imagestring($img, 2, 25, 110, $last_payout, $black);

if ($p=imagecreatefrompng('./gfx/icons/status_'. $status .'.png'))
{
imagecopyresampled($img, $p, 25, 132, 0, 0, 118, 16, 118, 16);
imagedestroy($p);
}
header("Content-type: image/png");
imagepng($img);

}
}
}
?>
谢谢阳光上的桥!真是行家一出手,就知道有没有。
你说得非常正确,原脚本效率不高。

按你提供的方法,解决了日期显示问题。

实际上,我对PHP根本不懂,虽然以前学过点RG(if)什么的,早不用了。上面的脚本也是别人的,自己只是根据需要改改。
现在,想请教你及大家,这个Image,生成的大小是120x150,想把它改成120x180或者其他尺寸,不知道如何改。

另外,有没有什么好的PHP网站广告管理脚本,主要是Banner,可能还有文字广告,有位置、日期等等管理信息。请推荐并指教。

再次先谢过了。
最新回答
銱儿鎯筜

2023-07-29 04:39:54

你的数据字段是date类型吧,应该使用mysql的datediff函数,可以直接获取天数,在我的数据库里面执行下面语句:
select user,regtime,datediff(now(),regtime) from web.clubuser limit 10
的结果为:
user regtime datediff(now(),regtime)
英子 2000-01-04 09:36:00 3464
安安 2000-01-04 12:30:00 3464

知道怎么做了吧,在你的程序中应该把下面的语句:

if($result=mysql_query("SELECT `sitename`, `status`, `date_started`, `date_added` FROM `programs` WHERE `id_program`='". $_GET['id'] ."' AND `blacklist`='' AND `status`>'0'"))

修改为:

if($result=mysql_query("SELECT `sitename`, `status`, `date_started`, `date_added`, datediff(now(),date_started) s_days, datediff(now(),date_added) a_days FROM `programs` WHERE `id_program`='". $_GET['id'] ."' AND `blacklist`='' AND `status`>'0'"))

然后你就可以直接使用下面的语句获取你要的结果:

$Days=mysql_result($result, 0, 's_days');
$life="Lifetime ".$Days." Days";

此外,你的mysql_result是效率比较低的,建议使用mysql_fetch_array。