• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zakończenie działania skryptu, powtarzanie się kodu

Object Storage Arubacloud
0 głosów
1,001 wizyt
pytanie zadane 26 czerwca 2017 w PHP przez kevin Mądrala (5,010 p.)

Witam! Nie mam z bazami danych, ćwiczę prostre kody ale mam pytanie na temat zakończenia skryptu php w pewnych przypadkach, mam tutaj ktod który go przedstawia:

$db_connect = @new mysqli($db_host, $db_user, $db_password, $db_name);

if($db_connect->connect_errno != 0)
{
    $_SESSION[e_code] = 1;

    header("Location: ../index.php");
    exit();
    //echo "Error: ".$db_connect->connect_errno."<br/>Desciption: ".$db_connect->connect_error;
}
else
{
    $email = htmlentities($email, ENT_QUOTES, "UTF-8");
    $password = htmlentities($password, ENT_QUOTES, "UTF-8");
    $sql_query = sprintf("SELECT id FROM USER WHERE email='%s' AND password='%s'", mysqli_real_escape_string($db_connect, $email), mysqli_real_escape_string($db_connect, $password));
			
    if($result = @$db_connect->query($sql_query))
    {
        $user_amount = $result->num_rows;
        $user_row = $result->fetch_assoc();
        $result->free();

        if($user_amount > 0)
        {
            /*
                Wszystko OK
            */

            $db_connect->close();

            header("Location: ../nextpage.php");
            exit();
        }
        else
        {
            // Nie znalezniono w bazie

            $_SESSION[e_code] = 2;
            
            $db_connect->close();

            header("Location: ../index.php");
            exit();
        }
    }
    else
    {
        // Blad przy zapytaniu
        
        $_SESSION[e_code] = 3;

        $db_connect->close();

        header("Location: ../index.php");
        exit();
    }


    $db_connect->close();
}

Jeżeli coś zakończyło mi się niepowodzeniem i nie ma sensu wykonywać dalej skryptu to czy poprawną formą jest zastosowanie:

header("Location: ../index.php");
exit();

W środku skryptu tak jak jest wyżej pokazanie ? Jeżeli coś zakończyło mi się powodzeniem i z tego powodu chcę przejść do nowej strony to też taka forma jest poprawna ? Dużo kodu się tutaj powtarza jeżeli w kilku skryptach łączę się z bazą, czy normalną rzeczą jest opakowanie funkcji łączącej się z bazą w klasę ? Chodzi mi tutaj o przypadek jeżeli bawię się AJAX'em i każdy skrypt/osobny plik php wykonuje zapytania do bazy, to kod mi się powtarza.

Dobrą praktyką jest mieć wszystkie zapytania do bazy w osobnym pliku PHP np. sql_query.php zapisane w tablicy ?

2 odpowiedzi

+1 głos
odpowiedź 26 czerwca 2017 przez Assasz Nałogowiec (30,460 p.)
Stosuj try catch. Wyłapanie wyjątku skutkuje przerwaniem instrukcji try i natychmiastowego przejścia do catch, exit nie jest wtedy potrzebny. Nie stosuj @, bo głuszysz w ten sposób informacje o błędach. Dodatkowo przerzuć się na PDO i zapytania preparowane, a hasła przechowuj w formie hashy.

Osobiście polecam uczyć się obiektowości i wzorców projektowych, szczególnie MVC, bo skrypty tego typu nie mają żadnego zastosowania. Do tego PSR.
0 głosów
odpowiedź 26 czerwca 2017 przez Bosswell Nałogowiec (36,470 p.)
Kompilator przetwarza kod od góry do dołu. Kiedy zauważy header(), tworzy nagłówek w HTTP informujący w które miejsce przeglądarka ma się udać. W momencie, gdy nie zastosujesz exit() czy też die(), skrypt przetwarzany jest dalej w dół i przy napotkaniu następnego header(), miejsce docelowe zostaje nadpisane, przez co przeglądarka może udać się w inne miejsce niż rzeczywiście powinna. Używając exit(), die() oszczędzasz również pracę kompilatora i przyśpieszasz działanie skryptu.
komentarz 26 czerwca 2017 przez Assasz Nałogowiec (30,460 p.)

Opakowywanie klasy łączącej się z bazą jest bez sensu póki nie implementujemy jakiegoś ActiveRecorda, w innym przypadku jest to wsadzanie pudełka w pudełko. A walidacja razem z łączeniem się z bazą w jednej klasie to nienajlepszy pomysł... jest coś takiego jak SOLID.

No i PHP jest interpretowany, a nie kompilowany, ale to taki szczegół ;)

komentarz 26 czerwca 2017 przez Bosswell Nałogowiec (36,470 p.)
Tak, rozpędziłem się z tym kompilatorem ;) a co do reszty, to się zgodzę. Wpis edytowałem zanim napisałeś odpowiedź, ponieważ uznałem, że to jednak bez sensu ;)

Podobne pytania

0 głosów
2 odpowiedzi 890 wizyt
0 głosów
1 odpowiedź 233 wizyt
pytanie zadane 3 listopada 2020 w C i C++ przez Antol PL Użytkownik (860 p.)
0 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 21 grudnia 2017 w PHP przez kevin Mądrala (5,010 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...