Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Suojatun sivun tekeminen?

Sivun loppuun

Hex [13.12.2009 19:12:49]

#

Hei, ajattelin kysyä että miten voin saada tietyn sivun suojatuksi niin, että käyttäjän pitää olla kirjautunut sisään ennenkun voi mennä sivulle?

käytän tätä järjestelmää: https://www.ohjelmointiputka.net/koodivinkit/24301-php-kirjautuminen-rekisteröityminen-mysql-llä

Macro [13.12.2009 19:20:34]

#

Siellä kerrotaan ihan selvästi.

<?php
include("ylaosa.php");

if($user) {
	echo "Morjensta ", $user["tunnus"];
} else {
	echo "Pääsy kielletty!";
}
?>

Hex [13.12.2009 19:52:46]

#

Eli lisään tuon koodin vain sivuuni niin pitäisi toimia?

Macro [13.12.2009 19:54:59]

#

Tee testinä samaan kansioon ylaosa.php tiedosto kanssa tiedosto nimeltä testi.php. Tallenna tuo sinne, ja mene sille sivulle.

Hex [13.12.2009 20:13:34]

#

kyllä toimii, mutta entä jos on vaikka sivu nimeltä "pelit" niin miten liitän sen niin että se pelit sivusto näkyy sitten vasta kun tyyppi on kirjautunut sisään

jo123 [13.12.2009 20:21:55]

#

No siis tuo $user muuttujahan sisältää tiedon siitä onko kirjauduttu sisään vai ei. Eli kaikki minkä halutaan näkyvän vain jos on kirjauduttu sisään täytyy panna ehtolauseen sisään, jonka ehtona on että $user-muuttuja on true. Eli näin:

<?php
if($user){
   //tähän sitten vaikka se pelit-sivusi
}
?>

Edit: Jos siis haluat semmoista, että koko sivulle ei pääse niin täytyy käyttää joko htccaccesia, tai sitten vain panna elseen header("Location:joku.php"), jolloin käyttäjä ohjataan toiselle sivulle.

Hex [13.12.2009 20:28:42]

#

Eli, onko sellaista, koodia että se tarkistaa onko kirjaudutta vai ei ja sitten jos on kirjauduttu, se menee sivulle: pelit.php ja jos ei niin se menee: kirjauduensin.php

jo123 [13.12.2009 20:30:27]

#

Siis näin:

*pelit.php*
<?php
include("ylaosa.php");

if($user) {
    //tähän se sivu
} else {
    header("Location:kirjauduensin.php");
}
?>

Metabolix [13.12.2009 20:44:06]

#

Paitsi että ylaosa.php luultavasti tulostaa jo jotain, jolloin header ei toimi. Siinä tapauksessa headerin voi korvata tällä:

<?php
echo "<h1>Kirjaudu ensin!</h1>\n";
echo "<p>Sivu on vain kirjautuneiden nähtävillä. <a href='kirjaudu.php'>Kirjaudu ensin</a> tai <a href='rekisteroidy.php'>luo uusi tunnus</a>.</p>\n";

Juhko [13.12.2009 20:45:07]

#

Hex kirjoitti:

Eli, onko sellaista, koodia että se tarkistaa onko kirjaudutta vai ei ja sitten jos on kirjauduttu, se menee sivulle: pelit.php ja jos ei niin se menee: kirjauduensin.php

<?php
include("ylaosa.php");

if($user) {
    header("Location: pelit.php");
} else {
    header("Location: kirjauduensin.php");
}
?>

...mutta tällä tavoin käyttäjä pääsee pelit.php-sivulle kirjoittamalla osoitekenttään pelit.php. Eli pelit.php-tiedostoon tuo jo123:n antama koodi.

jo123 [13.12.2009 21:18:55]

#

Metabolix kirjoitti:

Paitsi että ylaosa.php luultavasti tulostaa jo jotain...

Pakko myöntää etten ollenkaan tarkistanut koodivinkkiä. Oletin vain, että ylaosa.php ei tulosta mitään, vaan sisältää itse kirjautumisen tarkistamisen yms. =)

Hex [14.12.2009 07:43:48]

#

<?php
include("ylaosa.php");

if($user) {

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pelit</title>
</head>

koodia..

</body>
</html>

} else {
    echo "<h1>Kirjaudu ensin!</h1>\n";
    echo "<p>Sivu on vain kirjautuneiden nähtävillä. <a href='kirjaudu.php'>Kirjaudu ensin</a> tai <a href='rekisteroidy.php'>luo uusi tunnus</a>.</p>\n";
}
?>

tämäkö on siis se koodi millä tämän pitäisi ratkaista..

Macro [14.12.2009 08:03:20]

#

Ei PHP:tä ja HTML:ää sotketa noin... Lisäksi, ei kannata kysyä täältä että menikö se näin vaan koita sitä mitä luulet.

<?php
include("ylaosa.php");

if($user) {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pelit</title>
</head>

koodia..

</body>
</html>
<?php
} else {
    echo "<h1>Kirjaudu ensin!</h1>\n";
    echo "<p>Sivu on vain kirjautuneiden nähtävillä. <a href='kirjaudu.php'>Kirjaudu ensin</a> tai <a href='rekisteroidy.php'>luo uusi tunnus</a>.</p>\n";
}
?>

Hex [14.12.2009 14:22:28]

#

mutta eikö toi ole mahdollista että ton kirjaudu ensin tekstin sijaan laittaisi sen headerin mikä menis sinne kirjauduensin.phplle?

jo123 [14.12.2009 14:23:52]

#

Hex kirjoitti:

mutta eikö toi ole mahdollista että ton kirjaudu ensin tekstin sijaan laittaisi sen headerin mikä menis sinne kirjauduensin.phplle?

Kyllä jos et ole tulostanut ennen sitä headeria yhtikäs mitään...

Macro [14.12.2009 14:26:46]

#

Kyllä se silti onnistuu, jos sivun alussa on se ob_start() kuten mainitsin ylempänä. Laita sen echo-rivien tilalle siihen header("Location: sivun_osoite.php");.

jo123 [14.12.2009 14:29:56]

#

Macro kirjoitti:

Kyllä se silti onnistuu, jos sivun alussa on se ob_start()

Tuo tapa on vaan hieman kyseenalainen ja kun suunnittelee vain sivun oikein, niin myös täysin hyödytön. Tietenkin voi olla joitain ihmetapauksia, jossa saattaa oikeasti olla hyötyöä puskuroinnista (siis tämän kyseisen asian kanssa).

Macro [14.12.2009 14:38:34]

#

Jos aloittaja ei aikaisempien viestien perusteella osannut laittaa headeria siirtämään käyttäjän toiselle sivulle, niin silloin on helpompi laittaa ob_start() alkuun kuin alkaa säätämään mitään ihmeellisyyksiä.

jo123 [14.12.2009 14:45:03]

#

Macro kirjoitti:

Jos aloittaja ei aikaisempien viestien perusteella osannut laittaa headeria siirtämään käyttäjän toiselle sivulle, niin silloin on helpompi laittaa ob_start() alkuun kuin alkaa säätämään mitään ihmeellisyyksiä.

Olet oikeassa =)

Hex [14.12.2009 15:28:21]

#

onko mahdollista niin, ettei sinne ylhäälle tulisi sitä loginform palkkia,

tsuriga [14.12.2009 15:33:28]

#

Macro kirjoitti:

koodia..

</body>
</html>
<?php
} else {
    echo "<h1>Kirjaudu ensin!</h1>\n";
    echo "<p>Sivu on vain kirjautuneiden nähtävillä. <a href='kirjaudu.php'>Kirjaudu ensin</a> tai <a href='rekisteroidy.php'>luo uusi tunnus</a>.</p>\n";
}
?>

Tuon viimeisenkin php-pätkän voi siirtää body-tagien sisälle ja typistää pelkkään else {?> html <?php }.

Macro kirjoitti:

Jos aloittaja ei aikaisempien viestien perusteella osannut laittaa headeria siirtämään käyttäjän toiselle sivulle, niin silloin on helpompi laittaa ob_start() alkuun kuin alkaa säätämään mitään ihmeellisyyksiä.

Ehkä hieman liioittelua kutsua kaiken koodin siirtämistä sivun alkuun "ihmeellisyydeksi". Toki tässä pitää edellä mainitun operaation jälkeen miettiä, että mitenkäs sitten sivun keskellä tulostellaan niitä muuttujien arvoja, mutta ei sekään mitään teoreettista fysiikkaa ole.

Hex kirjoitti:

onko mahdollista niin, ettei sinne ylhäälle tulisi sitä loginform palkkia

Kyllä on. Etsi se tiedosto tai kohta koodista, joka tuon palkin sinne tulostaa, ja poista kyseinen tulostus.


Sivun alkuun

Vastaus

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

Tietoa sivustosta