• 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

VPS Starter Arubacloud
0 głosów
812 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 708 wizyt
pytanie zadane 30 sierpnia 2017 w PHP przez chmod96 Obywatel (1,380 p.)
0 głosów
1 odpowiedź 296 wizyt
pytanie zadane 26 lutego 2023 w PHP przez gatka84 Bywalec (2,150 p.)
0 głosów
1 odpowiedź 278 wizyt
pytanie zadane 3 maja 2019 w PHP przez Webmaster123 Początkujący (440 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...