Софтуерно Инженерство
Loading...
LenaB avatar LenaB 112 Точки

[Homework] Fast Track PHP/MySQL

Отварям тема за домашните за курса. Ще слагам линкове към темите за обсъждане на различните домашни.

Понеже съм онлайн и току-що гледах първата лекция (доста приятно поднесена от лектора) може ли някой от присъствалите да уточни трябва ли да се праща някакъв файл за първата лекция (Въведение в XAMPP – PHP MySQL уеб програмиране)?

В профила ми излиза поле за изпращане на файл, но след преглед на задачите не виждам нищо за изпращане.

Тагове:
17
PHP Web Development Basics
neda.v.veleva avatar neda.v.veleva 4 Точки

Здравейте, колеги. Въпреки, че срока за предаване на домашното за Работа с форми всеоще се боря с един проблем. Качвем кода на целия проект, за да можете да се запознаете с идеята. Идеята беше да е ООП и затова е малко мацаница, но да кажем, че това в момента не  ми е толкова голям проблем. Ето кода. Та проблема е, че нещо не мога да се преборя с UPDATE на данни от базата /файл - friends_list.php/. Имам бутон edit, който взима id-то на избрания от нас човек, на който ще променяме данните. Правим SELECT, за да вземем всички данни на въпросния човек и да попълним формата с неговите данни...До тук добре и тук нещо не ми се получават нещата. Някъде тук нещо бъркам. Идеята ми е като се submit-не формата да се направи UPDATE и толкова. Опитах какво ли не, но не се получава. Исках и да мога да използвам една и съща форма и за запис и за редакция, но тогава пък от всякъде се разпищява за несъществуващи променливи. Много ще съм благодарна ако някой може да ми помогне. 

0
RoYaL avatar RoYaL SoftUni Team Trainer 6796 Точки

Здравей, пиша от телефона, така че има голям шанс да съм недогледал нещо. Разгледах кода ти, и продължавам да поддържам мнението, че не трябва да имаш стотици ифове в една страница,  още повече пък нестнати. Кийп ит симпъл. Условието ти Иф Пост е нестнато в условието Иф Гет Едит > 0, а екшъна на формата не добавя този гет параметър ?едит=1. Или го добави в екшъна или изкарай проверката, защото иначе няма как да влезеш в нея.

Това поне е основата на проблема, за който питаш.

От тук нататък ще си позволя да коментирам кода като цяло.

1. isset($var) > 0 няма да доведе до очаквания от теб резултат. Това ще евалюира експрешъна isset($var) до TRUE, което е 1 и съответно 1 > 0 ВИНАГИ. Т.е. дори и $var = 0; isset($var) ще върне true. Ако искаш да проверяваш за сетната променлива и за стойност, ще трябва на два пъти if(isset($var) && $var > 0)

2. Класът ти FormValidation:

2.1. Не би трябвало да има такова име. Името трябва да е име на обект, на съществително. Validation е процес. 

2.2. Прави прекалено много неща - прави конекция към базата, валидира формата, инсъртва, генерира HTML, етс. Нарушава SRP. 

3. HTML-а в friends_list.

3.1. Както вече споменах твърде много условия. По принцип NetBeans подчертава кодс повече от 1 нестнато условие и казва "Too many nested blocks. It's good practice to introduce a new function"

3.2. Формата - не е хубаво да мешаш РНР и HTML. Особено пък HTML-а да е в ECHO. ТАка губиш autocomplete-а на ИДЕ-то за HTML, както и четимостта. Да не говорим, че всичко е в лилаво, вместо таговете да са оцветени по един начин, атрибутите по друг и т.н.

3.3. Формата - Условията в нея. До колокто виждам според зависимост от пола генерираш различен HTML-а. Който всъщност не е много различен? Единствено ID-та и VALUE-та са MALE или FEMALE. Тогава просто можеше там където има динамичен контест да сложиш $edit_info['gender'], вместо да пишеш условия.

 

4. Цитат (вече не пиша от телефона) "Исках и да мога да използвам една и съща форма и за запис и за редакция"

- НЕ! :) Не искаш. Както казах за класа за валидацията. Нарушаваш принципа на това - едно нещо да прави ЕДНО НЕЩО :) Ако едно нещо правиш две или повече неща - значи правиш нещо грешно. Ако искаш да спестиш код - го правиш In favor of readibility. Но ако спестяваш код и същевременно readibility-то спада - значи няма нужда от това. Писането на код не е толкова expensive процес. Четенето и едитването му - обаче е. Ако едно нещо прави сто неща, то представи си колко IF-ове ще имаш за това. Ако друг трябва да ти чете кода и да оправи нещо, ще трябва да разбере точно заради кой иф, се влиза там.

Има случаи, в които кодът трябва да се пести - за да няма повтаряемост или за да се чете по-добре, но това да правиш един код да прави много неща не е сред тях.

Например, ако имаш много условия и ако едно от тях не се покрие искаш да върнеш FALSE, тогава наистина е по-добре да спестиш код вместо да пишеш много условия. (Цикъл + 1 ИФ)

2