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

Walidacja pola typu select...option PHP

Object Storage Arubacloud
0 głosów
852 wizyt
pytanie zadane 16 stycznia 2017 w PHP przez dawid4157 Nowicjusz (220 p.)

Witam,
w jaki sposób sprawdzić czy pole typu select jest puste przy pomocy funkcji empty()?

Mam tak:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Kolor pojazdu</title>
</head>
<body>
    <form action="add-car.php" method="post">
        <p>Kolor pojazdu:
        <select name="car_color">
            <option selected="selected" disabled="disabled">Kolor pojazdu...</option>
            <option value='Czerwony'>Czerwony</option>
            <option value='Zielony'>Zielony</option>
            <option value='Żółty'>Żółty</option>
            <option value='Niebieski'>Niebieski</option>
            <option value='Granatowy'>Granatowy</option>
            <option value='Fioletowy'>Fioletowy</option>
            <option value='Czarny'>Czarny</option>
            <option value='Bordowy'>Bordowy</option>
        </select></p>
        <button type="submit" name="addCar">Dodaj kolor pojazdu</button>
    </form>
</body>
</html>
<?php
    if(isset($_POST['addCar'])){
        $carColor = trim($_POST['car_color']);
        if(empty($carColor)){
            echo '<div class="error">Musisz wybrać kolor pojazdu.</div>';
        }
    }
?>

Otrzymuję informację:

Notice: Undefined index: car_color in /opt/lampp/htdocs/vehicle/garage/new-car.php on line 47

Co robię nie tak?

2 odpowiedzi

+1 głos
odpowiedź 17 stycznia 2017 przez efiku Szeryf (75,160 p.)

Piszmy już w PHP7 sad

<?php
    $carColor = $_POST['car_color'] ?? "default_color";
    echo $carColor;

 

https://3v4l.org/R4bu4

komentarz 17 stycznia 2017 przez dawid4157 Nowicjusz (220 p.)

Ok, dzięki za podpowiedź. Faktycznie tego nie znałem. Według tego co podałeś, "skonstruowałem" sobie takie coś:
 

$carColor = $_POST['car_color'] ?? $errors[] = ''.ERROR_SELECT_COLOR.'';



Niby działa lecz nie jest to niczym filtrowane. Gdy chcę wrzucić tam np. funkcję trim() aby pozbyć się białych znaków otrzymuję tą samą informację co wyżej(Notice):
 

$carColor = trim($_POST['car_color']) ?? $errors[] = ''.ERROR_SELECT_COLOR.'';



Dlaczego?

0 głosów
odpowiedź 16 stycznia 2017 przez CzikaCarry Szeryf (75,340 p.)

Najlepiej użyć funkcji isSet()

if(isset($_POST['car_color'])
{
$carColor = $_POST['car_color'];
}
else
{
throw new Exception('$_POST["car_color"] can't be null!');
}

 

1
komentarz 17 stycznia 2017 przez efiku Szeryf (75,160 p.)
Średnio to wygląda. Tu raczej bym zastosował jakąś opcję domyślną, niż rzucał wyjątek. :)
komentarz 17 stycznia 2017 przez CzikaCarry Szeryf (75,340 p.)
Ja już się przyzwyczaiłem do rzucania wyjątków gdzie się da, przynajmniej mogę szybko problem zdiagnozować, jeśli nie zrobi tego PHPstorm :D
komentarz 17 stycznia 2017 przez efiku Szeryf (75,160 p.)

Wyjątki nie są do tego, by traktować je jak logger.  :/ 

 jeśli nie zrobi tego PHPstorm :D

Przecież jest xdebug, phpunit.. ;) 

Podobne pytania

+1 głos
0 odpowiedzi 717 wizyt
pytanie zadane 30 sierpnia 2017 w PHP przez chmod96 Obywatel (1,380 p.)
0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 26 lutego 2023 w PHP przez gatka84 Bywalec (2,150 p.)
0 głosów
1 odpowiedź 284 wizyt
pytanie zadane 3 maja 2019 w PHP przez Webmaster123 Początkujący (440 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 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!

...