Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Студентам] Выборка из MySQL посредством PHP


senty

Recommended Posts

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

Выслали тестовое задание:

Дано:

есть база 10 девушек. У каждой девушки есть несколько параметров (цвет глаз, фигура, цвет волос, длина волос, увлечения). Все параметры у каждой девушки обязательно заполнены.

Возможные варианты:

цвет глаз (голубые, карие, темные, зеленые),

фигура (стройная, упитанная, плотная, толстая),

цвет волос (светлые, темные, рыжие),

длина волос (наголо, коротко, средне, длинные),

увлечения (футбол, спорт, атлетика, прогулки, книги, диско).

Задача:

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

Можно использовать, но не обязательно, что все сразу (используйте столько сколько необходимо, чтобы это было юзабилити и максимально просто технически:

html, css, php, javaScript, jQuery, MySQL, ajax

Внимательно перепроверьте на ошибки - это не допустимо!

Пожелания:

Максимальное удобство в работе за счет размеров и расположения кнопок, форм, сообщений, подсказок (оформление картинками не нужно).

Максимально простой, понятный код.

Структурность.

Я предложил решение:

<html>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<head><style type="text/css">li {list-style-type: none}ul {margin-left: 0; padding-left: 0}</style><title>Тестовое задание</title></head>
<body>
<form action="test.php" method=post>
<table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<tbody><tr><td>Цвета глаз
<ul><li><input type="radio" name="color_eye" value="Зелёные">Зелёные</li>
<li><input type="radio" name="color_eye" value="Голубые">Голубые</li>
<li><input type="radio" name="color_eye" value="Карие">Карие</li>
<li><input type="radio" name="color_eye" value="Тёмные">Тёмные</li></ul></td>
<td>Фигура
<ul><li><input type="radio" name="figure" value="стройная">Стройная</li>
<li><input type="radio" name="figure" value="упитанная">Упитанная</li>
<li><input type="radio" name="figure" value="плотная">Плотная</li>
<li><input type="radio" name="figure" value="толстая">Толстая</li></ul></td>
<td>Цвет волос
<ul><li><input type="radio" name="color_hair" value="светлые">Светлые</li>
<li><input type="radio" name="color_hair" value="тёмные">Тёмные</li>
<li><input type="radio" name="color_hair" value="рыжие">Рыжие</li></ul></td>
<td>Длина волос
<ul><li><input type="radio" name="length_hair" value="наголо">Наголо</li>
<li><input type="radio" name="length_hair" value="коротко">Коротко</li>
<li><input type="radio" name="length_hair" value="средне">Средне</li>
<li><input type="radio" name="length_hair" value="длинные">Длинные</li></ul></td>
<td>Увлечения
<ul><li><input type="radio" name="hobbies" value="футбол">Футбол</li>
<li><input type="radio" name="hobbies" value="спорт">Спорт</li>
<li><input type="radio" name="hobbies" value="атлетика">Атлетика</li>
<li><input type="radio" name="hobbies" value="прогулки">Прогулки</li>
<li><input type="radio" name="hobbies" value="книги">Книги</li>
<li><input type="radio" name="hobbies" value="диско">Диско</li>
</ul></td></tr></tbody></table>
<input type=submit name="filter" value=".."></form>
<?php
//Имя базы данных
$mysql_database="3colors_testwork";
//Имя пользователя базы данных
$mysql_username="root";
//Пароль пользователя базы данных
$mysql_password="000000";
//Сервер базы данных
$mysql_host="localhost";
//Подключение
$mysql_connect = mysql_connect($mysql_host, $mysql_username, $mysql_password);
//Выбираем базу данных для работы
mysql_select_db($mysql_database);
//Устанавливаем кодировку для соединения базы данных
mysql_query("SET NAMES utf8");
//Выборка данных из таблицы
$result=mysql_query("SELECT * FROM `girls`
WHERE `color_eye` like '".(isset($_POST['color_eye']) ? $_POST['color_eye'] : '%' )."'
AND `figure` like '".(isset($_POST['figure']) ? $_POST['figure'] : '%' )."'
AND `color_hair` like '".(isset($_POST['color_hair']) ? $_POST['color_hair'] : '%' )."'
AND `length_hair` like '".(isset($_POST['length_hair']) ? $_POST['length_hair'] : '%' )."'
AND `hobbies` like '".(isset($_POST['hobbies']) ? $_POST['hobbies'] : '%' )."'
");
//Вывод на страницу
echo '<table border="1">
<thead>
<td>Имя</td>
<td>Цвет глаз</td>
<td>Фигура</td>
<td>Цвет волос</td>
<td>Длина волос</td>
<td>Увлечение</td>
</thead>
<tbody>';
//данных помещенных в массивеse
while ($array = mysql_fetch_array($result))
{echo '<tr>
<td>'.$array['name'].'</td>
<td>'.$array['color_eye'].'</td>
<td>'.$array['figure'].'</td>
<td>'.$array['color_hair'].'</td>
<td>'.$array['length_hair'].'</td>
<td>'.$array['hobbies'].'</td>
</tr>';}
echo '</tbody></table>'?>
</body>
</html>

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

Может-быть кто-то тут такие задачи как "орехи щелкает" и подскажет в чем мои ошибки? Так сказать набудующее.

Я вообще все это себе представлял по-другому, а именно:

1. Выборка из БД всех девушек

2. Отображение таблицы с девушками

3. Фильтрация в живом режиме по выбранным параметрам, которые указаны в тэге

<input type="checkbox">

ps моё решение их не устроило =) Думал что вышлют пример решения, но увы - они сами не решали..

Надіслати
Поділитися на інших сайтах


во первых LIKE не совсем уместен тут, хотя работать и будет, во вторых вы выводите только 1 девушку, а если их больше с такими запросами?)

по поводу:

Я вообще все это себе представлял по-другому, а именно:

1. Выборка из БД всех девушек

2. Отображение таблицы с девушками

3. Фильтрация в живом режиме по выбранным параметрам, которые указаны в тэге

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

ну и выбирать лучше не по "карие", а например карие это 1, голубые 2 и тд.

Надіслати
Поділитися на інших сайтах


Ну тут несколько причин:

Как уже говорилось, LIKE здесь неуместен, как и выборка по символьным вхождениям.

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

...
<td>Увлечения
<ul><li><input type="radio" name="hobbies" value="10">Футбол</li>
<li><input type="radio" name="hobbies" value="11">Спорт</li>
<li><input type="radio" name="hobbies" value="12">Атлетика</li>
<li><input type="radio" name="hobbies" value="13">Прогулки</li>
<li><input type="radio" name="hobbies" value="14">Книги</li>
<li><input type="radio" name="hobbies" value="15">Диско</li>
</ul></td></tr></tbody></table>
...

тогда запрос выглядел бы:

SELECT * FROM `girls` WHERE ... `color_eye` = `3` AND `hobbies` = `15` ...

Второе, не следовало вставлять проверку на существование POST переменной прямо в запрос

(isset($_POST['figure']) ? $_POST['figure'] : '%' )

Это не критично, но и нежелательно.

Вполне приемлемый вариант имеет вид:

if (isset($_POST['color_hair'])) {
  $sql .= " AND `color_hair` LIKE '%" . mysql_real_escape_string($_POST['color_hair']) . "%'";
}

Третье, если уж вы решили искать по символьным выражениям, не мешало бы пропустить их через функцию mysql_real_escape_string($string), не боясь о недопустимых символах в строке.

Посему желаю не сдаваться и немного почитать про оптимизацию MySQL запросов.

P.S. Я, когда-то пытаясь устроиться, тоже получил подобное задание, неуверенность в своих знаниях отбило желание даже пытаться решить задачу, а вы, вот, попробовали, зато теперь знаете. Удачи!

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.