aRpi
Новичок
Вывести данные из таблицы tbldata
1. Столбец "Имя" - tbldata.name с построением дерева по tbldata.parent
2. Столбец "Email" - tbldata.email с проверкой на валидность
3. Столбец "Часы" - tbldata.value
4. Столбец "Сумма часов с подчиненными" - сумма собственного tbldata.value и всех подчиненных строк
5. По клику справа выводятся поля tbldata.name и tbldata.text
Приложенные файлы:
example.png — пример результата работы
dump.sql — SQL дамп базы данных
вот приложенный пример результата работы:
Вот как я его решил:
1. Столбец "Имя" - tbldata.name с построением дерева по tbldata.parent
2. Столбец "Email" - tbldata.email с проверкой на валидность
3. Столбец "Часы" - tbldata.value
4. Столбец "Сумма часов с подчиненными" - сумма собственного tbldata.value и всех подчиненных строк
5. По клику справа выводятся поля tbldata.name и tbldata.text
Приложенные файлы:
example.png — пример результата работы
dump.sql — SQL дамп базы данных
вот приложенный пример результата работы:

Вот как я его решил:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<?
//загрузка данных из базы в массив
function &load(){
$hostname = 'localhost';
$username = 'root';
$password = '';
$db = mysql_connect($hostname, $username, $password);
mysql_select_db('test');
$query = 'SELECT * FROM `tbldata`';
$result = mysql_query($query);
$arr = array();
while($row = mysql_fetch_assoc($result)){
$arr[$row['id']] = $row;
}
return $arr;
}
//проверка валидности емайла
function is_email($mail) {
return preg_match("/^(([a-zA-Z0-9_-])+\@([a-zA-Z0-9-])+(\.([a-zA-Z])+)+)?$/", $mail);
}
//печать талицы данных
function table(&$arr){
print '<table style="float: left;">';
view($arr);
print '</table>';
if(isset($_GET['id'])){
print '<b>'.$arr[$_GET['id']]['name'].'</b>';
print '<div>'.$arr[$_GET['id']]['text'].'</div>';
}
}
//печать отдельной строки для таблицы
function view(&$arr, $par = 0, $lev = 0){
foreach($arr as $id => &$obj){
if($obj['parent'] == $par){
print '<tr>';
//name + ссылка для вывода названия и текста справа
print '<td><a href="?id='.$id.'">';
for($l = 0; $l != $lev; ++$l) print "    "; print $obj['name'];
print '</a></td>';
//email
if(is_email($obj['email'])){
print '<td>';
print $obj['email'];
print '</td>';
}else{
print '<td style="color: red;">';
print '(incorrected!) '.$obj['email'];
print '</td>';
}
//value
print '<td>';
print $obj['value'];
print '</td>';
//summ
print '<td>';
print summ($arr, $obj['id']);
print '</td>';
print '</tr>';
view($arr, $obj['id'], $lev+1);
}
}
}
//подсчет суммы объекта и дочерних объектов
function summ($arr, $id){
$sum = $arr[$id]['value'];
foreach($arr as $k => &$obj){
if($obj['parent'] == $id){
$sum += summ($arr, $obj['id']);
}
}
return $sum;
}
//загрузка
$arr = load();
//вывод на экран
table($arr);
?>
</body>
</html>