Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) [1] 2 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Тестовое задание, Наставьте на путь истинный...
macheninarctica  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 8
Пользователь №: 42182
На форуме: 1 год, 1 месяц, 15 дней
Карма:




Пробую устроится на работу.. дали такое задание
Ничего не ответили, прокомментируйте, укажите ошибки. А то сижу прогаю, все работает.. но этого мало.. хочется наставления специалистов.. где ти какие ошибки, где можно сделать лучше..

Язык реализации:
PHP5
Итоговое кол-во файлов:
3 (config.php, mysql.php, test.php)
Задача:
Написать класс работы с MySQL с отдельными функциями подключения к MySQL-
серверу, выбора БД, выполнения запроса. В файле log.txt должен вестись лог запросов и
ошибок.
Детали реализации:
config.php – конфигурационный файл. В нем в массив $GLOBALS заносятся параметры
подключения (хост, логин, пароль) и имя БД.
mysql.php – собственно, класс работы с БД. 3 функции:
 подключение (в случае неудачи запись в лог – log.txt - информации об ошибке);
 выполнение запроса (с записью в лог информации о запросе – дата, время,
текст и наличии ошибок, если они произошли);
 запись в лог (собственно, запись в log.txt в режиме добавления – “a”).
test.php – тестовый скрипт выполнения какого-нибудь запроса.
Очень желательно комментирование (описание функций и значимых функциональных
блоков)

Вот что я сделал

config.php
$host='proactivity';
$login='root';
$password='';
$db_name='proactivity';
$filename='log.txt';
?>




mysql.php
<?php 

/**
* Class for work with DB
*/

class DataBaseSelector extends Mysqli
{
// Private variable with adress file for write
private $filename;

// Function construct, which called when object of the class create.
//The function create connecting for db and write to log.txt error whith code and description if conection's error.

function __construct($host, $login, $password, $db_name, $filename){
$this->filename = $filename;
$this->host = $host;
$this->login = $login;
$this->password = $password;
$this->db_name = $db_name;
}
// Function connect to database
public function connect_db(){
parent::__construct($this->host, $this->login, $this->password, $this->db_name);

if ($this->connect_errno) {
$this->write('Error connect: ' . $this->connect_errno." - " . $this->connect_error);
die('Error connect: ' . $this->connect_errno." - " . $this->connect_error );
}
}


// Function select the database if database exist or leaves previous
private function db_select($db_name){
if($this->ping()){
$this->select_db($db_name);
return 1;
}
else return 0;
}

//The Function selection send query to database and get array with result of selection. And write date, time, query (and error if was error) to log.txt
public function db_request($query, $db_name){
if ($this->db_select($db_name)) {
$query = mysql_escape_string($query);
if($result = $this->query($query)){
while ($row = $result->fetch_assoc()) {
$arr[]=$row;
}
$result->close();
$this->write(date('d.m.Y H:i:s')." / ".$query);
return $arr;
}
else $this->write(date('d.m.Y H:i:s')." / ".$query." / Error select: ".$this->errno." - " . $this->error);
}
}


//The private function which realize write to file
private function write($massege){
if ($file = fopen($this->filename,"a")) {
fwrite($file,$massege."\r\n");
fclose($file);
}
else return "File didn't open and didn't create";
}
}



?>


test.php

<?php
include_once('config.php');
include_once('mysql.php');

//Create DataBaseSelector' object and connecting to database
$user = new DataBaseSelector($host, $login, $password, $db_name,$filename);

//Connect to database
$user->connect_db();

// Create table in database for test
/*$user->db_request("CREATE TABLE IF NOT EXISTS 'users' ('id' int(11) NOT NULL,'login' varchar(200) NOT NULL,'password' varchar(200)NOT NULL,PRIMARY KEY ('id')) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO 'users' ('id', 'login', 'password') VALUES (1, 'admin', '12345'),(2, 'user', '223232'),(3, 'guest', '312312');)",$db_name);*/

// Get and print to page reault of query

echo "<pre>";
print_r($user->db_request("SELECT * FROM users",$db_name)) ;
echo "</pre>";
?>


Это сообщение отредактировал macheninarctica - 23.03.2016 - 14:38
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
[x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1702
Пользователь №: 16955
На форуме: 7 лет, 10 месяцев, 22 дня
Карма: 96




Цитата
// Private variable with adress file for write

Цитата
// Function select the database if database exist or leaves previous

Цитата

Function construct, which called when object of the class create.

Цитата
//The function create connecting for db and write to log.txt error whith code and description if conection's error.

Цитата
//Create DataBaseSelector' object and connecting to database

Цитата
//The private function which realize write to file

Цитата
// Get and print to page reault of query

Цитата
//The Function selection send query to database and get array with result of selection. And write date, time, query (and error if was error) to log.txt


Практический каждый комментарий содержит в себе грамматические ошибки и правильность построение предложения в английском языке

Это отпугивает и дает понять о уровне программиста.Я бы вообще после этого не читал бы Ваш код.

Вызов выглядит каким-то бредом.

$user = new DataBaseSelector($host, $login, $password, $db_name,$filename);

//Connect to database
$user->connect_db();


$host='proactivity';
$login='root';
$password='';
$db_name='proactivity';
$filename='log.txt';


Используем DEFINE

die('Error connect: ' . $this->connect_errno." - " . $this->connect_error );


Используем Exceptions

Код грязный и это отпугнет.Уровень виден сразу.
Используйте стандарты в стили написания кода.

Не вижу смысла комментировать больше Ваше участки кода.

Я бы вообще все переписал бы. ;)


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dezigo  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Indiana Jones
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1002
Пользователь №: 5429
На форуме: 8 лет, 6 месяцев, 24 дня
Карма: 46




1) Класс должен кидать исключение, а не подавлять ошибки
2) db_request() - то ли возвращает массив, а если ошибка то возврата вообще нету
3) write() - не должен возврошать, так как - это переводиться - писать.
4) db_select() можно упростить без 1 и 0 и одним if
5) die() не используй.
6) нету dockblocks
7)название переменной объекта $user, который не соответствует названию соединения.
8) ошибка в названии - $massege
9) используй sprintf для
date('d.m.Y H:i:s')." / ".$query." / Error select: ".$this->errno." - " . $this->error
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 10 месяцев, 3 дня
Карма: 2




1. Не используйте $GLOBALS - забудьте про его существование. В конфиге сделайте примерно так:
return ['host' => 'localhost', 'dbuser' => 'dbuser'];

2. Файл конфига подключайте в конструкторе DataBaseSelector. А лучше, сделайте отдельные классы, которые будут отвечать за чтение и парсинг конфигурации и само подключение, а DataBaseSelector только для запросов.
3. Сделайте отдельный класс логирования.
4. Вместо include используйте require.
5. Не надо расширять класс Mysqli. Для работы с БД есть встроенные функции, такие как mysqli_init() и пр. К тому же класс называется mysqli, а не Mysqli.
А также подумайте, что у вас произойдет в случае ошибки в SQL-запросе


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dezigo  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Indiana Jones
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1002
Пользователь №: 5429
На форуме: 8 лет, 6 месяцев, 24 дня
Карма: 46




Цитата (DragonNoir @ 23.03.2016 - 11:07)
1. Не используйте $GLOBALS - забудьте про его существование. В конфиге сделайте примерно так:
return ['host' => 'localhost', 'dbuser' => 'dbuser'];

2. Файл конфига подключайте в конструкторе DataBaseSelector. А лучше, сделайте отдельные классы, которые будут отвечать за чтение и парсинг конфигурации и само подключение, а DataBaseSelector только для запросов.
3. Сделайте отдельный класс логирования.
4. Вместо include используйте require.
5. Не надо расширять класс Mysqli. Для работы с БД есть встроенные функции, такие как mysqli_init() и пр. К тому же класс называется mysqli, а не Mysqli.
А также подумайте, что у вас произойдет в случае ошибки в SQL-запросе

У него в задании написанно

Цитата
mysql.php – собственно, класс работы с БД. 3 функции:
 подключение (в случае неудачи запись в лог – log.txt - информации об ошибке);
 выполнение запроса (с записью в лог информации о запросе – дата, время,
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1847
Пользователь №: 38654
На форуме: 3 года, 15 дней
Карма: 40




Задание убого

Цитата (macheninarctica @ 23.03.2016 - 14:27)
прокомментируйте, укажите ошибки.

Твоя ошибка - это то, что ты пытаешься устроиться в эту контору.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 10 месяцев, 3 дня
Карма: 2




Цитата (Dezigo @ 23.03.2016 - 15:12)
У него в задании написанно

Я подумал, что это уже пояснения самого ТС о деталях реализации. Но даже если это и в задании написано, то не стоит этого делать. Кроме того, тестовое задание дается не только для того, чтобы увидеть знания языка, но также это позволяет понять обдумывает человек задание или нет. Если в задании написано делать неправильно, то надо сделать правильно и объяснить почему так, а не иначе.


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15772
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 15 дней
Карма: 299

Трезвый :
6 лет, 24 дня


Вот яркий пример вреда самой идеи тестовых заданий. Если интервьюером был бы любой из отисавшихся, ТС скрее всего не попал бы на работу. А все потому, что этот код не похож на тот, который пишут они. А они, естественно, пишут самый лучший и продвинутый код. :)

Придрались к разным мелочам, которые легко исправляются в процессе ассимиляции. А грубых ошибок, на которые реально стоило указать, никто не заметил.

$query = mysql_escape_string($query);
Эта строчка вызовет ошибку уровня Deprecated в актуальных версиях PHP. И вообще она тут из другой оперы совсем. Но не это даже главное. Ты пытаешься заэскейпить весь запрос. А этого делать нельзя, ибо экранированы будут и служебные символы. Экранировать нужно только данные, и желательно только строковые литералы. И вообще, у mysqli_ есть для этого свои инструменты.

И еще одна довольно нехорошая ошибка:
			if ($file = fopen($this->filename,"a")) {
fwrite($file,$massege."\r\n");
fclose($file);
}

Ты не лочишь файл, а это грозит совместным доступом. И вообще для этого лучше использовать file_put_contents()

Всё остальное, что вызвало такую бурю негодования - мелочь и пыль. Кто не согласен, могу обосновать по пунктам.

Так что тесты - отстой. Рулит собеседование.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 10 месяцев, 3 дня
Карма: 2




Цитата (DragonNoir @ 23.03.2016 - 15:59)
Вот яркий пример вреда самой идеи тестовых заданий


Не согласен. Если ТЗ преследует конкретные цели, а не так "для форсу", то по его выполнению уже можно судить как минимум о знаниях, навыках и аккуратности претендента. Согласитесь, что если вы ищите мидла или синьора, а вам пришлют такой код, то и тратить время на собеседование не стоит.

Цитата (twin @ 23.03.2016 - 17:37)
ТС скрее всего не попал бы на работу


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


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15772
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 15 дней
Карма: 299

Трезвый :
6 лет, 24 дня


Цитата (DragonNoir @ 23.03.2016 - 14:33)
Согласитесь, что если вы ищите мидла или синьора, а вам пришлют такой код, то и тратить время на собеседование не стоит.
А ТС не говорил об уровне вакансии. Может он реально претендует на юниора, а его уже натыкали носом в грамматику английского языка, архитектуру, эксепшены и прочие мелочи. Которые, кстати говоря, у каждой конторы свои. И поправить стиль, названия и прочая, это дело не сложное. И не важное.

Кроме того, судя по заданию, уровень самой конторы весьма не высок. И может в ней он сеньёром станет. smile.gif

А воспользоваться вашими советами невозможно. Ибо каждый советует по своему, у каждого своё видение кода. Ровно как и у интервбюера, который тоже может придраться к include ( я так и не понял чего ради), но не заметить грубых ошибок.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 5 месяцев, 5 дней
Карма: 13




Мне кажется стоит делать два варианта. Один по их требованиям, второй, более верный по своему мнению.
Ибо никому не понравиться, если задание выполнено не так как требуют, ведь преследуются какие то свои цели (возможно).
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1847
Пользователь №: 38654
На форуме: 3 года, 15 дней
Карма: 40




Цитата (twin @ 23.03.2016 - 18:44)
Кроме того, судя по заданию, уровень самой конторы весьма не высок. И может в ней он сеньёром станет.

Лол, станет сеньёром-говнокодером laugh.gif Я это к чему, надо устраивать туда где твои навыки прокачают, иначе лучше идити на кассу в макдоналдсе.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1702
Пользователь №: 16955
На форуме: 7 лет, 10 месяцев, 22 дня
Карма: 96




Цитата
Может он реально претендует на юниора, а его уже натыкали носом в грамматику английского языка...


Вы же пришли работать программистом,а не на кассу в магазин.

Лучше вообще ничего не писать чем писать с ошибками и построениями предложения,а то комментарии просто взрывают мозг laugh.gif

Цитата
//The function create connecting for db and write to log.txt error whith code and description if conection's error.


Одним словом - набор букв.

Это показыает что "программист", очень низкого ранга и плохо учился в школе.


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 10 месяцев, 3 дня
Карма: 2




В ТЗ есть требование логировать ошибки. Как вы без эксепшена отловите ошибку на стороне мускуля, например, в случае неправильного запроса?
Архитектура. Какой тогда вообще смысл использовать классы, если не понимаешь их назначения?

Цитата (twin @ 23.03.2016 - 18:44)
может придраться к include ( я так и не понял чего ради)

Т.е. вы не знаете разницы между include и require? Первый в случае ошибки в подключаемом файле выдаст notice и скрипт продолжит работу, а второй выкидывает fatal


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15772
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 15 дней
Карма: 299

Трезвый :
6 лет, 24 дня


Цитата (Oyeme @ 23.03.2016 - 14:58)
Вы же пришли работать программистом,а не на кассу в магазин.

Ну он же не в Англии. smile.gif Вообще английский язык есть нескольких типов. Тебе ли не знать. Международный английский первым принципом имеет понятность, а не лингвистическую изысканность. Эта фраза:
Цитата (Oyeme @ 23.03.2016 - 14:58)
The function create connecting for db and write to log.txt error whith code and description if conection's error.

вполне понятна. И этого достаточно для работы в Российских компаниях. Да и дело это наживное.

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


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) [1] 2 3  Ответ в темуСоздание новой темыСоздание опроса