Ahoj jen bych se chtěl v něčem ujistit chci li modifikovat header pomocí header(Location:"index.php?stranka=uvod") tak modifikaci nesmí předcházet žádný html výstup ani v php tjecho("textový výstup").
Ale když se potřebuji přihlásit a po přihlášení přesměrovat na nějakou stránku tak mi to neustále hlásí chybu : Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\e85\class\Login.php:35) in C:\wamp\www\e85\class\Login.php on line 42. i přesto že ověření a přesměrování vypisuji před výpisem formuláře.
Struktura třídy je následovná
- načtení dat z db
- výpis form frameworku
- validace a přesměrování
a při výpisu do souboru login.php vypisuji opačně ted
- validace a přesměrování
- výpis form frameworku
<?php
class Login{
private $form;
private function selectUser($login, $password){
$result = Database::query('SELECT `login`, `password` FROM `users` WHERE `login` = ? AND `password` = ?', array($login, $password));
return $result;
}
public function __construct(){
$this->form = new Form('Přihlášení');
}
public function writeForm(){
$this->form->addTextBox('login', '', true, array(
'tabindex' => '1',
'placeholder' => 'Zadejte své přihlašovací jméno',
'autofocus' => ''
));
$this->form->addTextBox('password', '', true, array(
'tabindex' => '1',
'placeholder' => 'Zadejte své heslo'
));
$this->form->addButton('logGo', 'Přihlásit se');
echo($this->form->render());
}
public function verification(){
if ($this->form->isPostBack())
{
try
{
if($_SESSION['login'] == false){
$log = $_POST['login'];
$pass = $_POST['password'];
$verification = $this->selectUser($log, $pass)->rowCount();
$row = $this->selectUser($log, $pass)->fetch();
if($verification == 1) {
$_SESSION['login'] = stripslashes($_POST['login']);
header("Location: admin.php");
} else {
throw new UserException('Zadaná kombinace loginu a hesla je neplatná');
}
} else {
throw new UserException('Již jste přihlášn/a');
}
}
catch (UserException $e)
{
echo('<span class="exception">' . nl2br($e->getMessage()) . '</span>');
}
}
}
}