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

Duzy problem ze zrozumieniem...

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 27 maja 2017 w PHP przez Marduczek Użytkownik (520 p.)
edycja 27 maja 2017 przez Marduczek

 

Siemano, jestem poczatkujacym programista, mam zbudowac sklep internetowy na podstawie ponizszego kodu, tylko kompletnie tego nie rozumiem. Bylbym bardzo ale to bardzo wdzieczny jezeli ktos powiedzialby mi, w relatywnie lopatologiczny sposob co tutaj sie dzieje bo juz jestem w kropce. Chyba najwieksza niewiadoma jest dla mnie jak ma to dzialac, jak uzytkownik mialby zmieniac strony w tym przypadku. Inna rzecza jest to jak dzialaja te sciezki, index w przypadku np. klikniecia przycisku ma pobrac logike z innego pliku? Wdzieczny bylbym za podeslanie jakiegos tutorialu ktory tlumaczy cos podobnego. Z gory dzieki za odpowiedzi.

--INDEX--

<?php
include 'General.php';
include 'Homepage/Homepage.php';
include 'Product/Product.php';

if(checkRout('products/add')) {
    $product = new Product();
    $product->add();
}elseif(checkRout('products/index')) {
    $product = new Product();
    $product->index();
}else {
    $homePage = new Homepage();
    $homePage->index();
}

function checkRout(string $route) {
    return strpos($_SERVER['REQUEST_URI'], $route);
}
?>

--GENERAL--

<?php

class General {

    static private $data;
    public $post;
    public $files;

    public function __construct()
    {
        $this->post = $_POST;
        $this->files = $_FILES;
    }

    public function getData(){
        return General::$data;
    }

    public function render(string $pathToFile, $data = [])
    {
        if(!empty($data)){
            General::$data = $data;
        }

        require ($pathToFile);
    }

    public function getConnection()
    {
        $configDB = array(
            'servername' => "666.0.0.1:2206",
            'username' => "root",
            'password' => "lol29",
            'baseName' => "shop"
        );

        $conn = new mysqli($configDB['servername'], $configDB['username'], $configDB['password'], $configDB['baseName']);

        if ($conn->connect_error) {
            die("Polaczenie nieudane. Blad: " . $conn->connect_error."<br>");
        }

        return $conn;
    }


    public function is_post()
    {
        if(!empty($this->post)){
            return true;
        }

        return false;
    }

    public function redirect(string $destiny) {
        header('location:' . $destiny);
    }
}
?>

--HOMEPAGE--

<?php

class Homepage extends General {

    public function index(){
        $this->render('Homepage/views/homepage.html');
    }
}

?>
komentarz 27 maja 2017 przez Boshi VIP (100,240 p.)
popraw formatowanie

2 odpowiedzi

0 głosów
odpowiedź 28 maja 2017 przez mtk3d Nałogowiec (46,690 p.)
W index masz routing. Funkcja checkRout(), sprawdza, czy w adresie znajduje się dany ciąg, a if'y na tej podstawie tworzą obiekt klasy i wywołują metodę odpowiednio dla każdego adresu.

General, to plik z ogólnie dostępnymi funkcjami. Jest tam funkcja do połączenia z bazą, funkcja renderująca widoki, przekierowanie i funkcja sprawdzająca, czy cokolwiek zostało wysłane metodą POST.

Hompage, zawiera klasę dla widoku homepage, w której mamy metodę renderującą widok strony głównej.

To tak w skrócie. Poczytaj o OOP, to zrozumiesz i naucz sie przy okazji wzorców projektowych począwszy od MVC.
0 głosów
odpowiedź 28 maja 2017 przez Chess Szeryf (76,710 p.)
edycja 28 maja 2017 przez Chess

Pierwsze 3 linie dołączają 3 zewnętrzne pliki o nazwie:
general.php
homepage.php
product.php

Następnie if() sprawdza (co?) i uruchamia funkcję checkRout z parametrem 'products/add'.
Zostaje wywołany obiekt słowem kluczowym new.
Zostaje wyświetlony ten obiekt.

Jeśli 1. if() się nie sprawdził to wykonuje się 2. elseif sprawdzając jaki parametr
został ustawiony, został nim ('products/index').
Następnie zostaje wywołany obiekt oraz w nastepnej linijce zostaje wypisany.

Else w przeciwnym wypadku wywołaj/utwórz obiekt  (klasę) Homepage{}
i wyświetl z niego funkcję/metodę index().

Na samym końcu jest tworzona funkcja o nazwie checkRout o typie string (wartość tekstowa, łańcuch
znaków).
Funkcja ta zwraca funkcją strpos pozycję wystąpienia nazwy $_SERVER['REQUEST_URI'], czyli
nazwę  pliku na którym przebywasz np.: z hosta o takie nazwie:
http://localhost/dir/file.php
zwróci file.php.
Funkcja ta będzie szukać wystąpień tego string'a, który jest podany jako parametr
strpos
,czyli jeżeli $_SERVER['REQUEST_URI'] zwroci ci nazwę file.php, a w parametrze
$route podasz np. literkę "i", to funkcja zwróci ci
wartość: 1 ponieważ "i" stoi na 2. miejscu, a liczymy od zera.

W pliku: general:

W 1. linii jest tworzona klasa General.
Następnie jest tworzona statyczna prywatna zmienna o nazwie $data.
Nastepnie 2. zmienne publiczne dostępne są dla wszystkich, czyli
$post i $files.

Dalej jest funkcja zwykła (publiczna) w tym wypadku __construct (konstruktor)
{
    Odwołuje się do zmiennej $post, czyli jeśli $post = 10,
    a $this->post = $_POST, znaczy to tyle, że teraz wewnątrz konstruktora
    zmienna tak jakby $post jest równa = $_POST.
    Tak samo linia niżej analogicznie do powyższego.
}

Dalej jest publiczna funkcja getData przyjmująca 0 parametrów (0 zmiennych, czy np. stałych).
Zwraca ona (operatorem zasięgu)? z klasy General zmienną statyczną, prywatną wartość $data.

Dalej funkcja publiczna dostępna dla wszystkich o nazwie render przyjmuje jako parametry
(zmienną typu string) o nazwie $pathToFile oraz tablicę o nazwie $data.

Dalej jest. Jeśli (nie jest pusta) zmienna $data to wykonaj kod poniżej, czyli:
klasa General operator zasięgu równy zmiennej $data.

require wywołuje ci coś o nazwie zmiennej ($pathtofile),

dalej jest tworzona kolejna publiczna zmienna o nazwie getconnection (pobierz połączenie) bez
zmiennych (parametrów).

Dalej jest tworzona tablica o nazwie $configDB równa:
(
'servername' (nazwa servera) => '666.0.0.1:2206',
'username' (nazwa użytkownika) => 'root',
'passoword ' (hasło) = 'lol29',
'baseName' (nazwa bazy) = > 'shop'
);

Dalej jest zmienna $conn, która po znaku równa się słówkiem new tworzy obiekty do których później
się można odwołać.

Za zmienną tablicową  $configDB['servername'] podstawia sobie 666.0.0.1:2206, a
za zmienną tablicową aconfigdb['username'] - root, itd..

Dalej jeśli połączenie jest nieudane $conn->connect_error to
zwróć błąd słówkiem kluczowym die: Połączenie nieudane. Błąd...
Po słowie błąd jest wyświetlany $conn->connect_error to znaczy, że
wywołujemy numer błędu jaki wystąpił może to być np. bląd o złym połączeniu z bazą danych,
np. nieprawidłowa nazwa, czy coś takiego.

Na samym końcu funkcja getconnection zwraca $conn, czyli połączenie.

Dalej funkcja is_post() sprawdza, czy czasem nie jest pusta zmienna $this->post,

czyli czy $zmienna $post nie jest pusta. Jeśli nie jest pusta zwróć true, a
jeśli jest pusta (w przeciwnym razie) zwróć false.

Na samiutkim końcu klasy General znajduje się funkcja redirect (przekierowanie), która
za parametr przyjmuje 1. zmienną o nazwie $destiny.
Słowkiem header zostaje przekierowany na stronę o takim linku w tym co podasz za parametr funkcji.

Podobne pytania

0 głosów
1 odpowiedź 74 wizyt
0 głosów
1 odpowiedź 98 wizyt
+2 głosów
1 odpowiedź 129 wizyt
pytanie zadane 3 kwietnia w PHP przez Panelinio Gaduła (4,360 p.)

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 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!

...