Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >

Neutral
Napisane: 29.12.2021, 10:15:11





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

https://www.php.net/manual/en/language.type....syntax.heredoc

Przeczytaj.

Wyrzuć ">>>;", zamykasz przez tag.
  Forum: PHP · Podgląd postu: #1257497 · Odpowiedzi: 18 · Wyświetleń: 1 575

Neutral
Napisane: 28.12.2021, 20:54:53





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Prawa strona wydaje się być OK.

Wymaż wszystkie tabulacje, pomarańczowe strzałki.
I dwukrotnie walnij dwie spacyjki wszędzie.

Przemęczysz to, przemyślisz.biggrin.gif
  Forum: PHP · Podgląd postu: #1257480 · Odpowiedzi: 18 · Wyświetleń: 1 575

Neutral
Napisane: 28.12.2021, 20:12:20





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Musisz włączyć wyświetlanie niewidzialnych znaków.

Notepad++

¶¶¶sunrise, sunrise
[TAB]sunset, sunset

Musisz

¶¶¶sunrise, sunrise
¶¶¶sunset, sunset
  Forum: PHP · Podgląd postu: #1257474 · Odpowiedzi: 18 · Wyświetleń: 1 575

Neutral
Napisane: 28.12.2021, 17:09:59





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Włącz w Notepad++ wyświetlanie białych znaków, tabulacje, spacje, inne.

Usuń wcięcia przed i po.

Dobrze:
  1. $sql=<<<
  2. Bbjhhj
  3. Jj
  4. >>>;


Źle:
  1. $sql=<<<|spacja|
  2. Bbjhhj
  3. Jj
  4. >>>;
  Forum: PHP · Podgląd postu: #1257466 · Odpowiedzi: 18 · Wyświetleń: 1 575

Neutral
Napisane: 28.12.2021, 15:49:18





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Tak jak Viking dodał.

Po operatorze trzech znaków mniejszości musi być nowa linia.

@nospor jest świetny w grze, znajdź sto różnic. Nie ma sobie równych, można się od niego uczyć, naprawdę.
Kod
$a=<<<"CC" x
z
>>>;

while(ALL_STUFF) {
  if(Line.#1 not found #Newline) {
    Error();
    output="... unexpected '<<'...";
  }
}
  Forum: PHP · Podgląd postu: #1257464 · Odpowiedzi: 18 · Wyświetleń: 1 575

Neutral
Napisane: 27.12.2021, 18:06:02





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Składnia heredoc, nowdoc; zobacz przykłady.

Może spację wywal i od nowej linii pisz.
  1. $a=<<<"sqlcde"
  2. Mystr.
  3. >>>;
  Forum: PHP · Podgląd postu: #1257453 · Odpowiedzi: 18 · Wyświetleń: 1 575

Neutral
Napisane: 10.08.2020, 04:34:06





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

  1. <body style="background: darkgoldenrod;">
  2.  
  3. <?php
  4. $a = [2, 3, 4, 5];
  5. $b = ['umx1', 'umx2', 'umx3', 'umx4'];
  6.  
  7. $categories = [1, 2, 3, 0, 9];
  8.  
  9. foreach($categories as $category_id) {
  10. $randed = rand(0, 5);
  11. //echo "<span style='color: green;>";
  12. //var_dump((string)array_search($category_id, $a));
  13. //var_dump((string)array_search('umx'.$randed, $b));
  14. //echo "</span>";
  15. if(array_search($category_id, $a) === array_search('umx'.$randed, $b) /* && !isset($_GET['id']) */) {
  16. header("Location: " . '?categ='.$category_id);
  17. }
  18. }
  19.  
  20. ?>
  21.  
  22. </body>

Przełóż na swój kod.

Kolejność elementów w tablicy $a i $b jest bardzo ważna, ponieważ na tym bazuje funkcja array_search.
Cyfra 2 jest sprawdzana z 'umx1', dalej 3 z 'umx2', 4 z 'umx3', itd.
U Ciebie jest to
Kod
($category_id =='2') && ($_SERVER['REQUEST_URI'] == '/umx_rhythmix.php')
.
Porównujesz kategorię 2 z adresem '/umx_rhythmix.php', więc będzie to tak.
$a = [2, 3];
$b = ['/umx_rhythmix.php', '/umx_wps.php'];

Pamiętaj o tym, że === w ifie jest po to, żeby sprawdzać typ! Jeśli tego nie byłoby, to "" zostałoby porównane z 0 jako true, a tego nie chcemy. Poczytaj o tej funkcji.
Kod
if("" == 0)
,
Kod
if("" === 0)


Proszę, gotowe.
  Forum: Przedszkole · Podgląd postu: #1252417 · Odpowiedzi: 7 · Wyświetleń: 504

Neutral
Napisane: 17.02.2020, 00:07:25





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

  1. $countries = ['FR', 'AT', 'HU', 'SI'];
  2. if(in_array($country, $countries))// ...


Jeśli chcesz mocniejsze typowanie, to na końcu dodaj true, do in_array...

Zaprezentowany kod wyrzuca true, najprawdopodobniej dlatego, że porównuje $country z 'FR', dalej "nic" z 'AT' itd., więc już dla 'AT' zwraca true, nie jest porównywany z niczym.

  1. if($country == 'FR' || $country == 'AT' || $country == 'HU' || $country == 'SI')// ...
  Forum: Przedszkole · Podgląd postu: #1249666 · Odpowiedzi: 3 · Wyświetleń: 313

Neutral
Napisane: 17.09.2019, 13:53:36





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Dostałem odpowiedź na IRCu (FREENODE) kanał ##PHP.

Cytat
+Bittarman: I'd use a recursive array_map
Ja: Yes, but I want on method offsetSet().

+Bittarman: you cannot just make a method do something that it doesn't do.
+Bittarman: using offsetSet you'd only set the outermost arrays offset

Ja: Bittarman; where is it in documentation?
+Bittarman: under arrayiterator

Ja: So that works, I must "need to instantiate ArrayObject and let it create ArrayIterator instances that refer to it either by using foreach or by calling its getIterator() method manually."?
+Bittarman: except you're using a recursiveiteratoriterator on it

Ja: Aha, OK. So I can't use recursiveiteratoriterator, that use offsetSet()?
+Bittarman: you can, but it will only work on the outermost layer.

+Bittarman: like I said, I'd just use a recursive array_map
Ja: In manual not have about "outermost layer", probably.


Ta metoda działa, tylko na najbardziej zewnętrznych indeksach, do tych środkowych "nie wchodzi" lub "nie chce ich modyfikować". Żeby napisać, to co chcesz powinieneś skorzystać z rekursywnej funkcji array_map tak jak podpowiedział mi użytkownik na IRCu.

Cytat
This iterator allows to unset and modify values and keys while iterating over Arrays and Objects.

When you want to iterate over the same array multiple times you need to instantiate ArrayObject and let it create ArrayIterator instances that refer to it either by using foreach or by calling its getIterator() method manually.


Źródło

Kod użytkownika +Bittarman z IRCa z wykorzystaniem map*.

Kod
<?php

$array = [
        'one' => 'One',
        'two' => 'Two',
        'three' => [
            'four' => 'Four',
            'items' => [
                'six' => 'Six',
                'seven' => 'Seven'
            ]
        ],
    ];

function clean($in, $key) {
    if ($key === 'items') {
        return [];
    }
    if (is_array($in)) {
        return array_map('clean', $in, array_keys($in));
    }
    return $in;
}
$out = array_map('clean', $array, array_keys($array));
var_dump($out);



W przeciwnym razie chyba musisz, ale nie jestem pewien napisać coś w tym stylu.

Musisz chyba ustawić korzeń (root) array na inną pozycję level zagnieżdżenia i wtedy można modyfikować te drzewo arraya.

A tutaj mój kod, wpierałem się komentarzem w manualu PHP - źródło.

Kod
<?php
///ini_set('error_reporting', E_ALL);
$array = [
        'one' => 'One',
        'two' => 'Two',
        'three' => [
            'four' => 'Four',
            'items' => [
                'six' => 'Six',
                'seven' => 'Seven'
            ]
        ],
    ];

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST);
  
foreach($iterator as $key => $value) {
  
    $currentDepth = $iterator->getDepth();
    for($subDepth = $currentDepth; $subDepth >= 0; $subDepth--) {
      if( $key == 'items') {
        
         $value = [];
      }
  
      $subIterator = $iterator->getSubIterator($subDepth);

      $subIterator->offsetSet($subIterator->key(), ($subDepth === $currentDepth ? $value : $iterator->getSubIterator(($subDepth+1))->getArrayCopy()));
    }


}

var_dump($iterator->getArrayCopy());

?>


Za napisanie kodu szczególnie podziękowania dla +Bittarman z kanału ##PHP oraz daniel1302 z kanału #4programmers oba na FREENODE.
  Forum: Przedszkole · Podgląd postu: #1245505 · Odpowiedzi: 2 · Wyświetleń: 301

Neutral
Napisane: 7.09.2019, 22:08:39





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Po pierwsze nie używaj @, ponieważ tylko ukrywasz błędy. Nie używaj także mysql, ponieważ to zostało usunięte w wersji 7. i jeśli korzystasz z najnowszej wersji to nic dziwnego, że taki błąd Ci poleciał. Zamiast tego korzystaj tylko z mysqli i/lub PDO.

Do sprawdzania, co masz zainstalowane/skonfigurowane możesz zastosować taką linię kodu phpinfo();. Później naciśnij Ctrl+F i wpisz tam w pole wyszukiwania mysql, zobaczysz, że tego nie masz w wersji 7.
  Forum: PHP · Podgląd postu: #1245009 · Odpowiedzi: 5 · Wyświetleń: 652

Neutral
Napisane: 30.08.2019, 22:54:51





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Sprawdź może to manual.

Przykład

  1. <?php
  2. $hello = 'hello';
  3.  
  4. echo "${hello}!";
  5. ?>
  Forum: Przedszkole · Podgląd postu: #1244797 · Odpowiedzi: 7 · Wyświetleń: 301

Neutral
Napisane: 11.07.2019, 20:03:52





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

https://www.forumweb.pl/porady-i-tutoriale-...regularne,89394

Ogranicznik musi być unikatowy. Odsyłam do lektury powyżej.

  1. $scphp = preg_replace("@</$loop[$y]>.*@i", "", $pageed);


Ogranicznik, który wybrałem to "@". Możesz jeszcze napisać tak jak się już uparłeś przy slash'u "/".

  1. $scphp = preg_replace("/<\/$loop[$y]>.*/i", "", $pageed);
  Forum: Przedszkole · Podgląd postu: #1243477 · Odpowiedzi: 4 · Wyświetleń: 384

Neutral
Napisane: 8.07.2019, 16:29:25





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Poszukaj w Google Maps API, powinno gdzieś być o tym napisane.

API
  Forum: PHP · Podgląd postu: #1243374 · Odpowiedzi: 6 · Wyświetleń: 596

Neutral
Napisane: 30.06.2019, 20:42:51





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Kod
td {
  border: 1px solid black;
}


  1. <body style="background: darkolivegreen;">
  2. <pre>

  1. <?php
  2. $con = new mysqli("localhost","root","hello","x");
  3.  
  4. $query = "SELECT * FROM `hello`";
  5. $a_query = $con->query($query);
  6.  
  7. echo "<table>";
  8.  
  9. while($result = $a_query->fetch_assoc()) {
  10. echo "<tr><td>".$result['id']."</td><td>".$result['nme']."</tr>";
  11. }
  12.  
  13. echo "</table>";
  14. ?>

  1. </pre>
  2. </body>


Twój kod:

Nie używaj @ - ukrywasz tylko błędy. Zamknąłeś połączenie z bazą za szybko, ponieważ chciałeś jeszcze wykonać zapytanie MySQL. To więc powinno być raczej na samym końcu
  1. $polaczenie->close();
  Forum: Przedszkole · Podgląd postu: #1243135 · Odpowiedzi: 5 · Wyświetleń: 587

Neutral
Napisane: 30.05.2019, 14:20:17





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Kod
.pasek_right {
  float: right;
  width: calc(100% - 30px);
  /* ... */
}


Pamiętaj, że wszystko w calc pomiędzy nawiasami, te znaki "+", "-" muszą być oddzielone spacją, taka gramatyka. Cytat:

Cytat
The + and - operators must be surrounded by whitespace. For instance, calc(50% -8px) will be parsed as a percentage followed by a negative length ? an invalid expression ? while calc(50% - 8px) is a percentage followed by a subtraction operator and a length. Likewise, calc(8px + -50%) is treated as a length followed by an addition operator and a negative percentage.
The * and / operators do not require whitespace, but adding it for consistency is both allowed and recommended.

https://developer.mozilla.org/en-US/docs/Web/CSS/calc

Staraj się nie korzystać z W3Schools, dlaczego - przeczytaj:

https://forum.pasja-informatyki.pl/34559/w3...ywej-propagandy
https://www.webkrytyk.pl/2017/10/29/w3schools-com/
  Forum: Przedszkole · Podgląd postu: #1242246 · Odpowiedzi: 3 · Wyświetleń: 276

Neutral
Napisane: 30.05.2019, 16:31:15





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Przepisz część kodu z JQuery na JavaScript lub załącz tę bibliotekę, np. taką:

  1. <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

Musisz umieścić ten kod w takim miejscu, żeby najpierw kod z tej biblioteki został odczytany, a dopiero później inny kod używający tej biblioteki JQuery.

Ogólnie, to naciśnij F12 i sprawdź jakie się pojawiają błędy w konsoli deweloperskiej.
  Forum: Przedszkole · Podgląd postu: #1242259 · Odpowiedzi: 3 · Wyświetleń: 441

Neutral
Napisane: 5.05.2019, 23:41:53





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

  1. INSERT INTO ab_prim (id, name, value) (SELECT NULL, (case when name = 'a' then 'b' end), value FROM ab);


  1. INSERT INTO ab_prim (id, name, value) (SELECT NULL, (case when name = 'a' then 'b' end), value FROM ab WHERE name = 'a');


Trzeba pamiętać pomiędzy różnicą tego operator case, a tego case.
  Forum: Przedszkole · Podgląd postu: #1240549 · Odpowiedzi: 3 · Wyświetleń: 411

Neutral
Napisane: 13.01.2019, 01:00:19





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

  1. <?php
  2. $array = [
  3. [
  4. "name_file" => 50,
  5. "room" => [
  6. "nr_room" => NULL,
  7. "nr_invest" => []
  8. ]
  9. ]
  10. ];
  11.  
  12. echo "<pre>";
  13. print_r($array); // #1
  14. echo "</pre>";
  15.  
  16. $array[] = ["name_file" => 60, "room" => ["nr_room" => NULL, "nr_invest" => []]];
  17.  
  18. echo "<pre>";
  19. print_r($array); // #2
  20. echo "</pre>";
  21.  
  22. $array[1]["room"]["nr_room"] = 100;
  23.  
  24. echo "<pre>";
  25. print_r($array); // #3
  26. echo "</pre>";
  27. ?>


#1:

Kod
Array
(
    [0] => Array
        (
            [name_file] => 50
            [room] => Array
                (
                    [nr_room] =>
                    [nr_invest] => Array
                        (
                        )

                )

        )

)


#2:

Kod
Array
(
    [0] => Array
        (
            [name_file] => 50
            [room] => Array
                (
                    [nr_room] =>
                    [nr_invest] => Array
                        (
                        )

                )

        )

    [1] => Array
        (
            [name_file] => 60
            [room] => Array
                (
                    [nr_room] =>
                    [nr_invest] => Array
                        (
                        )

                )

        )

)


#3:

Kod
Array
(
    [0] => Array
        (
            [name_file] => 50
            [room] => Array
                (
                    [nr_room] =>
                    [nr_invest] => Array
                        (
                        )

                )

        )

    [1] => Array
        (
            [name_file] => 60
            [room] => Array
                (
                    [nr_room] => 100
                    [nr_invest] => Array
                        (
                        )

                )

        )

)
  Forum: Przedszkole · Podgląd postu: #1238502 · Odpowiedzi: 4 · Wyświetleń: 837

Neutral
Napisane: 23.11.2018, 01:53:32





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Do czego chcesz przypisać rezultat? Do kilku zmiennych, do tablicy, do listy?

Zakładając, że zapytaniem uzyskałeś tablicę, to możesz posłużyć się listą i rozbić ją na kilka zmiennych.

  1. list($x, $y, $z) = $dbrow;


Argumenty w liście oznaczają kolejno numery w tablicy i w ten sposób argument przypisuje sobie wartość zmiennej tablicowej.

Jeśli chodzi Ci o coś innego, to możesz z poziomu HTML utworzyć tablicę za pomocą:

  1. <input type="checkbox" name="id_example1[]" value="apple"/>
  2. <input type="checkbox" name="id_example1[]" value="pear"/>
  Forum: Przedszkole · Podgląd postu: #1237855 · Odpowiedzi: 7 · Wyświetleń: 606

Neutral
Napisane: 26.11.2018, 01:20:17





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

  1. <select id="trees">
  2. <option value="standardowa">Standardowa</option>
  3. <option value="miedziana">Miedziana</option>
  4. <option value="aluminiowa">Aluminiowa</option>
  5. <option value="platynowa">Platynowa</option>
  6. <option value="pozłacana">Pozłacana</option>
  7. <option value="posrebrzana">Posrebrzana</option>
  8. <option value="plastikowa">Plastikowa</option>
  9. <option value="gumowa">Gumowa</option>
  10. <option value="stalowa">Stalowa</option>
  11. <option value="anonymous">Anonymous</option>
  12.  
  13. <select id="tree_type">
  14. <option value="sr_rury300">300</option>
  15. <option value="sr_rury250">250</option>
  16. <option value="sr_rury200">200</option>
  17. <option value="sr_rury150">150</option>
  18. <option value="sr_rury100">100</option>
  19. <option value="sr_rury50">50</option>


Kod
const arr = [
[0, 3, 4],
[1],
[2],
[3],
[4],
[5],
[6, 3, 4],
[7, 0, 1, 2],
[8, 0, 1, 2],
[9, 0, 1, 2, 3, 4, 5]
];

function get_el_id(id) {
    return document.getElementById(id);
}

var x = [];

function loop_options(option) {
    
    if(x.length > 1) {
        x.splice(1,1);
        x.push(option.slice());
    } else {
        x.push(option.slice());
    }
        
    x = x.reverse();
        
    if(x.length > 1) {
        for(var j=1;j<x[1].length;j++) {
            get_el_id('tree_type').children[x[1][j]].disabled = false;
        }
    }
    
    for(var i=1;i<option.length;i++) {
        get_el_id('tree_type').children[option[i]].disabled = true;
    }

}

var blank_option2 = false;

function first_non_disabled(option, incrementator, recursive) {

    if(option.length-1===get_el_id('tree_type').children.length) {
        blank_option2 = true;
        let new_option = document.createElement('option');
        new_option.selected = true;
        get_el_id('tree_type').add(new_option);
        get_el_id('tree_type').disabled = true;
    } else {
        if(blank_option2 === true) {
            blank_option2 = false;
            get_el_id('tree_type').children[get_el_id('tree_type').children.length-1].remove();
            get_el_id('tree_type').disabled = false;
        }

        if(option[recursive]!==incrementator) {    
            get_el_id('tree_type').children[incrementator].selected = true;
        } else {
            recursive++;
            incrementator++;
            first_non_disabled(option, incrementator, recursive);
        }
    }
    
}

function disable_options() {
    arr.forEach(function(option) {
        
        if(option[0] === get_el_id('trees').selectedIndex) {
            loop_options(option);
            first_non_disabled(option, 0, 1);
        }
        
    });
}

disable_options();

get_el_id('trees').addEventListener('change', disable_options, false);


Masz, proszę. Tak jak chciałeś, dopisałem nowy "moduł" do kodu. Jeśli będziesz dodawać nowe opcje do select'a, to będziesz musiał też modyfikować tablicę arr.

Od elementu jeden i dalej w podtablicy możesz umieszczać indeksy option'a, który ma być zablokowany (disabled), przykład:

  1. <select id="trees">
  2. <option value="oak">oak</option>
  3. <option value="beech">beech</option>
  4. <option value="apple tree">apple tree</option>
  5. <option value="pear tree">pear tree</option>
  6. <option value="cherry tree">cherry tree</option>
  7. <option value="hazel">hazel</option>
  8.  
  9. <select id="tree_type">
  10. <option value="conifer">conifer1</option>
  11. <option value="conifer">conifer2</option>
  12. <option value="deciduous">deciduous1</option>
  13. <option value="deciduous">deciduous2</option>

Kod
const arr = [
   [0, 1, 3]
];

Jeśli wybierzesz opcję "oak", czyli zero (0), to wtedy zablokowane zostaną indeksy jeden i trzy (1, 3), czyli "conifer2" i "deciduous2".

Powyższy kod dla wybranego option'a o indeksie zero z select'a pierwszego zablokuje możliwość wyboru select'owi drugiemu indeksy jeden i trzy. W ten sposób właśnie umieszczaj dane w tej tablicy. Najpierw indeks option'a w pierwszym select i dalej indeksy, które będą blokowane w drugim select. Jeśli nic, nie ma być zablokowane w drugim select, to wtedy możesz umieścić sam tylko indeks, przykład:
Kod
const arr = [
   [5]
];

Ten zapis w kodzie nie zablokuje żadnego option'a w select drugim, ponieważ jest podany tylko indeks pierwszego option'a (5 - hazel), a opcje do zablokowania nie są podane, więc nic nie zostanie zablokowane w drugim select.
  Forum: Przedszkole · Podgląd postu: #1237919 · Odpowiedzi: 49 · Wyświetleń: 2 609

Neutral
Napisane: 4.07.2018, 20:16:14





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

https://httpd.apache.org/docs/2.4/mod/mod_r...tml#rewritecond

RewriteCond Directive

Description: Defines a condition under which rewriting will take place
Syntax: RewriteCond TestString CondPattern [flags]

...*

%{ENV:variable}, where variable can be any environment variable, is also available. This is looked-up via internal Apache httpd structures and (if not found there) via getenv() from the Apache httpd server process.

https://httpd.apache.org/docs/2.4/custom-error.html

...*

REDIRECT_ environment variables are created from the environment variables which existed prior to the redirect. They are renamed with a REDIRECT_ prefix, i.e., HTTP_USER_AGENT becomes REDIRECT_HTTP_USER_AGENT.

REDIRECT_URL, REDIRECT_STATUS, and REDIRECT_QUERY_STRING are guaranteed to be set, and the other headers will be set only if they existed prior to the error condition.

None of these will be set if the ErrorDocument target is an external redirect (anything starting with a scheme name like http:, even if it refers to the same host as the server).

Customizing Error Responses
Własna odpowiedź na błąd

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteCond - określa warunek pod którym przepisanie będzie miało miejsce.
% - określa chyba zmienną server'a.
ENV - prefix mówiący o możliwości występowania po nim zmiennej środowiskowej. Mogą występować zwykłe zmienne jak i środowiskowe.
REDIRECT_STATUS - zmienna środowiskowa, ponieważ zaczyna się od prefix'u REDIRECT_.
^$ - nakazuje łańcuchowi znaków (string), aby zaczynał się od pustego string'a i kończył na pustym string'u.

Jeśli chodzi o różnicę między "^$", a "", to jest i to znaczna. Pierwszy wzorzec łapie wszystko, co zaczyna się od pustego string'a i kończy na pustym string'u, czyli nie wyłapie np. tego: " ", natomiast drugi wzorzec wyłapie ten string jako prawidłowy (ten którego chcieliśmy wyłapać).

Dla zwizualuowania/zwizualizowania:

  1. <?php
  2. var_dump(preg_match('@^gooseberry$@','parsley gooseberry lettuce'));
  3. // int(0)
  4. var_dump(preg_match('@gooseberry@','parsley gooseberry lettuce'));
  5. // int(1)
  6. var_dump(preg_match('@^gooseberry$@','gooseberry'));
  7. // int(1)
  8. var_dump(preg_match('@gooseberry$@','parsley gooseberry'));
  9. // int(1)
  10. var_dump(preg_match('@^gooseberry@','gooseberry lettuce'));
  11. // int(1)
  12. var_dump(preg_match('@^gooseberry@','parsley gooseberry lettuce'));
  13. // int(0)
  14.  
  15. // int(0) - niezgodne ze wzorcem
  16. // int(1) - zgodne ze wzorcem
  17. ?>


W celu uzyskania pełnej lokalnej ścieżki systemu plików z żądania w kontekście per-server, użyj na podstawie look-ahead %{LA-U:REQUEST_FILENAME} do ustalenia końcowej wartości (razem) z REQUEST_FILENAME.


O ile dobrze zrozumiałem, to jeśli chcesz ze zwykłej zmiennej zrobić zmienną środowiskową to musisz dodać prefix REDIRECT_ i obok niego dopisać zwykłą zmienną np. STATUS i wychodzi wtedy zmienna środowiskowa REDIRECT_STATUS. Wyjątkiem od tej reguły jest chyba tylko to: %{ENV:variable}, choć nie jestem tego pewien, musiałbyś doczytać.

https://httpd.apache.org/docs/2.4/env.html

URL Rewriting

The %{ENV:variable} form of TestString in the RewriteCond allows mod_rewrite's rewrite engine to make decisions conditional on environment variables. Note that the variables accessible in mod_rewrite without the ENV: prefix are not actually environment variables. Rather, they are variables special to mod_rewrite which cannot be accessed from other modules.



Co do Twojego problemu to ...

Jeśli zmienna środowiskowa REDIRECT_STATUS będzie pusta to wykonuj/nie wykonuj przekierowywania. Oznacza to tyle, to co podałem w przykładzie powyżej. Zatem linijka/linia o którą pytasz jest napisana tak, aby nie było zbędnych przekierowań. Reasumując, jeśli we wzorcu (pattern) jest ^$, to wtedy string dla którego nastąpi przekierowywanie jest pusty absolutnie pusty, bezwzględnie (ale to tylko umowa). Jeśli w string'u znajdzie się conajmniej jeden znak (character), to nie nastąpi przekierowywanie, czy przepisanie string'a na inny adres, czy coś w tym stylu.

https://httpd.apache.org/docs/2.4/mod/mod_r...tml#rewritecond :

Cytat
The RewriteCond directive defines a rule condition. One or more RewriteCond can precede a RewriteRule directive. The following rule is then only used if both the current state of the URI matches its pattern, and if these conditions are met.

TestString is a string which can contain the following expanded constructs in addition to plain text:


Dyrektywa RewriteCond określa warunek reguły. Jeden lub więcej RewriteCond może poprzedzać
dyrektywę RewriteRule. Poniższa reguła jest wówczas tylko użyta jeśli zarówno bieżący stan z URI
pasują wzorem, i jeśli te warunki są spełnione.

Cytat
w jaki sposób ta linijka:
...*
Powoduję "naprawę" tego błędu.


Mi się wydaje, że dzieje się tak dlatego, że nie masz regex'ów odpowiednich w RewriteCond. Spróbuj może tak:
Kod
RewriteCond %{REQUEST_FILENAME} ^$ !-d
RewriteCond %(REQUEST_FILENAME) ^$ !-f
RewriteCond %(REQUEST_FILENAME) ^$ !-l

RewriteRule ^(.+)$ /1/public/index.php?url=$1 [QSA,L]

Chodzi oto, że ta jedna linia o którą pytasz powoduje brak przekierowania wszystkich URI chyba. Dlatego więc zamiast w kilku miejscach pisać ... ^$ ..., można machnąć to w jednej linii i nie dopisywać tego w kolejnych, tak mi się wydaje.

Wracając do sedna, masz najprawdopodobniej nieskończoną pętlę przekierowań i wtedy uruchamiane jest zabezpieczenie, które temu zapobiega.
Nie możesz mieć nieskończonej pętli chyba, więc musisz dodać warunek, który zakończy n'te przekierowanie i "wyjdzie" ze skryptu/pliku/pętli.

Cytat
LimitInternalRecursion prevents the server from crashing when entering an infinite loop of internal redirects or subrequests. Such loops are usually caused by misconfigurations.

Resztę sam doczytaj (w dokumentacji).

LimitInternalRecursion Directive
Description: Determine maximum number of internal redirects and nested subrequests
Syntax: LimitInternalRecursion number [number]
Default: LimitInternalRecursion 10
Context: server config, virtual host

LimitInternalRecursion Directive

Masz ponad 10 cykli czegoś tam i wyrzuca Ci błąd, jeśli chcesz aby nie wyrzucało Ci błędu, a nie masz pętli nieskończonej to możesz to przestawić na np. 15 cykli, jeśli się na tyle da ustawić.

Spróbuj napisać te trzy linie w jednej, np. tak:

Kod
RewriteCond %(REQUEST_FILENAME) ^$ !-d !-f !-l



REDIRECT_URL, REDIRECT_STATUS, and REDIRECT_QUERY_STRING są gwarantowane do ustawienia, i inne
nagłówki zostaną ustawione tylko jeśli istniały wcześniej do warunku błędu.

Musiałbyś przeczytać dokumentację potrzebnych ci rzeczy od deski do deski, aby załapać o co chodzi
z tymi nieskończonymi przekierowaniami.

W czym masz opakowany ten kod w:
Kod
<IfModule mod_rewrite.c>
# ...
</IfModule>

Czy w czymś innym?

Czy zmieniałeś może plik httpd.conf, czy jakikolwiek inny odpowiedzialny za te przekierowania, jeśli tak to podaj te zmiany.



Moje tłumaczenie oraz translate google trochę.

https://httpd.apache.org/docs/2.4/expr.html#vars
https://httpd.apache.org/docs/2.4/rewrite/intro.html#regex
https://httpd.apache.org/docs/2.4/custom-error.html

https://httpd.apache.org/docs/2.4/mod/mod_l....html#customlog
https://httpd.apache.org/docs/2.4/mod/mod_status.html
https://httpd.apache.org/docs/2.4/rewrite/flags.html
https://wiki.apache.org/httpd/RewriteCond
https://www.w3.org/International/questions/...taccess-charset
https://httpd.apache.org/docs/2.4/mod/quickreference.html
https://httpd.apache.org/docs/current/mod/core.html#ifmodule
https://httpd.apache.org/docs/2.4/mod/quickreference.html

...* - ominięcie tekstu
  Forum: Przedszkole · Podgląd postu: #1235070 · Odpowiedzi: 2 · Wyświetleń: 507

Neutral
Napisane: 29.06.2018, 14:48:04





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

To jest chyba niemożliwe z punktu CSS i HTML, musiałbyś do tego dołączyć jeszcze np. JS, żeby móc to wykonać.

W ogóle, to w zapisie masz chyba błąd w składni, składnia border jest taka:

Cytat
border: medium dashed green;

https://developer.mozilla.org/en-US/docs/Web/CSS/border

Najpierw trzeba podać wysokość/grubość linii, następnie styl i na końcu kolor.

Pseudo-selektory i selektory o ile mi wiadomo mogą odwoływać się tylko i wyłącznie do następników, a nie poprzedników. Nawet na chat'cie IRC na kanale (FREENODE) #html się o tym upewniłem. Jak sama nazwa wskazuje są to kaskadowe arkusze stylów, działają jak kaskada. Wyobraź sobie wodę, która spływa z takich zrębów/kaskad. Woda płynie tam gdzie jest najniżej i chyba tak właśnie działa CSS, może odwoływać się tylko w dół kodu, nie w górę, to nie język programowania. Jedynym trick'iem jaki mógłbyś wykonać to moim zdaniem połączenie input[type="checkbox"] z label. Ale wtedy musiałbyś chyba tylko klikać na tekst, który byłby w label, a nie w input[type="text"] nadając mu focus. Żeby problem rozwiązać to chyba trzeba by było zastosować pozycję absolutną i/lub relatywną, czy coś w tym stylu. Dodatkowo można by użyć pseudoklas jakimi są ::after i ::before, choć tego do końca pewien nie jestem.

Reasumując, aby to wykonać potrzebne jest Tobie nadanie focus'a dla label i dla input[type="text"], ponieważ wtedy zaznaczy Ci się input[type="checkbox"]. Gdy checkbox zostanie zaznaczony, to wykona się akcja, czyli np. zostaną uaktywnione napisane przez Ciebie style.

Ale tak jak pisałem wcześniej, nie wiem, czy to możliwe z poziomu CSS'a i HTML'a, więc za dużo powiedzieć nie mogę.

Kod
body {
   background:grey;
}

form {
    border:1px solid grey;
    padding:30px;
}

input#box {
    display:none;
}


input#box:checked + form.form1 {
    border:1px solid green;
    background:orange;
}


  1.  
  2. <input type="checkbox" id="box"/>
  3.  
  4. <form class="form1">
  5.  
  6. <label for="box">click</label>
  7. <input type="text"/>
  8.  
  9. </form>
  10.  
  11. </body>


Można to napisać bez tych trick'ów, o ile z tymi trick'ami w ogóle się da, to możesz użyć pseudo-selector'a :focus-within.

Kod
.form1 {
    border:5px solid grey;
    padding:30px;
}

.form1:focus-within{
    background:green;
    border:5px solid black;
}


  1. <form class="form1">
  2. <input type="text"/>
  3. </form>

https://css-tricks.com/almanac/selectors/f/focus-within/

Link1, link2, link3, link4, link5, link6.
  Forum: Przedszkole · Podgląd postu: #1234924 · Odpowiedzi: 8 · Wyświetleń: 608

Neutral
Napisane: 13.06.2018, 19:38:10





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

  1. <?php
  2. for($j=1; $j<=15; $j++){
  3. $sql = "INSERT INTO odpowiedzi values ('".${'zawartosc'.$i}[0]."');";
  4. }
  5. ?>


Teraz robisz chyba zmienne zmiennych (variables variable) tak mi się wydaje. Zamiast pisać tak:
  1. ${'my_var4'} = 'x';

, możesz pisać tak:
  1. $my_var4 = 'x';

Poczytaj o różnicach.

http://php.net/manual/en/language.variables.variable.php

Nie wiem, czy nie lepiej byłoby w Twoim przypadku napisać to na tablicach, aniżeli tworzyć dynamicznie zmienne.
  Forum: Przedszkole · Podgląd postu: #1234428 · Odpowiedzi: 2 · Wyświetleń: 703

Neutral
Napisane: 12.06.2018, 13:10:45





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Jak masz input type radio, to musisz im wszystkim nadać ten sam name.
  1. <form method="post" action="">
  2. <input type="radio" name="f1" value="v1" />
  3. <input type="radio" name="f1" value="v2" />
  4. <input type="radio" name="f1" value="v3" />
  5. <input type="radio" name="f1" value="v4" />
  6. <input type="submit" />
  7. </form>

  1. <?php
  2. $f1 = $_POST['f1'] questionmark.gif NULL;
  3. // Zamiast tej emotikony jest to: ? ?, bez spacji. PHP doc.
  4. if($f1=='v1') {
  5. echo 'You selected '.$f1;
  6. }
  7.  
  8. ?>
  Forum: Przedszkole · Podgląd postu: #1234337 · Odpowiedzi: 2 · Wyświetleń: 340

Neutral
Napisane: 11.06.2018, 21:05:15





Grupa: Zarejestrowani
Postów: 286
Dołączył: 10.01.2016

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

Dodaj może:
Kod
body {
   margin:0;
   padding:0;
}
.

Wyjeżdżasz za 100% szerokości strony, to wtedy ci się pojawia poziomy scroll.
  Forum: Przedszkole · Podgląd postu: #1234306 · Odpowiedzi: 3 · Wyświetleń: 311

2 Stron V   1 2 >

New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 17:58