Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP - Header ja cookie-ongelma

sochapter [02.12.2009 20:51:00]

#

Terve!

Tässäpä olen tapellut aamun, iltapäivän ja illan ja taitaa mennä vielä yön päällekin. Eli homman idea on se, että teen sivustoa, jossa on kirjautumismahdollisuus. Olen lainaillut yhden sivuston loginform-luontiopasta. Silloin kun menen suoraan login-formiin ja skriptiin(eli suoraan esimerkiksi login.php, jossa on sekä form että skripti), niin kirjautuminen toimii oikein, evästeet lisätään ja mitään vikaa ei ole. Mutta sitten, kun lisään sisäänkirjautumislomakeen sivustolle include():lla, niin ongelmat alkavat. Kun kirjoitan oikean käyttäjätunnuksen ja salasanan, tulostuu:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/phpdvd/otsikko.html:4) in /var/www/phpdvd/login.php on line 60

Warning: Cannot modify header information - headers already sent by (output started at /var/www/phpdvd/otsikko.html:4) in /var/www/phpdvd/login.php on line 61

Warning: Cannot modify header information - headers already sent by (output started at /var/www/phpdvd/otsikko.html:4) in /var/www/phpdvd/login.php on line 62

Muut koodit tässä:
Login.php

<?php
ob_start();
// Yhteyden muodostus
mysql_connect("localhost", "ktunnus", "ssana") or die(mysql_error());
mysql_select_db("kayttajat") or die(mysql_error());

//Tarkistetaan, löytyykö kirjautumisevästettä
if(isset($_COOKIE['ID_my_site']))

//jos on, kirjaudutaan sisään
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{
if ($pass != $info['password'])
{
}
else
{

}
}
}

//tarkistetaan onko kirjautumislomake lähetetty
if (isset($_POST['submit'])) { // jos on, niin

// tarkistetaan että se on täytetty
if(!$_POST['username'] | !$_POST['pass']) {
die('Et täyttänyt tarvittavia tietoja');
}

if (!get_magic_quotes_gpc()) {
$_POST['email'] = addslashes($_POST['email']);
}
$check = mysql_query("SELECT * FROM users WHERE username = '".$_POST['username']."'")or die(mysql_error());

//Virhe, jos käyttäjää ei ole.
$check2 = mysql_num_rows($check);
if ($check2 == 0) {
die('Käyttäjänimellä ei ole rekisteröidytty.<a href=rekisterointi.php>Rekisteröidy tästä!</a>');
}
while($info = mysql_fetch_array( $check ))
{
$_POST['pass'] = stripslashes($_POST['pass']);
$info['password'] = stripslashes($info['password']);
$_POST['pass'] = md5($_POST['pass']);

//salasanan tarkistus
if ($_POST['pass'] != $info['password']) {
die('Väärä salasana, yritä uudelleen.');
}

else
{// jos kirjautuminen onnistuu, lisätään cookie
$_POST['username'] = stripslashes($_POST['username']);
$hour = time() + 3600;
setcookie(ID_my_site, $_POST['username'], $hour);
setcookie(Key_my_site, $_POST['pass'], $hour);
header("Location: members.php");
}
}
}
else
{

// jos ei olla kirjauduttu, näytetään formi
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">

<h3>Sisäänkirjautuminen</h3>

Käyttäjätunnus:<br/>
<input type="text" name="username"><br/>

Salasana:<br/>
<input type="password" name="pass"><br/>
<input type="submit" name="submit" value="Kirjaudu">

</form><?php
}
?>

^Nuo rivit 60,61 ja 62 jotka virheilmoitus antaa, sisältävät seuraavanlaisen pätkän:

setcookie(ID_my_site, $_POST['username'], $hour);
setcookie(Key_my_site, $_POST['pass'], $hour);
header("Location: members.php");

Otsikko.html

<div id="otsikko">

<img src="banneri.png"/>

</div>

Lisäksi mainittakoon, että Index.php:hen on includettu menu.php, ja menu.php:hen on includettu tuo login.php.

Pitipäs tulla kyselemään tyhmiä. No mutta olisi todella hienoa jos voitte auttaa!

terv. Tero Korhonen / Etelä-Karjalan Ammattiopisto

Juhko [02.12.2009 20:55:31]

#

Et voi muuttaa headereita sen jälkeen kun sisällön kirjoitus on aloitettu. Tee vaikka erillinen submitlogin.php. Se ei sitten tulostaisi pätkääkään tekstiä, vaan toimenpiteensä suoritettuaan ohjaisi haluamallesi sivulle.

sochapter [03.12.2009 08:09:46]

#

Juhko kirjoitti:

Et voi muuttaa headereita sen jälkeen kun sisällön kirjoitus on aloitettu. Tee vaikka erillinen submitlogin.php. Se ei sitten tulostaisi pätkääkään tekstiä, vaan toimenpiteensä suoritettuaan ohjaisi haluamallesi sivulle.

Kiitos paljon!

Kokeilen heti kun ehdin, mutta nyt jo tuo tuntuu ilmiselvältä ratkaisulta.

Terveisin
Tero Korhonen / Etelä-Karjalan Ammattiopisto

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta