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

Dodawanie klasy do elementu w PHP

Object Storage Arubacloud
0 głosów
348 wizyt
pytanie zadane 4 października 2020 w PHP przez Antoni2422 Użytkownik (570 p.)
Witam,

Czy da się w kodzie PHP poprzez jakąś funkcję nadać klasę do elementu? Mam w PHP napisany system walidacji i jak coś jest źle to input ma zmienić kolor więc musi otrzymać odpowiednią klasę.

1 odpowiedź

0 głosów
odpowiedź 4 października 2020 przez ScriptyChris Mędrzec (190,190 p.)

Na dobrą sprawę wystarczy sam CSS - użyj pseudo klasy :invalid, żeby ostylować input odrzucony przez walidację. Jeśli chodzi o dynamiczne nadanie klasy, to w PHP tego nie zrobisz, bo kod jest uruchomiony po stronie serwera - więc nie ma dostępu do DOMu strony. Do tego potrzebujesz użyć JavaScriptu; klasę dodasz metodą classList.add

komentarz 4 października 2020 przez Antoni2422 Użytkownik (570 p.)
edycja 4 października 2020 przez Antoni2422

Nie wiem czy ja to jakoś źle wpisuje, ale nie działa pseudo klasa :invalid, za to działa :valid. ale nie tak jak ja bym chciał.

input:invalid {
    border: 2px solid red;
 
input:invalid {
    border: 2px solid green;
  }

 

komentarz 4 października 2020 przez ScriptyChris Mędrzec (190,190 p.)
Pokaż HTML tego inputa - może nie ustawiłeś mu atrybutów walidacyjnych.

Tutaj jest prosty przykład (słowo "test" przechodzi walidację): https://codepen.io/ScriptyChris/pen/PoNMexj
komentarz 4 października 2020 przez Antoni2422 Użytkownik (570 p.)

Zrobiłem to trochę inacze. W ifie PHP-a ustawiłem zmienną $_SESSION['incorrect'] = "incorrect"; a ogólnie $_SESSION['correct'] = "correct"; i w inpucie do klasy dodałem php :

<input type="text" name="login" class="<?php if (isset($_SESSION['niepoprawny_login'] {print $_SESSION['incorrect'];} else {$_SESSION['correct'];}>

Teraz jeżeli jest niepoprawny login ustawia klasę 'incorrect', a w przeciwnym razie correct. Klasy wystylowałem w css i działa poprawnie. smiley

 

Dzięki za pomocwink

komentarz 4 października 2020 przez ScriptyChris Mędrzec (190,190 p.)

To mi wygląda na zmianę klasy na każde przeładowanie strony - a więc nie jest to dynamiczne zachowanie, jak w przypadku użycia selektora :invalid w CSS lub użycia JSa do przełączania klas.

komentarz 4 października 2020 przez Antoni2422 Użytkownik (570 p.)
<input type="text" value="<?php if (isset($_SESSION['fr_login'])){print $_SESSION['fr_login']; unset($_SESSION['fr_login']);}?>" name="login" class="<?php if (isset($_SESSION['e_login'])) {print $_SESSION['eic'];} else {print $_SESSION['cic'];}?>"><br>
                <?php
                    if (isset($_SESSION['e_login']))
                    {
                        echo '<div class="error">'.$_SESSION['e_login'].'</div>';
                        unset($_SESSION['e_login']);
                    }
                ?>

Taki jest mój HTML. Nie wiem jak podpiąć ifa z php do js, a invalid nie działa nadal.

 

A tak wygląda if w PHP:

$login = $_POST['login'];

        if ((mb_strlen($login) < 3) || (mb_strlen($login) > 20))
        {
            $everythink_OK = false;
            $_SESSION['e_login'] = 'Nazwa użytkownika musi posiadać od 3 do 20 znaków!';
            $_SESSION['eic'] = "errorValidation";
        }

 

komentarz 4 października 2020 przez ScriptyChris Mędrzec (190,190 p.)

Co w ogóle sprawdza ta walidacja? Ja widzę sprawdzenie długości znaków (od 3 do 20) i inne, nic nie mówiące, oznaczenia fr_login oraz cic. Długość tekstu w <input> można zwalidować atrybutami minlength/maxlength i to połączyć z selektorem :invalid.

Selektor :invalid Ci nie działa, bo nie ustawiłeś atrybutów walidacyjnych na inpucie. Te atrybuty uniemożliwiają użycie inputa w inny sposób niż wskazuje na to atrybut i/lub - w przypadku niewłaściwego użycia - oznaczają input jako błędny (blokując też wysłanie formularza, do którego należy dany input), co pozwala złapać taki element przez pseudoklasę :invalid, albo na event invalid w JavaScripcie i dzięki temu pokazać użytkownikowi jakiś komunikat lub w preferowany sposób ostylować input.

komentarz 4 października 2020 przez Antoni2422 Użytkownik (570 p.)
1.Mam type="text";

2.To jeden z 20 ifów sprawdzających
komentarz 4 października 2020 przez ScriptyChris Mędrzec (190,190 p.)

Sam type="text" niewiele wpływa na walidację - poczytaj o podlinkowanych atrybutach, które decydują o walidacji.

Podobne pytania

0 głosów
1 odpowiedź 120 wizyt
0 głosów
1 odpowiedź 191 wizyt
pytanie zadane 15 sierpnia 2017 w PHP przez chmod96 Obywatel (1,380 p.)
0 głosów
1 odpowiedź 115 wizyt

92,555 zapytań

141,403 odpowiedzi

319,559 komentarzy

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

...