2016-01-25 3 views
0

Я пытаюсь проверить регистрационную форму с помощью HTML и PHP и вставить данные в базу данных SQL. После регистрации я хотел бы, чтобы мой пользователь был направлен на личную панель. Я могу заставить все работать, за исключением перенаправления при отправке формы.Как проверить форму на PHP, затем перенаправить на внешнюю страницу

Вот PHP в начале страницы:

<?php 


// define variables and set to empty values 
$emailErr = $passErr = $confirmErr = $email = $pass = $confirm = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["email"])) { 
    $emailErr = "Email is required"; 
    } else { 
    $email = test_input($_POST["email"]); 
    } 

    if (empty($_POST["pass"])) { 
    $passErr = "You must have a password"; 
    } else { 
    $pass = test_input($_POST["pass"]); 
    } 

    if (empty($_POST["confirm"])) { 
    $confirmErr = "You must confirm your password"; 
    } else { 
    $confirm = test_input($_POST["confirm"]); 
    } 

    if ($pass != $confirm) { 
    $confirmErr = "Your passwords must match"; 
    } 

} 

    if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $email = test_input($_POST["email"]); 
    $pass = test_input($_POST["pass"]); 
    } 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
    } 

?> 

И мой HTML форма:

<div class="container"> 

    <form class="form-signin" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
     <h2 class="form-signin-heading">Register below:</h2> 
     <span class="error"><?php echo $emailErr;?></span> 
     <input type='email' class="form-control" placeholder="enter email..." name='email'/> 
     <span class="error"><?php echo $passErr;?></span> 
     <input type='password' class="form-control" placeholder="enter password" name='pass'/><span class="error"><?php echo $confirmErr;?></span> 
     <input type='password' class="form-control" placeholder="confirm password" name='confirm'/> 

     <input type='submit' class="btn btn-success btn-block" name="submit" value="submit"> 
     <h5>Already have an account? <a href="login.html">Log in</a>.</h5> 
    </form> 

    </div> 

Обратите внимание на использование

<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?> 

на

<form action=""> 

param. Используя эту функцию, я не могу получить перенаправление.

Я включил свои записи SQL после HTML, и записи работают нормально, но header(); не работает. См. Здесь:

<?php 

$email = $_POST['email']; 
$pass = md5($_POST['pass']); 

// Database connection 
require 'database.php'; 
$sql = "SELECT email FROM users WHERE email = '".$email."'"; 

$result = $conn->query($sql); 
$row_count = $result->num_rows; 

if ($row_count == 1) { 
    // user already exists 
    header('Location: login.php'); 
} elseif ($row_count > 1) { 
    // just to double check multiple entries aren't input into the DB 
    echo 'There are too many records with that name!'; 
} else { 
    // enter user into DB 
    $sql = "INSERT INTO users (email, pass) 
    VALUES ('".$email."', '".$pass."')"; 

    if ($conn->query($sql) === TRUE) { 
     header('Location: dashboard.php'); 
     exit(); 
    } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

mysqli_close($conn); 
} 

?> 

Любые идеи, что я делаю неправильно?

+0

Проверьте, доступна ли страница, на которую вы перенаправляетесь, после отправки формы в той же папке. – Bijal

+0

Да, t в той же папке – ReganMathew

ответ

0

Если я правильно понимаю, что вы можете сделать, это перенаправить обратно на страницу с ссылкой:

<form name="form-lignin" method="post" action="this-php-page.php"> 

На той же странице, то вы можете создать раздел, который будет отображаться только если форма имеет и форма будет скрыта. Затем раздел может быть персонализирован для каждого пользователя.

Вы можете сделать это, добавив в форму скрытое поле.

<input type='hidden' name='submission' value="something"/> 

Затем вы можете добавить этот PHP:

  if ($_POST["submission"]=="something") { 

     *Dashboard content?*  

       } else { 

     *The actual form...* 
       } 

Надеется, что это помогло :)

+0

Это дало мне пустую страницу при правильной отправке формы. Тем не менее, нет перенаправления. – ReganMathew

+0

Я не понимаю, вы хотите переадресовать на другую страницу или остаться на этой странице, когда он сформирует валидированные данные и данные? –

+0

также, если возможно, я хотел бы сохранить «" Часть в коде. Каждый учебник, который я видел, говорит о том, что это безопаснее при использовании проверки формы. – ReganMathew

0

привета я видел ваш код в коде, который вы используете login.php для перенаправления из заголовка тега , и в файле html вы используете файл login.html для проверки учетной записи или нет. Пожалуйста, проверьте расширение файла для своего файла входа. вы можете использовать следующую ссылку для деталей функции заголовка: PHP header(Location: ...): Force URL change in address bar

+0

Хотя вы правы, это несущественно для проблемы, с которой я сталкиваюсь. Существуют файлы login.html и login.php. После подачи и проверки формы я снова получаю пустую форму. Данные пользователя вводятся в мою БД, но страница не перенаправляется. – ReganMathew

+0

попробуйте перенаправить @header («Местоположение: dashboard.php») – chetan

+0

извините, не повезло .. – ReganMathew

0

1.you должен гарантировать, что код был бежать

if ($conn->query($sql) === TRUE) { 
 
     echo 'is run!';exit; 
 
     header('Location: dashboard.php'); 
 
     exit(); 
 
    }
и вы можете использовать, если ($ conn-> запроса ($ SQL)) instand if ($ conn-> query ($ sql) === TRUE)

2.notice, если «exit;» code run, "mysqli_close ($ conn);" будет бесполезным.

+0

Код запускается, потому что я получаю новую запись в своем DB – ReganMathew

+0

. Попробуйте использовать «var_dump ($ conn-> query ($ sql)); exit; то, что вы получаете? – suibber

+0

Где я буду использовать var_dump? – ReganMathew

0

Прежде всего вам нужно поместить весь ваш php-код над html, чтобы выход html был отправлен в браузер после выполнения скрипта проверки.

Тогда

1 форма захвата значения

2 Validate форма значения

3 Если Каждая вещь в порядке. Затем очистите вход и вставьте его в базу данных.

4 если вставить успешно, перенаправить его на другую страницу, используя заголовок ('location: http://example.com');

Thats it

+0

Вы могли бы выписать код, чтобы я мог видеть, как я буду реализовывать это изменение? Или используйте мой код и покажите мне код, который я бы использовал (и где) – ReganMathew

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