У меня есть сайт с профилями пользователей. На домашней странице я пытаюсь показать небольшие резюме профиля каждого человека. Это резюме включает имя человека, пол и возраст человека.
<ul>
{section name=i loop=$person_list}
<li><a href="user_detail.php?id={$person_list[i].id}">{$person_list[i].username}, {$person_list[i].gender}, {$age[i]}
{/section}
</ul>
Ранее я использовал цикл foreach для их выполнения, но мне нужен индекс, чтобы также отображать возраст отображения, вычисленный в файле index.php.
if (isset($_GET['name']) && isset($_GET['gender']))
{
$name = $_GET['name'];
$gender = $_GET['gender'];
}
else
{
$name = "";
$gender = "";
}
define("PERSONS_PER_PAGE", 10);
if (isset($_GET['offset']))
{
$offset = $_GET['offset'];
}
else
{
$offset = 0;
}
list($person_list, $num_persons) = get_persons($name, $gender, $offset, PERSONS_PER_PAGE);
$ages = array();
for ($i = 0; $i < count($person_list); $i++)
{
$ages[$i] = age($person_list[$i].$dateOfBirth, time());
}
$smarty = new Smarty;
$smarty->assign("name", $name);
$smarty->assign("gender", $gender);
$smarty->assign("persons_per_page", PERSONS_PER_PAGE);
$smarty->assign("interests", $interests);
$smarty->assign("offset", $offset);
$smarty->assign("num_persons", $num_persons);
$smarty->assign("person_list", $person_list);
$smarty->assign("ages", $ages);
$smarty->display("index.tpl");
Не беспокойтесь о $ offset и PERSONS_PER_PAGE, которые используются только для нумерации страниц.
Функция моего возраста выглядит следующим образом:
function age($birth)
{
$birth_date = new DateTime();
$birth_date = $birth;
$birth_date->setTimestamp($birth);
$now = time();
$now_date = new DateTime();
$now_date->setTimestamp($now);
$interval = $birth_date->diff($now_date); // $interval is a DateInterval
$age = $interval->y; // number of years in the interval
return $age;
}
Дополнительно, если это актуально; моя функция get_persons выглядит так:
function get_persons($name, $gender, $offset, $persons_per_page)
{
$connection = mysql_open();
$query = "SELECT SQL_CALC_FOUND_ROWS id, username, gender, dateOfBirth FROM Person";
if ($name && $gender)
{
$query .= " WHERE name like '%$name%' AND gender like '%$gender%'";
}
$query .= " order by id";
$query .= " LIMIT $offset, $persons_per_page";
// print "$query<br>\n";
$result = mysql_query($query, $connection) or show_error();
$r = mysql_query("SELECT FOUND_ROWS()", $connection) or showerror();
$r = mysql_fetch_array($r);
$num_entries = $r[0];
$entries = array();
$person_list = array();
while ($person = mysql_fetch_array($result)) {
$person_list[] = $person;
}
mysql_close($connection) or show_error();
return array($person_list, $num_entries);
}
и таблица для человека выглядит так:
create table if not exists Person
(
id int not null auto_increment primary key,
username varchar(10) not null,
name varchar(40) not null,
gender varchar(1) not null,
dateOfBirth timestamp not null,
email varchar(40) not null
);
Это приводит к следующей ошибке:
Notice: Undefined variable: dateOfBirth in /net/homes.ict.griffith.edu.au/export/home/s2737451/public_html/wp/labs/lab5/index.php on line 39 Fatal error: Call to a member function setTimestamp() on a non-object in /net/homes.ict.griffith.edu.au/export/home/s2737451/public_html/wp/labs/lab5/includes/defs.php on line 167
Заранее спасибо, мне очень нужна помощь по этому вопросу: (