2016-01-12 4 views
0

Стоит отметить, что я новичок в php. Я также хотел бы получить ответ на php (если это возможно).Как отображать сообщения об ошибках при перенаправлении?

Вот что я пытаюсь достичь: я хочу перенаправить пользователя, если какие-либо ошибки, которые я проверяю, найдены в форме html/php (которую пользователь видит вначале, где входы уже созданы) с настраиваемыми сообщениями об ошибках, которые поступают из файла отдельно к форме html/php.

Подробности: Пользователь видит форму HTML/PHP, где они вводят имена в формате csv. После того, как они нажимают кнопку create, имена обрабатываются в другом файле только php, где имена проверяются на наличие ошибок и другие подобные вещи. Если обнаружена ошибка, я хочу, чтобы Пользователь был перенаправлен в форму HTML/PHP, где они могут исправлять ошибки и любые соответствующие сообщения об ошибках. После исправления имен пользователь может нажать кнопку «создать пользователя» и снова обработать (без ошибок) и по завершении перенаправить пользователя на страницу, где отображаются имена и такие вещи. Переадресация происходит после отправки заголовков. Из того, что я читал, это не лучшая вещь, но пока это будет для меня.

Код для HTML формы/PHP:

<!DOCTYPE HTML> 
<HTML> 
    <head> 
     <title>PHP FORM</title> 
    </head> 
    <body> 
<form method="post" action="processForm.php"> 

    Name: <input type="text" name="names" required = "required"><br> 
    <input type="submit" value="Create Users" onclick="formInputNames"><br> 

    Activate: <input type="checkbox" name="activate"> 
</form> 
<?php 
// include 'processForm.php'; 
// errorCheck($fullname,$nameSplit,$formInputNames); 
?> 
    </body> 
    </html> 

Я пытался возиться с «включить», но это, кажется, не делать ничего, однако, я все это здесь, чтобы проиллюстрировать то, что я пытаюсь достигать.

Код для процесса:

$formInputNames = $_POST['names']; 

$active = (isset($_POST['activate'])) ? $_POST['activate'] : false; 
//checks if activate checkbox is being used 
$email = '@grabby.com'; 
echo "<br>"; 
echo "<br>"; 

$fullnames = explode(", ", $_POST['names']); 

if ($active == true) { 
    $active = '1'; 
    //sets activate checkbox to '1' if it has been selected 
} 
/*----------------------Function to Insert User---------------------------*/ 
     A Function is here to place names and other fields in database. 
/*-------------------------End Function to Insert User--------------------*/ 

/*-----------------------Function for Errors---------------------*/ 

function errorCheck($fullname,$nameSplit,$formInputNames){ 
    if ($formInputNames == empty($fullname)){ 
     echo 'Error: Name Missing Here: '.$fullname.'<br><br>'; 
     redirect('form.php'); 
    } 
    elseif ($formInputNames == empty($nameSplit[0])) { 
     echo 'Error: First Name Missing in: '.$fullname.'<br><br>'; 
     redirect('form.php'); 
    } 
    elseif ($formInputNames == empty($nameSplit[1])) { 
     echo 'Error: Last Name Missing in: '.$fullname.'<br><br>'; 
     redirect('form.php'); 
    } 
    elseif (preg_match('/[^A-Za-z, ]/', $fullname)) { 
     echo 'Error: Found Illegal Character in: '.$fullname.'<br><br>'; 
     redirect('form.php'); 
    } 
} 

/*-----------------------------End Function for Errors------------------------*/ 

/*--------------------------Function for Redirect-------------------------*/ 

function redirect($url){ 
    $string = '<script type="text/javascript">'; 
    $string .= 'window.location = "' .$url. '"'; 
    $string .= '</script>'; 

    echo $string; 
} 

/*-------------------------End Function for Redirect-----------------------*/ 

// Connect to database 
    I connect to the database here 

foreach ($fullnames as $fullname) { 
    $nameSplit = explode(" ", $fullname); 

      //opens the database 
I Open the database here 

     errorCheck($fullname,$nameSplit,$formInputNames); 

     $firstName = $nameSplit[0];//sets first part of name to first name 
     $lastName = $nameSplit[1];//sets second part of name to last name 
     $emailUser = $nameSplit[0].$email;//sets first part and adds email extension 

     newUser($firstName,$lastName,$emailUser,$active,$conn); 

     redirect('viewAll.php'); 
     //echo '<META HTTP-EQUIV="Refresh" Content="0; URL=viewAll.php">'; 
//if you try this code out, you can see my redirect to viewAll doesn't work when errors are found...I would appreciate help fixing this as well. My immediate fix is using the line under it but I don't like it. 
} 

Все исследования я сделал не получил меня далеко. Я понимаю, что отправка заголовков не является хорошей практикой. Я посмотрел на ob_open (функция php - я думаю, что он был вызван) и не мог понять, как правильно его использовать. Я не мог найти здесь вопрос, который удовлетворял условиям, которые я пытаюсь удовлетворить.

Любая помощь, конечно, appreciated.Thank Вы

EDIT: Это не дубликат "Передача сообщений об ошибках в PHP.
------- Хотя идея аналогична, они представляют собой «Передача сообщений об ошибках в PHP» перед отправкой заголовков. Поэтому это не то же самое.

+0

Хотя идея похожа, они «Передача сообщений об ошибках в PHP», прежде чем заголовки отправляются. Поэтому это не то же самое. – Alei

ответ

0

Сохраните ошибку в сеансе и повторите ее на целевой странице.

Положите session_start() в верхней части кода на странице form.php. Как это:

<?php session_start(); ?> 
<!DOCTYPE HTML> 
<HTML> 
    <head> 

Затем замените эхо ошибки с:

$_SESSION['error'] = 'Error: Name Missing Here: '.$fullname.'<br><br>'; 
redirect('form.php'); 

Используйте это в ваших условиях, а не эхо. Затем на странице form.php:

if (isset($_SESSION['error'])) { 
    echo $_SESSION['error']; 
    unset($_SESSION['error']); 
} 

unset убеждается, что повторяется ошибка.

+0

положил session_start() в верхней части кода на обеих страницах? – Alei

+0

Ах, нет. Я просто понял, что вы перенаправляетесь на ту же страницу с включенным процессом. Просто убедитесь, что сеанс запущен до отправки любых заголовков. –

+0

Как я понимаю, session_start() не будет работать для меня, потому что заголовки уже будут отправлены с тем, как мой код теперь структурирован, не так ли? – Alei

0

Установить сеанс ошибки и отображения на странице, на которой вы перенаправляете

0

An HTTP Redirect вызывает новый запрос HTTP. Поскольку php не имеет статуса, он не может поддерживать запоминание сообщения для отображения конкретному пользователю в другом запросе.Чтобы обойти это ограничение, вам нужно будет использовать механизм хранения с сохранением состояния (сеанс или файлы cookie) или передать сообщение об ошибке вместе со следующим запросом через параметр строки запроса. Обычным способом обработки является использование хранилища сеансов для сохранения флэш-сообщений.

Вот это библиотека, которая может сделать это немного проще для вас https://github.com/plasticbrain/PhpFlashMessages

Смежные вопросы