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

> Корзина
macheninarctica  
 ۩  Дата
Цитировать сообщение

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



Новичок
*

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




Недавно пытался устроится на работу.. дали такую задачу. найти не менее 10 ошибок в следующем коде.
Провалил. хотя 10 ошибок нашел.

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

user posted image

Это сообщение отредактировал macheninarctica - 3.12.2015 - 19:59
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

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



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26363
Пользователь №: 21350
На форуме: 7 лет, 2 месяца, 9 дней
Карма: 736




какие ошибки нашёл хитрюга?


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
macheninarctica  
 ۩  Дата
Цитировать сообщение

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



Новичок
*

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




Я не хетрюга.. просто недавно только курсы прошел.. и вот учусь
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’].
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
Дата
Цитировать сообщение

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



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

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




macheninarctica
Досконально не смотрел, вот что вижу:
стр 9 : $basket - получает значение из глобальной переменной (стр 7), и по сути не будет объектом(классом), хотя к нему идет обращение именно так. По крайней мере я бы так делать не стал. Допускаю , что такое использование возможно, пусть наши комрады глянут.
стр 10 : не вижу прерывание работы кода, вроде как ошибка.
стр 17 : нет проверки для $item, строка, число массив или чего это ? Интуитивно ясно, что получаем количество товаров, кроме проверок на массив оборачиваем в intval($item)
стр 20 : Нет проверки на наличие значений в Сессии перед записью, но не обязательно.
стр 22 : Не понятный SQL запрос, данные для запроса берутся не известно откуда. Первый параметр берет данные, которые туда никто не ложил, третий параметр предположим, что так и надо, но тоже не бест.
стр 5, 23 : Прямое получение данных от клиента, галимая дырень в безопасности
стр 27: $item уже перезаписан на строке 16 и такое обращение к нему вызовет ошибку.

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


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

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



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22919
Пользователь №: 20039
На форуме: 7 лет, 5 месяцев, 16 дней
Карма: 607




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

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

Опции темы Ответ в темуСоздание новой темыСоздание опроса