Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zmienna która może przybierać dowolną postać
Forum PHP.pl > Forum > Przedszkole
qba10
Mam pytanie i nie wiem jak je zadać smile.gif
Posłużę wiec przykładami:

  1. <?php
  2.  
  3. function formatName($name){
  4.  return ucwords(strtolower($name));
  5. }
  6. $_POST['prefiks_nazwa1'] = 'tEkSt';
  7. $_POST['prefiks_nazwa2'] = 'bUt';
  8.  
  9. $tablica = array(
  10.                      'prefiks_'./***czy można zrobić w  by w tym miejscu mogła być byle jaka wartość***/ => array("filter"=>FILTER_CALLBACK, "flags"=>FILTER_FLAG_ARRAY, "options"=>"formatName")
  11.                       )
  12.  
  13. $filtered_array = filter_var_array($_POST, $tablica);
  14. ?>

Chodzi mi oto by oba elementy tablicy $_POST były przefiltrowane.
Czy jest jakiś element w php by zrobić coś takiego?

PS: jeżeli nie rozumiecie co chcę osiągnąć to napiszcie. Co do tytułu to nie miałem pojęcia jak go nazwać więc go nazwałem jak widać.
no_face
Wystarczy przeciez:
  1. <?php
  2. $zmienna_zawierajaca_jakis_ciag_znakow = '001';
  3.  
  4. $tablica = array(
  5.        'prefiks_' . $zmienna_zawierajaca_jakis_ciag_znakow => array("filter"=>FILTER_CALLBACK, "flags"=>FILTER_FLAG_ARRAY, "options"=>"formatName")
  6.         );
  7.  
  8. echo $tablica['prefiks_001'];
  9. ?>
qba10
Ale mi chodzi konkretnie o tablice POST.
Ma to być taki typ automatycznej filtracji.
Chciałbym aby tablica array -$tablica była nie zmienna. A nazwa tablicy w POST musi być taka sama jak tablice w $tablica.

Ale teraz sobie tak myślę, że chyba i tak to nic nie da (już tak zagmatwałem że sam nie wiem o co mi chodz)

EDIT: chyba już wiem jak rozwiązać problem. Ale jak macie coś do powiedzenia to piszcie.
no_face
Chyba juz rozumiem co masz na mysli (chyba smile.gif )

Kiedys napisalem klase, ktora uwzgledniajac prefix nazwy inputa sprawdzala ja pod wzgledem bezpieczenstwa i typu danych i zakresu.
qba10
No właśnie to samo chcę napisać smile.gif

Ale jak masz napisany taki skrypt to byś mógł go mi udostępnić (nie musiałbym już pisać smile.gif )
no_face
Kiedys to byla prosta klasa, ktora sprawdzala typy, okrajala stringi, pozniej troche ja przerobilem i niestety zaprzestalem jej dalszego rozwijania z powodu jak mi sie wydaje, zbyt duzego nakladu pracy w wykorzystywaniu jej, przez co nie jest dodanych kilka rzeczy. Obecnie posiadam 2 wersje tej klasy, druga sluzy do nieco innych zadan. Mam jeszcze kilka pomyslow jak je rozwinac, no ale...


  1. <?php
  2. class check_post
  3. {
  4.    //-------- config
  5.  
  6.    var $mejl = '';
  7.    var $dlugosc_zmiennych = 1; // 1 - krotkie; 2 - srednie; 3 - dlugie.
  8.    var $sprawdzanie_zmiennych = 1; // 1 - tak; 2 - nie.
  9.  
  10.  
  11.    //-------- reszty nie ruszac
  12.  
  13.    var $dozwolone;
  14.    var $wyjscie;
  15.    var $blad;
  16.    
  17.    function Glowna()
  18.     {
  19.        foreach($_POST as $a => $b)
  20.         {
  21.            $this->Co($a, $b);
  22.         }
  23.     }
  24.    
  25.    function Co($n, $w)
  26.     {
  27.        switch ($n)
  28.         {
  29.            case $n[0] == 'i' && $n[1] == 'a' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
  30.                if ($this->sprawdzanie_zmiennych == 1)
  31.                 {
  32.                    if ($this->Czy($n)) { $w = $this->Ia($w); $this->Stworz_zmienna($n, $w); }
  33.                 }
  34.                elseif ($this->sprawdzanie_zmiennych == 2)
  35.                 {
  36.                    $w = $this->Ia($w);
  37.                    $this->Stworz_zmienna($n, $w);
  38.                 }
  39.                else { $this->blad[5] = 1; }
  40.                break;
  41.            case $n[0] == 'i' && $n[1] == 'b' && $n[2] == '_' <span style="color: #007700":
  42.                if (eregi('ib__[0-9]+__.+', $n))
  43.                 {
  44.                    if ($this->sprawdzanie_zmiennych == 1)
  45.                     {
  46.                        if ($this->Czy($n)) { $w = $this->Ib($n, $w); $this->Stworz_zmienna($n, $w); }
  47.                     }
  48.                    elseif ($this->sprawdzanie_zmiennych == 2)
  49.                     {
  50.                        $w = $this->Ib($n, $w);
  51.                        $this->Stworz_zmienna($n, $w);
  52.                     }
  53.                    else { $this->blad[5] = 1; }
  54.                 }
  55.                else { $this->blad[9] = 1; }
  56.                break;
  57.            case $n[0] == 'i' && $n[1] == 'c' && $n[2] == '_' <span style="color: #007700":
  58.                if (eregi('ic__(m[0-9]+|[0-9]+)__(m[0-9]+|[0-9]+)__.+', $n))
  59.                 {
  60.                    if ($this->sprawdzanie_zmiennych == 1)
  61.                     {
  62.                        if ($this->Czy($n)) { $w = $this->Ic($n, $w); $this->Stworz_zmienna($n, $w); }
  63.                     }
  64.                    elseif ($this->sprawdzanie_zmiennych == 2)
  65.                     {
  66.                        $w = $this->Ic($n, $w);
  67.                        $this->Stworz_zmienna($n, $w);
  68.                     }
  69.                    else { $this->blad[5] = 1; }
  70.                 }
  71.                else { $this->blad[10] = 1; }
  72.                break;
  73.            case $n[0] == 's' && $n[1] == 'a' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
  74.                if ($this->sprawdzanie_zmiennych == 1)
  75.                 {
  76.                    if ($this->Czy($n)) { $w = $this->Sa($n, $w); $this->Stworz_zmienna($n, $w); }
  77.                 }
  78.                elseif ($this->sprawdzanie_zmiennych == 2)
  79.                 {
  80.                    $w = $this->Sa($n, $w);
  81.                    $this->Stworz_zmienna($n, $w);
  82.                 }
  83.                else { $this->blad[5] = 1; }
  84.                break;
  85.            case $n[0] == 's' && $n[1] == 'b' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
  86.                if ($this->sprawdzanie_zmiennych == 1)
  87.                 {
  88.                    if ($this->Czy($n)) { $w = $this->Sb($n, $w); $this->Stworz_zmienna($n, $w); }
  89.                 }
  90.                elseif ($this->sprawdzanie_zmiennych == 2)
  91.                 {
  92.                    $w = $this->Sb($n, $w);
  93.                    $this->Stworz_zmienna($n, $w);
  94.                 }
  95.                else { $this->blad[5] = 1; }
  96.                break;
  97.            case $n[0] == 's' && $n[1] == 'c' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
  98.                if ($this->sprawdzanie_zmiennych == 1)
  99.                 {
  100.                    if ($this->Czy($n)) { $w = $this->Sc($n, $w); $this->Stworz_zmienna($n, $w); }
  101.                 }
  102.                elseif ($this->sprawdzanie_zmiennych == 2)
  103.                 {
  104.                    $w = $this->Sc($n, $w);
  105.                    $this->Stworz_zmienna($n, $w);
  106.                 }
  107.                else { $this->blad[5] = 1; }
  108.                break;
  109.            defaul:
  110.                $this->blad[2] = 1;
  111.                break;
  112.         }
  113.     }
  114.    
  115.    function Czy($n)
  116.     {
  117.        if (count($this->dozwolone) > 0)
  118.         {
  119.            if ($this->Sprawdz_nazwe($n)) { return true; }
  120.            else { $this->blad[4] = 1; return false; }
  121.         }
  122.        else { $this->blad[3] = 1; return false; }
  123.     }
  124.    
  125.    function Stworz_zmienna($n, $w)
  126.     {
  127.        switch ($this->dlugosc_zmiennych)
  128.         {
  129.            case 1<span style="color: #007700":
  130.                $tmp = explode('__', $n);
  131.                $tmp_1 = count($tmp);
  132.                $this->wyjscie[$tmp[$tmp_1 - 1]] = $w;
  133.                break;
  134.            case 2<span style="color: #007700":
  135.                $tmp = explode('__', $n);
  136.                $tmp_1 = count($tmp);
  137.                $tmp_2 = $tmp[0] . '__' . $tmp[$tmp_1 - 1];
  138.                $this->wyjscie[$tmp_2] = $w;
  139.                break;
  140.            case 3<span style="color: #007700":
  141.                $this->wyjscie[$n] = $w;
  142.                break;
  143.            defaul:
  144.                $this->blad[1] = 1;
  145.                break;
  146.         }
  147.     }
  148.    
  149.    function Sprawdz_nazwe($n)
  150.     {
  151.        for ($a = 0; $a < count($this->dozwolone); $a++)
  152.         {
  153.            if ($this->dozwolone[$a] == $n) { return true; }
  154.            else { return false; }
  155.         }
  156.     }
  157.    
  158.    function Ia($w)
  159.     {
  160.        if (intval($w) == 0)
  161.         {
  162.            if (eregi('0', $w)) { $tmp = true; $w = intval($w); }
  163.            else { $tmp = false; $w = intval($w); }
  164.         }
  165.        else { $tmp = true; $w = intval($w); }
  166.        
  167.        if (is_int($w) && $tmp) { return $w; }
  168.        else { $this->blad[0] = 1; return null; }
  169.     }
  170.    
  171.    function Ib($n, $w)
  172.     {
  173.        if (intval($w) == 0)
  174.         {
  175.            if (eregi('0', $w)) { $tmp = true; $w = intval($w); }
  176.            else { $tmp = false; $w = intval($w); }
  177.         }
  178.        else { $tmp = true; $w = intval($w); }
  179.  
  180.        $tmp_n = explode('__', $n);
  181.  
  182.        if (intval($tmp_n[1]) == 0)
  183.         {
  184.            if (eregi('0', $tmp_n[1])) { $tmp_1 = true; $n = intval($tmp_n[1]); }
  185.            else { $tmp_1 = false; $n = intval($tmp_n[1]); }
  186.         }
  187.        else { $tmp_1 = true; $n = intval($tmp_n[1]); }
  188.  
  189.        if (is_int($w) && $tmp)
  190.         {
  191.            if (is_int($n) && $tmp_1)
  192.             {
  193.                if ($w >= 0 && $w <= $n) { return $w; }
  194.                else { $this->blad[7] = 1; return null; }
  195.             }
  196.            else { $this->blad[6] = 1; return null; }
  197.         }
  198.        else { $this->blad[0] = 1; return null; }
  199.     }
  200.  
  201.    function Ic($n, $w)
  202.     {
  203.        //ic__m30__m40__nazwa
  204.        if (intval($w) == 0)
  205.         {
  206.            if (eregi('0', $w)) { $tmp = true; $w = intval($w); }
  207.            else { $tmp = false; $w = intval($w); }
  208.         }
  209.        else { $tmp = true; $w = intval($w); }
  210.  
  211.        $tmp_n = explode('__', $n);
  212.        $tmp_n[1] = str_replace('m', '-', $tmp_n[1]);
  213.        $tmp_n[2] = str_replace('m', '-', $tmp_n[2]);
  214.  
  215.        if (intval($tmp_n[1]) == 0)
  216.         {
  217.            if (eregi('0', $tmp_n[1])) { $tmp_1 = true; $n = intval($tmp_n[1]); }
  218.            else { $tmp_1 = false; $n = intval($tmp_n[1]); }
  219.         }
  220.        else { $tmp_1 = true; $n = intval($tmp_n[1]); }
  221.  
  222.        if (intval($tmp_n[2]) == 0)
  223.         {
  224.            if (eregi('0', $tmp_n[2])) { $tmp_2 = true; $n_1 = intval($tmp_n[2]); }
  225.            else { $tmp_2 = false; $n_1 = intval($tmp_n[2]); }
  226.         }
  227.        else { $tmp_2 = true; $n_1 = intval($tmp_n[2]); }
  228.  
  229.        if (is_int($w) && $tmp)
  230.         {
  231.            if (is_int($n) && $tmp_1)
  232.             {
  233.                if (is_int($n_1) && $tmp_2)
  234.                 {
  235.                    if ($w >= $n && $w <= $n_1) {  return $w; }
  236.                    else { $this->blad[7] = 1; return null; }
  237.                 }
  238.                else { $this->blad[8] = 1; return null; }
  239.             }
  240.            else { $this->blad[6] = 1; return null; }
  241.         }
  242.        else { $this->blad[0] = 1; return null; }
  243.     }
  244.    
  245.    function Sa($w)
  246.     {
  247.        if (strlen(trim($w)) > 0)
  248.         {
  249.            if (get_magic_quotes_gpc()) { return $w; }
  250.            else { return addslashes($w); }
  251.         }
  252.        else { $this->blad[11] = 1; return null; }
  253.     }
  254.    
  255.    function Sb($w)
  256.     {
  257.        if (strlen(trim(strip_tags($w))) > 0)
  258.         {
  259.            if (get_magic_quotes_gpc()) { return $w; }
  260.            else { return addslashes($w); }
  261.         }
  262.        else { $this->blad[11] = 1; return null; }
  263.     }
  264.    
  265.    function Sc($w)
  266.     {
  267.        if (strlen(trim(strip_tags($w))) > 0)
  268.         {
  269.            if (eregi('[a-zA-Z0-9]', $w))
  270.             {
  271.                if (get_magic_quotes_gpc()) { return $w; }
  272.                else { return addslashes($w); }
  273.             }
  274.            else { $this->blad[12] = 1; return null; }
  275.         }
  276.        else { $this->blad[11] = 1; return null; }
  277.     }
  278.  
  279.  
  280.  
  281.  //K
  282.  
  283. };
  284. ?>


Zastosowanie

  1. <?php
  2. $go = new check_post;
  3. $go->dozwolone = array('ic_m20__50__nazwa', 'sa_nazwa');
  4. $go->Glowna();
  5. @extract($go->wyjscie);
  6. ?>



Naprawde maly tutek:

- includujemy ta klase w kazdym pliku w ktorym chcemy filtrowac dane.
- wszystkie nazwy inputow musza miec prefixy, kazdy z nich oznacza inna metode filtracji
--- ia_, ib_, ic_
--- sa_, sb_, sc_
- jezeli boimy sie, ze zmodyfikowanie formularza bedzie mialo wplyw na dzialanie skryptu ustawiamy na 1 zmienna $sprawdzanie_zmiennych = 1, w tym czasie nalezy wpisac w tablice $go->dozwolone wszystkie nazwy wystepujacych inputow w formularzu
- jak ocbywa sie filtracja:
--- ia_nazwa - w tej opcji wartosc bedzie sprawdzana pod wzgledem liczby, gdy string blad,
--- ib_30_nazwa - jw. z opcja sprawdzenia przedzialu, liczby z tego inputa musza sie miescic w przedziale (0, 30)
--- ic_10_20_nazwa - jw. a przedzial w ktorym musi sie liczba zmiescic to (10, 20)
--- ic_m10_20_nazwa - jw. przedzial to (-10, 20)
--- ic_m10_m2_nazwa - jw. przedzial (-10, 20)
--- sa_nazwa - tutaj sprawdzana jest zawartosc inputa pod wzgledem string, trim, strip_tags, addslashes
--- sb_nazwa - narazie brak smile.gif
--- sc_nazwa - akceptuje tylko [0-9A-Za-z]
- nazwy zmiennych zaleza od wartosci zmiennej var $dlugosc_zmiennych = 1; // 1 - krotkie; 2 - srednie; 3 - dlugie.
--- krotkie - z nazwy inputa "ic_10_20_nazwa" w php wychodzi "nazwa"
--- srednie- z nazwy inputa "ic_10_20_nazwa" w php wychodzi "10_20_nazwa"
--- dlugie- z nazwy inputa "ic_10_20_nazwa" w php wychodzi "ic_10_20_nazwa"


jezeli zauwaze jakies zainteresowanie (haha) stworze manual i dokoncze klase. Wszelkie prawa zastrzezone winksmiley.jpg
qba10
Funkcja ciekawa, ale zacząłem pisanie już swojej, która działa na podobnej zasadzie biggrin.gif Przydałaby się tutaj jeszcze filtracja cookie i get (no ja tutaj takiej możliwości nie widzę chyba ze ślepy jestem biggrin.gif) A dalsze rozwijanie skryptu to chyba dobry pomysł. Mało znam projektów związanych z filtracją zmiennych . Wiec coś takiego może się komuś jeszcze przydać. Życzę więc powodzenia biggrin.gif
no_face
filtracje GET, czy tez cookie otrzymujesz dodajac

  1. <?php
  2. function Glowna()
  3.    {
  4.       foreach($_POST as $a => $b)
  5.        {
  6.           $this->Co($a, $b);
  7.        }
  8.  
  9.       foreach($_GET as $a => $b)
  10.        {
  11.           $this->Co($a, $b);
  12.        }
  13.  
  14.       foreach($_COOKIE as $a => $b)
  15.        {
  16.           $this->Co($a, $b);
  17.        }
  18.    }
  19. ?>
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.