Mam plik PHP, który sprawdza dla mnie prosty formularz wpisy. Przypisuję każdy błąd (znaleziony podczas walidacji do zmiennej ($ Name_Errors, $ Phone_erors i $ Email_errors). Każda z tych zmiennych zawiera ciąg ("Wprowadź poprawną nazwę", wprowadź prawidłowy numer telefonu ", i "Wprowadź prawidłowy adres e-mail"). Następnie utworzyłem tablicę zawierającą te zmienne zwane $ błędów. Więc tablica będzie wyglądać tak

$errors = array($name_errors, $phone_errors, $email_errors);

Gdy mam tablicę $ Błędy, które biegną, choć oświadczenie, jak pokazano w poniższym kodzie. Zasadniczo, jeśli znaleziono błędy, instrukcja ma do JSON_ENCODE w tablicy $ błędów i wyjść ze skryptu. Jeśli nie znaleziono błędów, skrypt przejdzie do wysłania poczty. Problemem, który mam, jest to, że macierz, czy tablica jest pusta (tj. Zawierająca wszystkie wartości null, jak potwierdzono za pomocą var_dump()) lub zawierające rzeczywiste wartości błędy, jest zawsze rozpoznawane przez instrukcję IF jako zawierającej dane i zatrzymanie skryptu wyjaśnione powyżej.

 if ($errors != null){

 var_dump($errors);

  echo json_encode( $errors );
    exit;
  };

I oto wyniki, które dostaję z var_dump (tablica), którą kodowanie JSON zawsze uważa, że nie jest równe $ błędów = NULL:

Wynik: [Null, Null, Null] Contact_Form.HTM: 323: 13

1
Hassan 21 luty 2019, 01:31

2 odpowiedzi

Najlepsza odpowiedź

Tablica pełna wartości null nie jest pusta, ani nie jest równa null, jak testujesz. Rozważ to:

$errors = [null, null, null];
echo $errors == null ? "true\n" : "false\n";
echo empty($errors) ? "true\n" : "false\n";

Wynik:

false
false

Zamiast tego możesz przetestować wyjście array_filter($errors), która będzie pustą tablicą, jeśli wszystkie wartości w $errors są null:

echo empty(array_filter($errors)) ? "true\n" : "false\n";

Wynik:

true

Spróbuj więc zmienić kod do:

if (!empty(array_filter($errors))) {

Demo na 3v4l.org
Podręcznik dla array_filter

1
Nick 20 luty 2019, 22:37

Rozważmy to alternatywne podejście: Użyj jednej zmiennej, $errors = []. Po potwierdzeniu twojego wejścia, dodaj wszelkie błędy występujące w odpowiednim klawiszu w tej tablicy, np.

if (!validate($name)) {
    $errors['name'] = 'Please enter a valid name';
}

Wtedy, jeśli nie ma błędów, tablica będzie pusta, tak uwalnie drukowanie staje się trochę prostsze.

if ($errors) {                   // empty array evaluates as false, non-empty as true
   echo json_encode($errors);
   exit;
}

Zbieranie wszystkich błędów w jednej zmiennej, a nie stosując oddzielne, mogą być korzystne. Jednym z nich jest to, kiedy dodasz inne pole formularza, nie będziesz musiał pamiętać, aby dodać zmienną błędów do tablicy, która zbiera wszystkie różne zmienne z błędami.

1
Don't Panic 20 luty 2019, 22:44