[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Корзина
macheninarctica
Недавно пытался устроится на работу.. дали такую задачу. найти не менее 10 ошибок в следующем коде.
Провалил. хотя 10 ошибок нашел.

Но очень хочу узнать где ошибки.
Какие тут ошибки?

user posted image
Игорь_Vasinsky
какие ошибки нашёл хитрюга?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
macheninarctica
Я не хетрюга.. просто недавно только курсы прошел.. и вот учусь
1) Строка 7: массив записывается как $GLOBALS (без нижнего подчеркивания);
2) Строка 12: в конце не хватает “;” ;
3) Вероятнее всего, при переполнении корзины следует запретить пользователю добавлять новый
предмет, следовательно, имеет смысл использовать конструкцию
else { $total=0;
……
print “<h1>….</h1>”} ;
4) Строка 17: $total- это массив, как я понял, который получает все идентификаторы предметов,
содержащиеся в “корзине”, в таком случае, следует записать $total[] = $item, иначе он их просто
просуммирует;
5) Строка 17: в конце не хватает “;”;
6) Строка 22: Следует писать в запросе INSERT INTO…;
7) mysql_query является устаревшей, сейчас используется mysqli_query, но для защиты от SQL
инъекций рекомендуется использовать подготовленные запросы (mysqli::prepare);
8) Строка 23: вместо $this->basket-> basket_id следует писать $basket-> basket_id;
9) Строка 23: не поставлены кавычки $_GET[‘item_title’];
10) Строка 27: переменная $item не является объектом она инициализируется в строке 5 и
принимает, я полагаю, значение идентификатора предмета. В данном случае, следует подставить
переменную $_GET[‘item_title’].
icedfox
macheninarctica
Досконально не смотрел, вот что вижу:
стр 9 : $basket - получает значение из глобальной переменной (стр 7), и по сути не будет объектом(классом), хотя к нему идет обращение именно так. По крайней мере я бы так делать не стал. Допускаю , что такое использование возможно, пусть наши комрады глянут.
стр 10 : не вижу прерывание работы кода, вроде как ошибка.
стр 17 : нет проверки для $item, строка, число массив или чего это ? Интуитивно ясно, что получаем количество товаров, кроме проверок на массив оборачиваем в intval($item)
стр 20 : Нет проверки на наличие значений в Сессии перед записью, но не обязательно.
стр 22 : Не понятный SQL запрос, данные для запроса берутся не известно откуда. Первый параметр берет данные, которые туда никто не ложил, третий параметр предположим, что так и надо, но тоже не бест.
стр 5, 23 : Прямое получение данных от клиента, галимая дырень в безопасности
стр 27: $item уже перезаписан на строке 16 и такое обращение к нему вызовет ошибку.

В общем ошибок более 10 я так думаю smile.gif


inpost
macheninarctica
Цитата
4) Строка 17: $total- это массив, как я понял, который получает все идентификаторы предметов,
содержащиеся в “корзине”, в таком случае, следует записать $total[] = $item, иначе он их просто
просуммирует;


Смотрим код:
$total = 0;
foreach(...) {
$total += $item;
}

Перед тобой именно ЦЕНА, которая суммируется, а не массив. Как может быть $total = 0; массивом? Никак :)

Цитата
5) Строка 17: в конце не хватает “;”;

А 27-ая нет? В целом ";" в строчках - это одна общая ошибка.

Цитата
10) Строка 27: переменная $item не является объектом

По смыслу $item всё же объект.

Цитата
но для защиты от SQL
инъекций рекомендуется использовать подготовленные запросы (mysqli::prepare);

А я не использую prepare, мне нравится вручную проставлять приведение к типу int, либо экранировать строки. Твой абсолютизм не нравится, хотя не ошибка всё же.

___________________________

В целом очень забавная задача, напичкали ошибок столько, что можно писать их и писать.
1) Нарушен синтаксис кода, выглядит очень криво!
2) Используется $GLOBALS в методе :) Используется $_GET тоже.
3) Добавляется предмет в корзину до проверок ещё: Basket::addItem.
4) Путаница с именами Basket , именно строчка 25 не нравится, хотя не ошибка.
5) Использование mysql_query в чистом виде - гроза безопасности. Отсутствует логирование ошибок как таковых, их уведомления программиста и т.д.

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

В итоге ты увидел синтаксические ошибки, что говорит о том, что ты "начинающий программист", а вот если капнуть глубже, то принципов построения классов и приложений отсутствует, поэтому чуть выше чем "помощник юниора" уже не берут.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.