Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Optymalizacja kodu
Forum PHP.pl > Forum > Przedszkole
unlock
Kod
<?php
addslashes($_GET['ajdi']);
htmlspecialchars($_GET['ajdi']);
strip_tags($_GET['ajdi']);
addslashes($_GET['ajdi']);
stripslashes($_GET['ajdi']);
if(!isset($_GET['ajdi'])) {
include"start.php"; }
else if ($_GET['ajdi']=='1') {
include"wstaw/me.php"; }
else if($_GET['ajdi']=='2') {
include"wstaw/sikret.php"; }
else if($_GET['ajdi']=='3') {
include"wstaw/nius.php"; }
else if($_GET['ajdi']=='5') {
include"wstaw/ziomki.php"; }
else if($_GET['ajdi']=='6') {
include"wstaw/kontakt.php"; }
else if($_GET['ajdi']=='7') {
include"wstaw/prodzekt.php"; }
else if($_GET['ajdi']=='8') {
include"wstaw/artikles.php"; }
else if($_GET['ajdi']=='9') {
include"wstaw/propsy.php"; }
else if($_GET['ajdi']=='4' && $_GET['nius']=='1') {
include"nius/n1.php"; }
else if($_GET['ajdi']=='4' && $_GET['nius']=='2') {
include"nius/n2.php"; }
else if(ereg('../', $_GET['ajdi'])) {
include"lfi.php"; }
else if(ereg('../', $_GET['artikles'])) {
include"lfi.php"; }
else if(ereg('../', $_GET['nius'])) {
include"lfi.php"; }
else if(ereg('http://', $_GET['ajdi'])) {
include"lfi.php"; }
else if(ereg('http://', $_GET['artikles'])) {
include"lfi.php"; }
else if(ereg('http://', $_GET['nius'])) {
include"lfi.php"; }
else if(ereg('union', $_GET['artikles'])) {
echo 'sqlite'; }
else if(ereg('union', $_GET['nius'])) {
echo 'sqlite'; }
else if(ereg('union', $_GET['ajdi'])) {
include"sql.php"; }
else{
include"shit.php"; }
?>


to mój skrypt, troche go połatałem, działa następująco, w indexie jest funckja include z oto tym skryptem, a odnosniki wygladaja nastepujaco : index.php?ajdi=1.
Moje pytanie : czy da sie jakos zoptymalizowac ten skrypt? bo uciążliwe jest dodawanie w tym skrypcie ciagle nowego warunku if
wookieb
Użyć switch....
unlock
no to praktycznie na to samo wyjdzie
LBO
Napisz klasę, funkcję która ci jakoś uporządkuje mapowanie $_GETów do plików.
Spróbuj jakąś konwencję wymyślić. Jakiś wzór, który będzie się powtarzał, tylko zmienne będą inne - na początek.
michaJlS
Nie do końca na to samo, bo switch jest czytelniejszy.

Na początek zamiast tego dziwnego filtrowania ajdi lepiej daj jakieś $ajdi=(int)$_GET['ajdi'];

I przemyśl jeszcze raz tą całą strukturę, bo za pomocą jednego ciągu ifów chcesz dołączać pliki (tj wykonywać akcje) z różnych poziomów drzewa strony. I w tym momencie ciężko o jakąś optymalizacje tego.
unlock
do filtracji ajdi dam preg_math,
no wlasnie, dlatego moze ktos ma jakis pomysl na optymalizacje ? wchodzi w gre calkowita przebudowa
LBO
To czego szukasz to Router. Poszukaj na forum
FliSs_tCv
masz tutaj przykład następnym razem google i szukaj! http://forum.dobreprogramy.pl/viewtopic.ph...8&p=1791053
wookieb
Swithc czytelniejsz, szybszy.
FliSs_tCv
teraz sam się zainteresowałem wookieb a mógłbyś pokazać przykład zastosowania switch ;>
ErrorMessage
Nie jest to switch ale możne ci się przyda. Znalazłem go w starych plikach u siebie na dysku smile.gif
Kod

                @$go=$_GET['go'];
                if (file_exists(''.$go.'.php')){
                include(''.$go.'.php'); // a tutaj includowane są pliki
                }
                else if (($go != null) && (!file_exists(''.$go.'.php'))){
                include('error.php');j // jeżeli brak pliku o podanej nazwie lub ktoś poda błędny link wyświetli błąd
                } else{
                include('glowna.php'); // tutaj wyświetla ci sie strona główna czyli jak wejdziesz na stronę to właśnie to bedzie widoczne
                }

a linki będą wyglądać następująco
  1. <a href="index.php?go=dowolnyplik">nazwa pliku</a>

i nie dajesz rozszerzenia , rozszerzenie dopisywane jest w include(''.$go.'.php'); możesz dowolnie modyfikować te rozszerzenia. Skrypt dajesz w miejscu w którym maja się pojawiać includowane pliki. To na tyle myślę ze się skrypt przyda haha.gif . Może zawierać błędy przetestuj.
unlock
bardzo podoba mi sie propozycja ErrorMessage, dziękuje smile.gif tylko trzeba go zabezpieczyć
PS: ale jezeli ktoś będzie znał nazwe pliku, to może go wywołać z poziomu przeglądarki a napisalem skrypt logowania :

Kod
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(isset($_POST['user']) && isset($_POST['pass']))
  {
addslashes($_POST['user']);
htmlspecialchars($_POST['user']);
strip_tags($_POST['user']);
addslashes($_POST['pass']);
htmlspecialchars($_POST['pass']);
strip_tags($_POST['pass']);

$podany_login = md5(md5($_POST['user']));
$podane_haslo = md5(md5($_POST['pass']));
$login = '5d11d0ba47a80b25d819f86557d662a7';
$haslo = 'c88b2f7570949ab69c96f7674b25fbd4';
if($login == $podany_login && $haslo == $podane_haslo)
   { include('wstaw/666.php'); }
else
   { header("Location: http://www.domain.com/8337"); }
  }
else
   { header("Location: http://www.domain.com/8337"); }
}
else
  { header("Location: http://www.domain.com/8337"); }
?>

i chodzi mi o to by ktos byl przekierowany na strone 666.php, ale nie mogl jej wywolac z poziomu przegladarki, jak to zrobic ?
jakie uprawniena nadac plikowi 666.php ?
hasła są wziete 2 razy w md5 bo z praktyki wiem ze proste hasła można złamać a md5 w md5 to pare milionow lat ;dd
ErrorMessage
Zaszalejmy wprowadźmy parę modyfikacji a mianowicie:
wprowadź sesje:
Kod
       <?php
           session_start(); //to musisz zostawić bo pracujesz na sesjach
           ob_start(); //to musisz zostawić bo pracujesz na sesjach
          
           ........... //reszta kodu
          
              if($login == $podany_login && $haslo == $podane_haslo){
             $_SESSION['user'] = $login;
             echo 'Zostałe¶ zalogowany';
                header("Refresh:3; URL = 666.php");
             } else {
               echo 'Zły login lub hasło!';
             }
          
           ............. //reszta kodu
          
           ob_end_flush(); //to musisz zostawić bo pracujesz na sesjach
           ?>

a w pliku 666.php sprawdzaj czy sesja istnieje
Kod
      
  
  session_start(); //to musisz zostawić bo pracujesz na sesjach
   ob_start(); //to musisz zostawić bo pracujesz na sesjach
      
   if(isSet($_SESSION['user'])){
           // tu wprowadzasz treśc która ma sie pojawiac po zalogowaniu
           } else{
           // no to tu wiadomo co
           }
         ob_end_flush(); //to musisz zostawić bo pracujesz na sesjach


no i wylogowanie tworzysz plik logout.php

Kod
     session_destroy();
         if (empty($_SESSION['user'])){
            echo 'Zostale¶ poprawnie wylogowany!';
            header("Refresh:2; URL = gdzie ma przenosić");
         } else {
         echo 'Wylogowanie nie powiodło się!';
         }



to chyba tyle. Powinno być w miarę bezpieczne i przyjazne dla środowiska tongue.gif
unlock
pomysłowe, ale mam pare pytan, mianowicie, czy jezeli sesja istnieje w pliku 666.php to zawartosc strony bede musial dac w echo ' '; ? czy jest jakis inny sposób ?
Pytanie 2 : jak bedzie wyglądał odnosnik do logout.php?
FliSs_tCv
odwołujesz się linkiem do logout np z menu smile.gif
ErrorMessage
Moze inaczej przykład:
Kod
session_start(); //to musisz zostawić bo pracujesz na sesjach
  ob_start(); //to musisz zostawić bo pracujesz na sesjach
        
  if(isSet($_SESSION['user'])){
  echo 'Witaj świecie'; // to będą widzieć osoby które się zalogowały
  echo '<a href="logout.php">Wyloguj</a>'; // to będą widzieć osoby które się zalogowały
  } else{
  echo 'Nie jesteś zalogowany';
  }
  ob_end_flush(); //to musisz zostawić bo pracujesz na sesjach
unlock
okej, kodzik działa wszystko gra, ale pytanie czy po zalogowaniu w pliku 666.php tresc strony html musze wstawiac w echo ? czy jest inne rozwiazanie ?
Pilsener
A moja propozycja co do tego stada inkludów - wrzuć te wszystkie includowane pliki do jednego folderu, zrób z nich tablicę funkcją glob, a następnie podstawiaj tylko numer ze zmiennej $_GET:

  1. <?php
  2. $numer = $_GET['cos'];
  3. $plik = $tablica[$numer];
  4. include($plik);
  5. ?>


Proste i wydajne. Ale jeszcze lepiej, żebyś zrobił sobie tablicę z opisami, anchorami etc. i trzymał ją w bazie/pliku, coś w stylu:

ID||Nazwa||Title||Link do pliku
1||pozycja 1||kliknij, by coś tam||includy/plik1.php
2||pozycja 2||kliknij, by coś tam||includy/plik2.php

Na podstawie takiej tablicy generujesz menu i wybraną pozycję.
Zalecam takie rozwiązania dlatego, że nikt Ci nie zainkluduje czegoś, czego nie ma na Twoim serwerze.
ErrorMessage
Cytat(unlock @ 31.08.2008, 22:59:30 ) *
okej, kodzik działa wszystko gra, ale pytanie czy po zalogowaniu w pliku 666.php tresc strony html musze wstawiac w echo ? czy jest inne rozwiazanie ?


Możesz wstawiać w echo " title="Zobacz w manualu PHP" target="_manual lub print " title="Zobacz w manualu PHP" target="_manual
unlock
powstawiałem, ale podczas wylogowywania dostaje :

Kod
[b]Fatal error[/b]:  Call to undefined function session_destory() in [b]/var/www/logout.php[/b] on line [b]2[/b]
ErrorMessage
Dodaj w pliku logout.php na samym początku
Kod
session_start();

i sprawdz czy masz napewno
Kod
session_destroy();
Black-Berry
@unlock Sory że się wtrącę ale przydałoby Ci się poczytać o konwencjach programowania w PHP. Są fajne normy ZENDA (firmy która wypuściła php). Np instrukcję warunkową piszemy tak:
  1. <?php
  2. if (warunek) {
  3. blok instrukcji...
  4. } elseif (warunek) {
  5. blok instrukcji
  6. }
  7. ?>
To się czasem przydaje i nie trzeba myśleć co jak pisać bo zawsze w ten sam sposób smile.gif
nexis
Bo powinno być session_destroy" title="Zobacz w manualu PHP" target="_manual
unlock
napewno mam session_destory(), poprawilem literówke, jak dodaje session_start();, wraz ten sam błąd.
LBO
Cytat(Pilsener @ 31.08.2008, 23:01:58 ) *
A moja propozycja co do tego stada inkludów - wrzuć te wszystkie includowane pliki do jednego folderu, zrób z nich tablicę funkcją glob, a następnie podstawiaj tylko numer ze zmiennej $_GET:

  1. <?php
  2. $numer = $_GET['cos'];
  3. $plik = $tablica[$numer];
  4. include($plik);
  5. ?>


Proste i wydajne. Ale jeszcze lepiej, żebyś zrobił sobie tablicę z opisami, anchorami etc. i trzymał ją w bazie/pliku, coś w stylu:

ID||Nazwa||Title||Link do pliku
1||pozycja 1||kliknij, by coś tam||includy/plik1.php
2||pozycja 2||kliknij, by coś tam||includy/plik2.php

Na podstawie takiej tablicy generujesz menu i wybraną pozycję.
Zalecam takie rozwiązania dlatego, że nikt Ci nie zainkluduje czegoś, czego nie ma na Twoim serwerze.


To ja już bym zalecał XMLa - bardziej czytelny i "obrabialny".
ErrorMessage
@unlock już wiem w czym tkwi problem zamiats tego
Kod
session_destroy();
if (empty($_SESSION['user'])){
    echo 'Zostale¶ poprawnie wylogowany!';
    header("Refresh:2; URL = gdzie ma przenosić");
} else {
    echo 'Wylogowanie nie powiodło się!';
}


daj

Kod
if (!$_SESSION['user']){ // sprawdza czy sesja istnieje
     echo 'Zostale¶ poprawnie wylogowany!'; // jeśli NIE to przenosi cie do formularza
     header("Refresh:2; URL = index.php");
} else {
     echo 'Wylogowanie nie powiodło się!'; // jeśli istnieje to błąd
}


Powinno załatwić sprawe
unlock
ale teraz sesja nie zostaje usunieta, ktos wystarczy ze zaloguje sie raz i moze korzystac dopoki sesja nie wygasnie bez ponownego logowania
ErrorMessage
Wrzuć ten cały kod na forum musiałeś coś poplątać bo u mnie wszystko działa poprawnie.
unlock
logowanie.php :
Kod
<?php
/* uwielbiam swoje pr() skrypty haha.gif coded by Mijagi */
session_start();
ob_start();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(isset($_POST['user']) && isset($_POST['pass']))
{
addslashes($_POST['user']);
htmlspecialchars($_POST['user']);
strip_tags($_POST['user']);
addslashes($_POST['pass']);
htmlspecialchars($_POST['pass']);
strip_tags($_POST['pass']);

$podany_login = md5(md5($_POST['user']));
$podane_haslo = md5(md5($_POST['pass']));
$login = '5d11d0ba47a80b25d819f86557d662a7';
$haslo = 'c88b2f7570949ab69c96f7674b25fbd4';
if($login == $podany_login && $haslo == $podane_haslo)
  { $_SESSION['user'] = $login;
    echo '<html><head><link rel="stylesheet" href="styles.css" type="text/css" media="screen" /></head>
<br><br><br><br><br>
<center><font class="nius">udało ci sie, nie wiem jakim cudem haha.gif</font><br>
bajer jak w php fusi0neQ;ddd <br><br>
<img src="http://img244.imageshack.us/img244/5711/mijaging4.jpg"></center>
</html>';
    header("Refresh:3; URL = wstaw/666.php");
}
else
  { header("Location: http://www.redtube.com/8337"); }
}
else
  { header("Location: http://www.redtube.com/8337"); }
}
else
{ header("Location: http://www.redtube.com/8337"); }

ob_end_flush();
?>


logout.php :
Kod
<?php
         if (!$_SESSsION['user']){
     echo '<html><head><link rel="stylesheet" href="styles.css" type="text/css" media="screen" /></head>
<br><br><br><br><br>
<center><font class="nius">zdagnij co sie stauuuo haha.gif;ddddd</font><br>
<img src="http://img244.imageshack.us/img244/5711/mijaging4.jpg"></center>
</html>';
     header("Refresh:2; URL = index.php");
} else {
     echo '<html><head><link rel="stylesheet" href="styles.css" type="text/css" media="screen" /></head>
<br><br><br><br><br>
<center><font class="nius">blad wylogowywania ale nie wiem jaki;d</font><br>
<img src="http://img244.imageshack.us/img244/5711/mijaging4.jpg"></center>
</html>';
}
?>


666.php:

Kod
<?php
session_start();
   ob_start();
   if(isSet($_SESSION['user'])){
        echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
  <link rel="stylesheet" href="../styles.css" type="text/css" media="screen" />
  <title>Mijagi site;ddd</title>
  <meta name="GENERATOR" content="Quanta Plus">
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >


</head>

<h3 class="nius">Takie tajne, Ĺźe aĹź siÄ(tm) tego boje;ddd</h2>
<br>
<a href="../logout.php">wyloguj</a>

<table><TR><TD> </TD></TR></table>



</body>
</html>
';

           } else{
echo '<html><head><link rel="stylesheet" href="../styles.css" type="text/css" media="screen" /></head><font class="nius">Nie ma sesji</font> jest impreza !</html>';
           }
         ob_end_flush();
?>
ErrorMessage
A po co za każdym razem stosujesz w echu <doctype><html><body> ustaw sobie jeden główny <doctype><html><body> przed session_start(); ob_start(); a dla treści które maja być wyświetlane stosuj <div class=""></div> bo to co dałeś to jest nie czytelne i niepoprawne. Być może ze to jest główną przyczyną.

Przykład:

  1. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>
  2. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='pl'>
  3. <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-2' />
  4. <meta http-equiv='Content-Language' content='pl' />
  5. <meta name='Keywords' content='' />
  6. <meta name='Description' content='' />
  7. <meta name='Robots' content='' />
  8. <meta name='Author' content='' />
  9. <link rel='icon' href='' type='image/x-icon' />
  10. <link rel='stylesheet' href='' type='text/css' />
  11. </head>
  12. // wstawiasz kod php
  13. <div class=''>tresc</div> //wyswietlasz wynik kodu błędu lub cokolwiek
  14. // reszta kodu php
  15. </body>
  16. </html>
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.