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
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.