| Проходил я недавно тестирование на вакансию PHP программиста и, естественно, провалил этот тест,
т.к. уровень программирования у меня невысокий. Мне интересно знать мнение профессионалов
где я ошибся и как нужно было сделать правильно.
Итак.
Исходное задание:
Дано:
форма с тремя полями:
"Обращение" - список с двумя элементами: "мистер" и "миссис".
"Имя" - текстовое поле для ввода имени человека
"Возраст" - radiobuttons: "от 0 до 25", "от 25 до 55", от "55 до 100".
Необходимо реализовать скрипт, который помещается в одном php файле отображающий данную форму,
принимающий данные от пользователи, обрабатывающий их и выводящий результат на экран. Обработка
заключается в следующем:
Если "возраст" от "0 до 25" и "Обращение" "мистер", то выводится "[Имя] - мальчик". Если "Обращение"
"миссис" - то "[Имя] - девочка"
По аналогии для каждого возраста:
"[Имя] - мужчина\женщина"
"[Имя] - дедушка\бабушка"
Написать один запрос к БД (host: local; name: bd_one; login: bg_login; password: bd_pass) на языке SQL,
которая по введенному имени (FirstName) выбрала из двух таблиц:
Имя "tbName" поля : Name_id, FirstName, LastName, Phone_id
Имя "tbPhone" поля : Phone_id, PhoneNumber
следующие данные: LastName, PhoneNumber. По условиям задачи, не все люди имеют телефон. В случае
отсутствия телефона, вывести LastName, а в поле PhoneNumber - любое значение.
В скрипте предусмотреть "защиту от дурака", защиту от ввода без заполнения всех полей и простейшие
методы защиты от "хакеров". Защита может реализовываться как на клиенте, так и на сервере.
Скрипт должен быть написан так, чтобы при выкладываении его на сервер с реально существующей БД, он
заработал бы без дополнительных настроек.
Также укажите, сколько реально времени вы затратили на выполнение
теста.
|
А дальше то, что я наваял.
Вот файл, который создает таблицы для тестирования и заполняет их данными.
<?php
$server="local";
$user="bg_login";
$passwd="bd_pass";
$db="bd_one";
if(!mysql_connect($server,$user,$passwd))
{
echo "ERROR";
exit;
}
mysql_select_db($db);
// предварительное удаление существующих таблиц
$query="drop table if exists tbName";
if($result=mysql_query($query)) echo "<br>Таблица tbName удалена.<br>";
else echo "<br><font color=red><b>Ошибка удаления таблицы tbName.</b></font><br>";
$query="drop table if exists tbPhone";
if($result=mysql_query($query)) echo "<br>Таблица tbPhone удалена.<br>";
else echo "<br><font color=red><b>Ошибка удаления таблицы tbPhone.</b></font><br>";
// создаем таблицы
$query="create table tbName (
Name_id int unsigned not null auto_increment,
FirstName char(30) not null,
LastName char(30) not null,
Phone_id int not null,
primary key (Name_id)
)";
if($result=mysql_query($query)) echo "<br>Таблица tbName успешно создана.<br>";
else echo "<br><font color=red><b>Ошибка создания таблицы tbName.</b></font><br>";
$query="create table tbPhone (
id int unsigned not null auto_increment,
Phone_id int,
PhoneNumber char(15) not null,
primary key (id)
)";
if($result=mysql_query($query)) echo "<br>Таблица tbPhone успешно создана.<br>";
else echo "<br><font color=red><b>Ошибка создания таблицы tbPhone.</b></font><br>";
// загружаем данные
$query="insert into tbName (Name_id, FirstName, LastName, Phone_id) values (null, 'aaa', 'aaaaa', '1'), (null, 'bbb', 'bbbbb', '2'), (null, 'ccc', 'ccccc', '3')";
if($result=mysql_query($query)) echo "<br>Начальные данные в таблицу tbName успешно загружены.<br>";
else echo "<br><font color=red><b>Ошибка загрузки начальных данных в таблицу tbName.</b></font><br>";
$query="insert into tbPhone (id, Phone_id, PhoneNumber) values (null, '1', '11111'), (null, '2', '22222')";
if($result=mysql_query($query)) echo "<br>Начальные данные в таблицу tbPhone успешно загружены.<br>";
else echo "<br><font color=red><b>Ошибка загрузки начальных данных в таблицу tbPhone.</b></font><br>";
?>
|
Код для работы с формой.
<?php
echo "<form action='test.php' method='post'>
Обращение
<select name=field1 size=1>
<option value=1>Мистер</option>
<option value=2>Миссис</option>
</select><br>
Имя
<input type=text name=name><br>
Возраст<br>
<input type=radio name=age value=1> от 0 до 25 <br>
<input type=radio name=age value=2> от 25 до 55 <br>
<input type=radio name=age value=3> от 55 до 100 <br>
<input type=hidden name=flag value=1>
<input type=submit value=применить>
</form><br><br>";
if(isset($_POST['field1']) and isset($_POST['name']) and isset($_POST['age']))
{
$out=$_POST['name'];
if($_POST['age']==1)
{
if($_POST['field1']==1) $out.=" - мальчик";
if($_POST['field1']==2) $out.=" - девочка";
}
if($_POST['age']==2)
{
if($_POST['field1']==1) $out.=" - мужчина";
if($_POST['field1']==2) $out.=" - женщина";
}
if($_POST['age']==3)
{
if($_POST['field1']==1) $out.=" - дедушка";
if($_POST['field1']==2) $out.=" - бабушка";
}
echo "$out";
}
else echo "Не заполнены поля ввода данных.";
?>
|
Код для работы с базой данных.
<?php
$server="local";
$user="bg_login";
$passwd="bd_pass";
$db="bd_one";
$FirstName="Somebody";
if(!mysql_connect($server,$user,$passwd))
{
echo "ERROR";
exit;
}
mysql_select_db($db);
$query="select LastName,Phone_id from tbName where FirstName='$FirstName'";
$r1=mysql_query($query);
for($i=1;$i<=mysql_num_rows($r1);$i++)
{
$f1=mysql_fetch_array($r1);
echo $f1[LastName];
echo " - ";
$query="select PhoneNumber from tbPhone where Phone_id='$f1[Phone_id]'";
$r2=mysql_query($query);
$NumPhones=mysql_num_rows($r2);
if($NumPhones)
for($j=1;$j<=$NumPhones;$j++)
{
$f2=mysql_fetch_array($r2);
echo $f2[PhoneNumber];
echo ",";
}
else echo "12345";
echo "<br>";
}
?>
|
| |