Saya sedang membangun sebuah situs web yang mencakup halaman login. Saya perlu mengarahkan pengguna ke halaman profil mereka setelah mereka berhasil masuk, tetapi saya tidak tahu bagaimana melakukannya di PHP (Ini adalah situs pertama saya).
Saya telah mencari di internet dan telah diberitahu bahwa fungsi header () harus melakukan triknya, tetapi hanya akan berfungsi jika saya belum mengeluarkan informasi apa pun sebelum menggunakannya.
Itulah masalahnya. Saya telah mengeluarkan banyak informasi (termasuk HTML untuk membuat halaman login itu sendiri).
Jadi bagaimana cara mengarahkan pengguna dari satu halaman ke halaman berikutnya?
Opsi apa yang saya miliki? Juga, apa praktik terbaik dalam hal ini?
EDIT: Berikut'seluruh halaman login.php saya
<?php
session_start();
echo "<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Sprout</title>
<link rel='stylesheet' href='stylesheet.css' type='text/css'>
</head>
<body>
<div class='box'>
<form action='login.php' method='post'>
Name<br /> <input type='text' name='username' class='form'/><br />
Password<br /> <input type='password' name='password' class='form'/>
<input type='submit' value='Login' class='button' />
</form>
</div>
</body>
</html>";
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$username = $_POST["username"];
$password = $_POST["password"];
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");
$dbname = "database";
mysql_select_db($dbname);
$query = "SELECT username FROM users WHERE username = '$username' AND password = '$password'";
$result = mysql_query($query) or die ("Failed Query of " . $query);
while($row = mysql_fetch_assoc($result))
{
$_SESSION["user"] = $username;
}
}
?>
Itulah masalahnya. Saya telah mengeluarkan banyak informasi (termasuk HTML untuk membuat halaman login itu sendiri). Jadi bagaimana cara mengarahkan pengguna dari satu halaman ke halaman berikutnya?
Ini berarti desain aplikasi Anda cukup rusak. Anda seharusnya tidak melakukan output saat logika bisnis Anda berjalan. Gunakan mesin templat (seperti Smarty) atau perbaiki dengan cepat dengan menggunakan output buffering).
Pilihan lain (bukan pilihan yang baik!) akan mengeluarkan JavaScript untuk dialihkan:
<script type="text/javascript">location.href = 'newurl';</script>
Dengan asumsi Anda menggunakan cookies untuk login, panggil saja setelah panggilan setcookie
Anda - lagipula, Anda harus memanggil yang satu itu sebelum output apa pun juga.
Bagaimanapun secara umum Anda bisa memeriksa keberadaan nama tombol submit formulir Anda di awal skrip, melakukan logika Anda, dan kemudian mengeluarkan output:
if(isset($_POST['mySubmit'])) {
// the form was submitted
// ...
// perform your logic
// redirect if login was successful
header('Location: /somewhere');
}
// output your stuff here
Anda bisa menggunakan ob_start();
sebelum Anda mengirim output apapun. Ini akan memberitahu PHP untuk menyimpan semua output dalam buffer sampai eksekusi skrip berakhir, sehingga Anda masih dapat mengubah header.
Biasanya saya tidak menggunakan buffer output, untuk proyek-proyek sederhana saya menyimpan semua logika pada bagian pertama dari script saya, kemudian saya mengeluarkan semua HTML
.