Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Funkcja
materkamil
post 26.09.2012, 11:12:18
Post #1





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 24.04.2012

Ostrzeżenie: (0%)
-----


Mam taką funkcję kasującą polskie znaki:

  1. function clean($x) {
  2. $PL = array('ą' => 'a', 'ę' => 'e', 'ś' => 's', 'ć' => 'c', 'ó' => 'o', 'ń' => 'n', 'ż' => 'z', 'ź' => 'z', 'ł' => 'l', 'Ą' => 'A', 'Ę' => 'E', 'Ś' => 'S', 'Ć' => 'C', 'Ó' => 'O', 'Ń' => 'N', 'Ż' => 'Z', 'Ź' => 'Z', 'Ł' => 'L');
  3. return(str_replace(array_keys($PL), array_values($PL), $x));
  4. }


i teraz drugą funkcję wyświetlającą rekordy z bazy w postaci listy:

  1. function menu() {
  2. global $database;
  3. $db_menu = $database->query('SELECT * FROM menu');
  4. foreach($db_menu as $menu) {
  5.  
  6. echo('<li><a href=index.php?page='.clean('ŚÓŚ').'>text</a></li>');
  7. }
  8. }


Gdy wpisany jest do drugiej funkcji tekst np: "ŚÓŚ" link prowadzi do ...SOS (bez polskich znaków)

Jeśli jednak zamiast tekstu dam tu zmienną:

  1. echo('<li><a href=index.php?page='.clean($menu['cos']).'>text</a></li>');


To adres jest dalej z polskimi znakami (np: gdy wartosc zmiennej $menu['cos'] to "ŚÓŚ"). Jak to możliwe i jak temu zapobiec?


--------------------
Strona o bezpieczeństwie komputerowym
http://www.materdefense.hostzi.com
Go to the top of the page
+Quote Post
-Jinbe-
post 26.09.2012, 12:36:13
Post #2





Goście







Cytat(materkamil @ 26.09.2012, 11:12:18 ) *
Jak to możliwe i jak temu zapobiec?

Upewnij się, że tekst pobierany z bazy danych jest zapisany w tym samym kodowaniu, co w Twojej tablicy $PL.
Go to the top of the page
+Quote Post
peter13135
post 26.09.2012, 12:45:54
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(Natanek @ dawno temu ) *
Jeśli Twoje dziecko używa globalsów, to wiedz, że coś się dzieje.



--------------------
:)
Go to the top of the page
+Quote Post
materkamil
post 26.09.2012, 12:51:15
Post #4





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 24.04.2012

Ostrzeżenie: (0%)
-----


Znalazłem rozwiązanie, po prostu zrobię całkiem odwrotnie -> zamiast pobierać dane z bazy i je czyścić stworzę nową kolumnę w tabeli gdzie będę dodawał już wyczyszczone dane.

Co do tego mojego projektu CMS - będzie się "to coś" składało się z 3 niezależnie działających części:
- Mechanizm główny
- Pakiety
- Szablony

Mechanizm główny zarządzał będzie działaniem całym systemem, wszystkimi opcjami, funkcjami tego CMSa.

Pakiety będą to poszczególne moduły CMSa takie jak np: komentarze, newsy, obsługa bazy danych, itp.

Sablony będą całkowicie oddzielone od kodu PHP. Będą to po prostu zwykłe struktury w HTMLu a w miejscach gdzie miałby być kod PHP użyte są funkcje.

Na pewno będzie to lepsze od ostatniego skryptu CMSa który nie był CMSem tylko stroną z panelem administracyjnym


--------------------
Strona o bezpieczeństwie komputerowym
http://www.materdefense.hostzi.com
Go to the top of the page
+Quote Post
!*!
post 26.09.2012, 12:53:22
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Od tego typu zmian jest iconv a nie jakieś śmieszne tablice.

Cytat
Sablony będą całkowicie oddzielone od kodu PHP. Będą to po prostu zwykłe struktury w HTMLu a w miejscach gdzie miałby być kod PHP użyte są funkcje.


To po co Ci taki szablon? Szablony powstały po to, aby ustalać znaczniki {text} zamienia na <?php echo $text;?> a nie po to aby były w nich funkcje. A jak już chcesz stosować MVC, to nie powinny być to funkcje a kod PHP. Sprowadzasz wszytko do jednego worka.

Ten post edytował !*! 26.09.2012, 12:55:36


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
materkamil
post 26.09.2012, 13:01:29
Post #6





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 24.04.2012

Ostrzeżenie: (0%)
-----


W ostatnim projekcie wszystko było pomieszane w jedno, wrzucone do indexa. Tutaj to wszystko rozdzieliłem. Np tak wygląda jeden z szablonów (oczywiście dopiero 1/3 tego szablonu jest gotowe):

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title><?php scms_title(); ?></title>
  5. <link rel="stylesheet" type="text/css" href="themes/<?php echo(scms_theme()); ?>/style.css">
  6. </head>
  7. <body>
  8. <div id="header"><?php scms_header(); ?></div>
  9. <ul id="menu"><?php scms_menu(); ?></ul>
  10. <div id="under">
  11. <div id="left1"></div>
  12. <div id="right1"></div>
  13. </div>
  14. <div id="content">
  15. <div id="left2"><?php scms_content(); ?></div>
  16. </div>
  17. <div id="footer"></div>
  18. </body>
  19. </html>


Dzięki temu gdy chce zmienić wygląd - edytuje kod HTML i CSS, i nie mieszam się nic w kod PHP oraz gdy zmieniam PHP nie ingeruje w wygląd. Index.php wygląda mniej więcej tak (również nie gotowe):

  1. define('READ_INDEX',1);
  2.  
  3. include_once('packages/mysql.php');
  4. $db_packages = $database->query('SELECT * FROM packages');
  5.  
  6. include_once('function.php');
  7.  
  8. foreach($db_packages as $packages) {
  9. include_once('packages/'.mysql_real_escape_string($packages['name']).'.php');
  10. define($packages['name'],1);
  11. }
  12.  
  13. /** Theme */
  14.  
  15. include_once('/themes/'.scms_theme().'/index.php');


Po prostu gdy przykładowo na stronie głównej chcemy newsy - mamy newsy. Ale gdy chcemy na stronę główną dać księgę gości, zwykłą strone - nie ma problemu - od wszystkiego są pakiety


--------------------
Strona o bezpieczeństwie komputerowym
http://www.materdefense.hostzi.com
Go to the top of the page
+Quote Post
!*!
post 26.09.2012, 13:05:07
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Widzę że załapałeś, ale chyba trochę na opak. Po co Ci funkcja? Skoro to samo może robić zmienna? Czytałeś o MVC{P}? Model obrabia/odczytuje dane, a nie widok, widok może je tylko przemielić np. w pętli gdy pobierze tablice z listą menu z modelu.

Poza tym, upewnij się czy include_once jest wskazane.

Ten post edytował !*! 26.09.2012, 13:13:08


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
materkamil
post 26.09.2012, 13:41:39
Post #8





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 24.04.2012

Ostrzeżenie: (0%)
-----


Include_once jest oczywiście wskazane, przy dołączaniu funkcji czy klas (? chyba) w obiektowym. Jako że w wielu plikach znajdują się schematy funkcji lepiej jest użyć tego _once (przynajmniej wg. mnie)

Co do funkcji, po prostu dużo pracowałem z obróbką szablonów wordpressa i coś takiego zauważyłem, przemyślałem to i pomyślałem że to bardzo dobry pomysł. Słyszałem również, że do tego celu wykorzystujemy zwykle Smarty, jednak - zdecydowałem się na funkcje.

Cytat
Widzę że załapałeś, ale chyba trochę na opak.


Od początku mówiłem że nowy CMS będzie przełomem we wszystkich moich projektach


--------------------
Strona o bezpieczeństwie komputerowym
http://www.materdefense.hostzi.com
Go to the top of the page
+Quote Post
!*!
post 26.09.2012, 13:59:09
Post #9





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


_once przy klasach (najlepiej require), przy czymś innym już nie, bo kto powiedział że to zawsze musi być to samo i wyświetlane tylko raz.
Nie wzoruj się na WP, bo jego kod jest fatalny i przestarzały.
Masz w widoku funkcje, tylko co jak będziesz chciał coś zmienić, to zmieniasz kod funkcji? Ok, tylko czym to jest? Jeszcze widokiem czy już modelem? W przeciętnym projekcie masz +/-- 60 funkcji/zmiennych. Jaki jest % zużycia ramu w przypadku inicjalizacji funkcji a zmiennej? wink.gif weź pod uwagę fakt że Twoje funkcje muszą wykonywać jakieś operacje, każdorazowe ich wywołanie wykona to samo X razy.

Cytat
Od początku mówiłem że nowy CMS będzie przełomem we wszystkich moich projektach

Przełom jest wtedy gdy pojmujesz wiedzę jaką posiadasz.

Ten post edytował !*! 26.09.2012, 14:00:03


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
materkamil
post 26.09.2012, 14:22:12
Post #10





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 24.04.2012

Ostrzeżenie: (0%)
-----


Cytat
Nie wzoruj się na WP, bo jego kod jest fatalny i przestarzały.


ciekawe...

Zobaczymy co z tego wyniknie z tego CMSa. Wiem jak dużo pracy zostało do ukończenia go. Ogólne działanie widoczne jest tutaj:
http://94.251.191.53/scms/
http://94.251.191.53/scms/admin

Na razie przygotowany jest silnik CMSa. Nie należy się wzorować na wyglądzie bo jak już mówiłem od tego są szablony


--------------------
Strona o bezpieczeństwie komputerowym
http://www.materdefense.hostzi.com
Go to the top of the page
+Quote Post
Damonsson
post 26.09.2012, 14:36:35
Post #11





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Ja tam się nie znam, ale czy przypadkiem, przetwarzanie formularza nie powinno być w osobnym pliku? Jeśli stosujesz MVC.
A logując się jako admin w formularzu nie widzę: action=""
Go to the top of the page
+Quote Post
!*!
post 26.09.2012, 14:41:13
Post #12





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(Damonsson @ 26.09.2012, 15:36:35 ) *
Ja tam się nie znam, ale czy przypadkiem, przetwarzanie formularza nie powinno być w osobnym pliku? Jeśli stosujesz MVC.
A logując się jako admin w formularzu nie widzę: action=""


Nie musi, za to odpowiada kontroler. Ale nie oszukujmy się, tutaj nie ma MVC. materkamil wymyślił "coś", co w założeniu ma pełnić rolę systemu szablonów, ale nie bardzo ma to związek z logicznym rozdzieleniem kodu od prezentacji. Choć może poczekajmy na efekt końcowy.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
materkamil
post 26.09.2012, 14:50:46
Post #13





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 24.04.2012

Ostrzeżenie: (0%)
-----


Co do formularza i action="" - nie ma tutaj czegoś takiego chociaż panel administracyjny znajduje się w innym pliku (administration.php). Tutaj najprościej mówiąc wykorzystane są sesje


--------------------
Strona o bezpieczeństwie komputerowym
http://www.materdefense.hostzi.com
Go to the top of the page
+Quote Post
Niktoś
post 26.09.2012, 15:00:45
Post #14





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Cytat
Ja tam się nie znam, ale czy przypadkiem, przetwarzanie formularza nie powinno być w osobnym pliku?

Czytając wątek też o tym pomyślałem.Materkamil-to co próbujesz osiągnąć nie można nazwać w pełni programowaniem obiektowym-nie wystarczy używać funkcji, aby tak było. W PHP za bardzo może tego nie widać za to w .NET już tak- zasugerowałbym używania klas, aby odizolować kod php od html.Rozbudowujesz klasy pozostawiając kod html w spokoju jak i odwrotnie.Poczytaj o klasach i ich odmianach, korzystaj z wzorców projektowych, może wtedy będzie to zasługiwało na miano projektu robionego obiektowo.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 04:14