Выполнил тестовое задание, говорят недостаточно хорошо, в чем может быть дело, подскажите?

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 дамп базы данных

вот приложенный пример результата работы:
example.png

Вот как я его решил:
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 "&nbsp&nbsp&nbsp&nbsp"; 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>
 

aRpi

Новичок
они могут ожидать всего что угодно...
хотелось бы чтобы спецы взглянули и увидели в чем недостаток
 

craz

Нестандартное звание
так проще это тестовое задание зачем несколько
тогда зачем первый пост?

Зачем тебе тогда работа если я тебя спрашиваю, а у тебя свое мнение? Работай на себя если тебе так нравиться, а не подругому

почему конфиг базы хотя бы не отдельно?
 

aRpi

Новичок
ок
по той же причине,
не думал что для тестового задания это может быть важно...
 

craz

Нестандартное звание
на задание просто 1 час отводиться, а их там 2
это не повод
понимаешь это мелкий огрех который я указал, сейчас проснуться более толстые дяди и от твоего кода не останется живого места)

PHP:
//печать талицы данных
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>';    
    }
}
Про конкатенацию слышал что-нибудь?


Кстати мне вот передача по ссылкам вообще претит, особо там, где она без видимой причины используется. Зачем в этой функции не return
 

Redjik

Джедай-мастер
К твоему коду можно придраться во многих вещах, но речь не об этом.
Мне задание не понравилось - оно плохо раскрывает знания.

Возможно не стоит тебе идти к этим ребятам.
 

craz

Нестандартное звание
К твоему коду можно придраться во многих вещах, но речь не об этом.
Мне задание не понравилось - оно плохо раскрывает знания.

Возможно не стоит тебе идти к этим ребятам.
хаха) ну спасибо нашел ему оправдание) через пять лет он будет тебе ОЧЕНЬ благодарен...
 

aRpi

Новичок
"Про конкатенацию слышал что-нибудь?"
да
что не так?

"Зачем в этой функции не return"
понял
 

Redjik

Джедай-мастер
хаха) ну спасибо нашел ему оправдание) через пять лет он будет тебе ОЧЕНЬ благодарен...
ну согласись, кое какие знания у парня есть
он потратил время на то, чтобы это написать, могли бы ему в ответ - пробежаться по ошибкам
 

craz

Нестандартное звание
PHP:
function table($arr){
    $st = '<table style="float: left;">';
    view($arr);
    $st .='</table>';
    if(isset($_GET['id'])){
        $st .='<b>'.$arr[$_GET['id']]['name'].'</b>';
        $st . '<div>'.$arr[$_GET['id']]['text'].'</div>';    
    }
   return $st
}
 

craz

Нестандартное звание
ну согласись, кое какие знания у парня есть
он потратил время на то, чтобы это написать, могли бы ему в ответ - пробежаться по ошибкам
Это да! Это я сам ненавижу, но сам понимаешь это 95% компаний так же делает. Они нанимают, а не обучают, но да БЕСИТ!

Знания есть, но их надо оттачивать, он вряд ли пришел сюда чтобы его пожалели, но даже если для этого, мы то зачем человеку жизнь ломать будем? Есть косяки их надо указать.

Да и я очень часто начинаю встречать на пхпклабе такую тему, типа задание не такое, как написал ТС, какая разница какое задание? Задача поставлена? Нужно решение. Не надо пытаться быть телепатами) Это доступно очень немногим, и уж точно не тем, кто себя изначально пытается воспитывать как телепат.


Насчет кода:

func view переписать надо полностью.

ТС: про ООП слышал? В большинстве контор это нижняя планка вхождения. Подтягивай.
 

Redjik

Джедай-мастер
ну тогда до общей кучи

PHP:
if(isset($_GET['id'])){
        print '<b>'.$arr[$_GET['id']]['name'].'</b>';
        print '<div>'.$arr[$_GET['id']]['text'].'</div>';    
    }
может выкинуть undifined offset
 
  • Like
Реакции: craz

Absinthe

жожо
aRpi сразу видно:
смесь логики и верстки
& какое-то прилипло
конфиг базы внутри функции

Каждая из ошибок имхо уже причина достаточная.
 

Gas

может по одной?
aRpi
возможно ожидалось что:
1. будет как минимум 3 файла: конфиг, index.php, шаблон (а то и отдельно - template + внутренний view)
2. использован не mysql, а PDO/mysqli
3. будет работа с jquery - показ текста справа без перезагрузки страницы, вкатывать тексты в страницу json'ом или подтягивать ajax'ом
4. какое-то ООП, (хотя к этому заданию оно будет как кобыле седло, но плюс в карму скорее всего получил бы)

я бы без фреймворков за 1 час и качественно наверное и не сделал бы уже :)
 

Ragazzo

TDD interested
Такое тестовое задание я бы просто переплевался делать. ссылка. блог с двумя экшенами, а наворотили столько всего :D
 
Сверху