Переадресация заголовка после проверки формы в PHP

Я пытаюсь использовать этот код как часть обработки формы:

<?php if(isset($_POST['senderEmail'])) { try { require '_php/_security/validation.php'; //SEE BELOW $rules = array( 'senderEmail' => 'validEmail', 'emailTextbox' => 'validTextbox', ); $validation = new Validation(); if ($validation->validate($_POST, $rules) == TRUE) { require("_php/database/dbProcessing.php"); //Form Proccessing for database inclusion } else { foreach($validation->emailErrors as $error){ $emailErrors[] = $error; $_SESSION['$emailErrors'] = $emailErrors; header('Location:indexmobile.php#emailErrors'); die('ABORT!'); } } } catch (PDOException $e) { $error = 'Error adding elements to database: ' . $e->getMessage(); echo "Error: " . $error; exit(); } exit(); } ?> 

Validation.php, где я выполняю мою проверку, имеет следующее:

 <?php class Validation { public $errors = array(); public function validate($data, $rules) { $valid = TRUE; foreach ($rules as $fieldname => $rule) { $callbacks = explode('|', $rule); foreach ($callbacks as $callback) { $value = isset($data[$fieldname]) ? $data[$fieldname] : NULL; if ($this->$callback($value, $fieldname) == FALSE) $valid = FALSE; } } return $valid; } public function validEmail($value, $fieldname) { $valid = !empty($value); if ($valid == FALSE) { $this->emailErrors[] = "The $fieldname is required"; return $valid; } else { $valid = filter_var($value, FILTER_VALIDATE_EMAIL); if ($valid == FALSE) $this->emailErrors[] = "The $fieldname needs to be a valid email"; return $valid; } } public function validTextbox($value, $fieldname) { $valid = !empty($value); if ($valid == FALSE) { $this->emailErrors[] = "The $fieldname is required"; return $valid; } else { $whitelist = '/^[a-zA-Z0-9 ,\.\+\\n;:!_\-@]+$/'; $textarea = strip_tags($value); $textarea = mysql_real_escape_string($textarea); $valid = preg_match($whitelist, $textarea); if ($valid == FALSE) $this->errors[] = "The $fieldname contains invalid characters"; return $valid; } } } 

После использования этого у меня проблемы с перенаправлением (я думаю). Далее кажется, что Im имеет ошибки в валидации. Мои вопросы таковы:

  1. Правильно ли я делаю перенаправление заголовка? Я прочитал, что «header () должен быть вызван до того, как будет отправлен какой-либо фактический вывод …». Так почему же эта перенаправленная неверна? как сделать перенаправление, если мне нужно показать / отправить что-то на перенаправленную страницу?
  2. Функция validTextbox всегда заканчивает ошибку, что поле пусто. Почему так?
  3. Является ли весь процесс проверки формы хорошим способом проверки полей формы (что я узнал из просмотра онлайн-учебника)? Что лучше?
  4. Что-то не так с сообщением об ошибках в этом случае?

Спасибо за тех, кто отвечает. Я новичок в PHP и стараюсь изучить язык.

1 – Существует несколько способов передать сообщение на страницу, на которую вы перенаправляете. Один через $_GET как это

 $message="Some message for the next page."; $message=urlencode($message); header("Location:page.php?message=".$message); 

затем на стр ..php

 if(!empty($_GET['message'])) { $_GET['message']; } 

аналогичным образом вы также можете использовать сеанс (менее безопасный)

 $_SESSION['message']='some other message'; 

затем на стр ..php

 if (!empty($_SESSION['message'])) { echo $_SESSION['message']; unset($_SESSION['message']); } с if (!empty($_SESSION['message'])) { echo $_SESSION['message']; unset($_SESSION['message']); } 

2 – Мне нужно будет увидеть, что вы передаете в свою функцию validate . Вы должны сделать var_dump $_POST и добавить это к вашему вопросу.

3 – Это зависит от ваших критериев. Если вы просто проверяете на пустоту свой избыток. Я не знаю, какой текст вам нужен / считается действительным, но регулярное выражение является разумным способом обеспечения проверки.

4 – См. № 2.