Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Quiz, a może test?
Forum PHP.pl > Inne > Oceny
mlawnik
Witam,

Nie będę się rozpisywał:

Kod: https://github.com/marcinlawnik/Yopqs
Live demo: http://yopqs.orchestra.io/

Nie patrzcie na pytania, jestem w gimnazjum i jest to projekt na warsztaty nadobowiązkowe.

Proszę o wytykanie błędów oraz podawanie pomysłów.

Pozdrawiam,
marcinl
mat-bi
Masz problem, wpisałem, że google pochodzi od googol i coś nei dziala smile.gif

Widzę, żę korzystasz z sesji. Quiz wygląda całkiem dobrze, nie wiem, jak z kodem, zaraz przejrzę smile.gif
mlawnik
Przez jedno o mam w bazie...

Literówka wink.gif

EDIT: poprawione na googol

BTW można na przykład napisać GooGOL i też zaakceptuje, a na końcu wyświetla czas wukonania.
Planuję może tablicę wyników do tego?

bump
ciekawskiii
poziom 1
2+2*2=8 a u Ciebie to zly wynik:P
Spawnm
@ciekawskiii - kpisz ? snitch.gif

$db_username = 'user_45b9cf5d';
$db_password =

Zakładam że to przykład a nie prawdzie dane wink.gif

Wolno działa, trochę masz chaos w kodzie.
wiewiorek
ciekawskiii no bo 8 to zły wynik - kolejnosc dzialan sie klania tongue.gif biggrin.gif
mlawnik
@spawnm, poczytaj, co to orchestra.io, po 2, jak znajdziesz jakiś sposób na obejście tego, że muszę tam to dawać, to powiedz.

A po 3, jak mi ktoś rozwali bazę, to mam dumpa i tyle.

Pozdrawiam,
mlawnik

BTW, miała być dyskusja o skrypcie, nie o odpowiedziach.
A ktoś może przeszedł cały?

I jeszcze spawnm, co powoduje to spowolnienie?
@rtur
ja utknąłem na 5 poziomie smile.gif
konole
Cytat(@rtur @ 10.05.2011, 05:57:35 ) *
ja utknąłem na 5 poziomie smile.gif

Wystarczyło spojrzyć na GitHuba. tongue.gif
  1. INSERT INTO `Answers` (`ID_lvl`, `Answer`) VALUES
  2. (1, '6'),
  3. (2, 'kałasznikow'),
  4. (3, 'avatar'),
  5. (4, 'gogol'),
  6. (5, 'samochodzik'),
  7. (6, '16'),
  8. (7, 'ple'),
  9. (8, 'sun zi'),
  10. (9, 'e');
mlawnik
I to właśnie jest zaleta oprogramowania o darmowym kodzie źródłowym wink.gif

Jakieś sugestie?

Bo na razie to co leży na masterze to wersja 1.0 Beta (Tak wiem, mam skopaną numerację).
I jak nie ma jakiś pomysłów, to biorę się za robienie rzeczy z TODO.
Fifi209
Prosiłeś o sugestie dotyczące kodu, a więc od początku czytam Twój kod i piszę post.

Pierwsze co mi się rzuciło w oczy po odpaleniu index.php:
  1. define('is_included', true); //protection from direct display override

Sprawdziłem, w dołączanych plikach typu config.php sprawdzasz tą stałą.

Znacznie prościej i bez obciążeń dla parsera PHP jest blokować poprzez .htaccess

-------

Rzuciłem się na plik z językami, teoretycznie ok ale kodowanie tych plików?!
Cytat
ź zła, spróbuj


Wrzuć na wszystkie pliki kodowanie UTF-8 bez BOM i zapisz to normalnie.

-------

Nadszedł czas na config.php tutaj powinieneś użyć jak na moje oko wzorca o nazwie Registry i sobie w nim trzymać te informacje, będziesz miał dostępne globalnie i unikniesz w index.php czegoś takiego:
  1. $quiz_name = $CONF['quiz_name'];
  2. $main_page = $LANG['mainpageuppercase'];
  3. $start_quiz = $LANG['startquiz'];
  4. $start_content = $CONF['start_content'];
  5. $welcome_text = $LANG['welcomequizpage'];
  6. $link1 = $CONF['link1'];
  7. $link1_name = $CONF['link1_name'];
  8. $link2 = $CONF['link2'];
  9. $link2_name = $CONF['link2_name'];


-------

Teraz quiz.php - na początku rzuca się w oczy, że ob_start nie jest na początku skryptu, najpierw wysyłasz nagłówki o typie, kodowaniu, ciasteczka sesji a potem dopiero włączasz buforowanie - coś nie tak... Co ciekawe, wydaje mi się że włączyłeś je tylko z powodu include, bo zaraz po nim jest end_flush.

-------

W quiz.php używasz funkcji o nazwie: getnamefile()
Nie pasuje mi jej nazwa, bo o ile dobrze pamiętam przyjął się taki zapis: getNameFile()
Zapis dotyczy się wszystkich tak zapisanych nazw funkcji.
Poza tym, zwracasz coś takiego:
  1. return "$PHP_SELF";

Nie wiem po co jest to ujęte w cudzysłów.

-------

checkanswer - nie prościej po prostu użyć in_array?

-------

getmaxlevel - robisz tam coś takiego:
  1. return("$LANG[db_query_error]");
  2. error_log("$LANG[db_query_error]\r\n", 3, "log/db.log");

Po pierwsze, cudzysłów, po drugie używaj return tak jak wszędzie (bez nawiasów, bądź konsekwentny)
Nie wiem czy wiesz, error_log nie ma prawa się wykonać - funkcja już zwróciła wartość - co oznacza koniec jej wykonania, również późniejszy exit się nie wykona.

--------

backup bazy danych - pominę tą kwestię, od tego jest cron

--------

Po przewinięciu quiz.php dalej mogę uznać że masowo robisz:
  1. echo "$zmienna"
  2. // lub
  3. return "$zmienna"

To jest niedopuszczalne i karygodne w dobrym kodzie.

--------

Używasz bb-code, szablonów dlatego nie zostawisz mysql_ na rzecz PDO?

--------

footer powinien być częścią szablonu - jak dla mnie jest niezmienny.
ciekawskiii
nie, nie kpie, 2+2*2 jest 8 a prawidlowy zapis powinien wygladac tak 2+(2*2)
mat-bi
Podstawy matematyki się kłaniają - kolejność działań

2 + 2*2 = 6
(2+2)*2 = 8
Fifi209
Potęgowanie, mnożenie, dodawanie

Wszystko jasne?
ciekawskiii
ja wiem jaka jest kolejnosc dzialan, nie musisz mnie uczyc.
Chodzi o sam zapis, tak jak podalem wyzej
Fifi209
To też Ci do głowy biją, że najpierw mnożenie potem dodawanie, zapis jest poprawny.
mat-bi
Hmm, a mi się zawsze wydawało, że żeby być informatykiem, trzeba znac chociaż podstawową matmę, a tu...

Co do kodu, ja przeglądałem i dla mnie jest tam balagan niezły.
Fifi209
Cytat(mat-bi @ 10.05.2011, 17:16:42 ) *
Co do kodu, ja przeglądałem i dla mnie jest tam balagan niezły.

Ja swoje uwagi dałem, jakie są Twoje? Skoro twierdzisz, że jest niezły bałagan to poprzyj to argumentami, których wcześniej nie było.
mat-bi
Główny zarzut ode mnie to nieporządek w kodzie, tzw. spaghetti code - po prostu zaczyna mi się podobac idea MVC, pomimo tego, co znią rameworki wyczyniają, dobrze zastosowana sprawia, że kod jest czytelny.

Ja także przynajmniej od siebie wolę jeden punkt wejściowy - większa kontrola.
Daiquiri
Dalsze wymiany zdań na temat czyjegoś poziomu matematyki i reszty nie związanej z tematem proszę przenieść na PW.
mlawnik
No dobra, zająłem się przerobieniem obszernej listy błędów @fifi209

1. define zamieniony na .htaccess
2. kodowanie poprawione
3. No tu doszedłem do pewnego problemu. W internecie znalazłem co to Registry i jak funkcjonuje, ale kawałków kodu mało...
Możliwe, że użyję zmiennych globalnych, ale to już jest temat na dłuższe przemyślenia. Założę osobny temat na to.
4. ob_start przeniesione na sam początek, a ob_end_flush po wszystkich includach. Wrzuciłem to tam, bo wyczytałem, że to poprawia w jakiś sposób bezpieczeństwo. Czy nowe użycje jest lepsze?
5. poprawione, to jeszcze kwiatek z tych czasów
6. poczytałem komentarze w manualu pod in_array, i wybrałem taką opcje:
  1. function checkanswer($array, $passwd_given) {
  2. if (!IsSet($passwd_given)) {
  3. return false;
  4. } else {
  5. $passwd_given = mb_strtolower($passwd_given, 'UTF-8');
  6. if(isset($array[$passwd_given])){
  7. return true;
  8. }
  9. }
  10. return false;
  11. }

Ale nie działa, poprawicie?
Na razie wrzuciłem starą.
7. poprawione wg. sugestii
8. questionmark.gif chodzi o db_dump.sql? czy o funkcję backup_tables? Podzieliłem na dwa osobne pliki db_dump.sql
9. Poprawiłem, zobaczę, czy nie można więcej.
10. Idea dobra, tylko trochę się z tym pomęczę. Można link do sprawdzonego tutoriala, ew. tytuł książki?
11. Jak przerobie wyświetlanie pytań pod szablon, od razu przeniosę.

http://yopqsoptimized.orchestra.io/

Odkryłem, że spowolnienie powoduje funkcja checkanswer.
Pomożecie mi ją zoptymalizować? tzn poprawić ten kod co podałem?
Fifi209
Cytat(mlawnik @ 10.05.2011, 21:07:38 ) *
3. No tu doszedłem do pewnego problemu. W internecie znalazłem co to Registry i jak funkcjonuje, ale kawałków kodu mało...
Możliwe, że użyję zmiennych globalnych, ale to już jest temat na dłuższe przemyślenia. Założę osobny temat na to.

Proszę, nie psuj swojego kodu zmiennymi globalnymi. Co do samego wzorca registry polecam poszukać na zagranicznych stronach
Cytat(mlawnik @ 10.05.2011, 21:07:38 ) *
4. ob_start przeniesione na sam początek, a ob_end_flush po wszystkich includach.

Wrzuć ob_end_flush na koniec skryptu

Cytat(mlawnik @ 10.05.2011, 21:07:38 ) *
6. poczytałem komentarze w manualu pod in_array, i wybrałem taką opcje:
  1. function checkanswer($array, $passwd_given) {
  2. if (!IsSet($passwd_given)) {
  3. return false;
  4. } else {
  5. $passwd_given = mb_strtolower($passwd_given, 'UTF-8');
  6. if(isset($array[$passwd_given])){
  7. return true;
  8. }
  9. }
  10. return false;
  11. }

Ale nie działa, poprawicie?
Na razie wrzuciłem starą.

Nie użyłeś tutaj nigdzie funkcji in_array wink.gif

Cytat(mlawnik @ 10.05.2011, 21:07:38 ) *
8. questionmark.gif chodzi o db_dump.sql? czy o funkcję backup_tables? Podzieliłem na dwa osobne pliki db_dump.sql

O funkcję do zrzucania bazy. Tak jak pisałem, takie sprawy przez crona.

Cytat(mlawnik @ 10.05.2011, 21:07:38 ) *
10. Idea dobra, tylko trochę się z tym pomęczę. Można link do sprawdzonego tutoriala, ew. tytuł książki?

Najprostszy tutorial + manual i dasz radę to ogarnąć w 2-3h o ile chłoniesz szybko wiedzę jak ja.
mlawnik
ob_end _flush przemieszczone wink.gif

Poczytaj sobie komentarze o porównaniu szybkości funkcji porównujących tablice w manualu pod in_array.
Oto dlaczego zdecydowałem się na takie rozwiązanie.

Funkcja wywalona, była używana w panelu admina, który wyleciał, bo napisałem go tak, że nie mogłem na niego patrzeć...

thx4all & lukin' 4 more,
mlawnik

-----------------------

Update, wersja 1.1

https://github.com/marcinlawnik/Yopqs

Chodziło tak wolno przez chmurę orchestry. Mają tak obciążone serwery, że na 000webhost.com lepiej chodzi.

Nowe, szybkie demo:
http://5a.hostei.com/

EDIT: Kurczę, co jest? Ktoś ma pomysł, dlaczego mi style nie działaję?Na orchestrze działały, a jak wszedłem na 000webhost to 404 Not Found? Wszystko jest wgrane, sprawdziłem sumą MD5.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.