Witam, mam problem z walidacją pola select. Pole domyślnie posiada zablokowaną wartość "Select..." aby nie przesyłać pustej wartości. Normalnie w takim przypadku użyłbym funkcji isset()
i sprawdził czy istnieje taka zmienna. I to zawsze działało jak pisałem kod strukturalny. Natomiast nie wiem jak użyć tego pisząc obiektowo. Przeglądając Internet natrafiłem na coś takiego jak: "Null Coalesce Operator". Niestety po zastosowaniu go nadal jest tak samo, tzn. interpreter rzuca mi notatką w stylu:
Notice: Undefined index: select in
Ma ktoś jak poprawić poniższy kod gdy nie wybiorę nic z pola select
wyświetlił się komunikat o błędzie?
Załączam cały przykładowy kod:
Plik widoku:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Test3</title>
</head>
<body>
<form action="test3.php" method="post">
<input type="text" name="input">
<select name="select">
<option selected="selected" disabled="disabled">Select...</option>
<option>Apple</option>
<option>Raspberry</option>
<option>Banana</option>
<option>Pineaple</option>
</select>
<button type="submit" name="button">Send</button>
</form>
</body>
</html>
Plik modelu(klasa):
<?php
class Test {
private $input, $select;
public function setInput($input) {
return $this->input = $input;
}
public function setSelect($select) {
return $this->select = $select;
}
public function getInput() {
return $this->input;
}
public function getSelect() {
return $this->select;
}
public function doFilter() {
$this->input = trim($this->input);
$this->select = trim($this->select);
}
public function doValid() {
$this->doFilter();
$errors = array();
if (strlen($this->input) == 0) {
$errors[] = 'Empty input';
}
$select = $this->select ?? $errors[] = 'Empty select';
var_dump($select);
if (count($errors)) {
foreach ($errors as $showErrors) {
echo '<div class="error">'.$showErrors.'</div>';
//return false;
}
}
}
}
Wywołanie(kontroller):
<?php
$test = new Test;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$test->setInput($_POST['input']);
$test->setSelect($_POST['select']);
if ($test->doValid()) {
//if ($test->addCode()) {
# If valid is true - send query and information
//echo '<p class="success">Correctyl added new code.</p>';
//}
}
echo '
<p>Input value: '.$test->getInput().'</p>
<p>List value: '.$test->getSelect().'</p>
';
}
?>