Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: lomakkeesta vaihtoehtoisille sivuille

Sivun loppuun

eija [13.08.2009 21:30:20]

#

Tein kirjautumislomakkeen, joka tarkistaa tietokannasta, että kirjautuminen on oikein. Laitoin lomakkeen ja tarkistuksen samalle sivulle. (Siellä on myös rekisteröintipainike).

Nyt jos käyttäjätunnus ja salasana ovat väärin, haluan pysyä samalla kirjautumislomakkeella ja sivulla. Jos taas ne ovat oikein, haluan jatkaa matkaa seuraavalle sivulle.

Miten tämä homma toteutetaan formsien kanssa? Siis siirtyminen seuraavalle sivulle automaattisesti ilman, että tarvitsee painaa mitään painiketta?

Teuro [13.08.2009 21:41:41]

#

Tsekkaa ajv:n koodivinkki aiheesta

eija [13.08.2009 23:10:00]

#

Ihan hieno koodivinkki, mutta minulle riittäisi vähän yksinkertaisempi.

Triton [13.08.2009 23:24:58]

#

Itse tekisin sen niin, että uudelleenohjaisin käyttäjän toiselle sivulle header-funktiolla. Tietenkin on tarkistettava, että käyttäjällä on oikeudet sivun lukemiseen. Tuo taas onnistuu selvittämällä onko evästeet/istunnot olemassa esim. isset-funktiolla...

hk [13.08.2009 23:29:07]

#

eija kirjoitti:

Tein kirjautumislomakkeen, joka tarkistaa tietokannasta, että kirjautuminen on oikein. Laitoin lomakkeen ja tarkistuksen samalle sivulle. (Siellä on myös rekisteröintipainike).

Nyt jos käyttäjätunnus ja salasana ovat väärin, haluan pysyä samalla kirjautumislomakkeella ja sivulla. Jos taas ne ovat oikein, haluan jatkaa matkaa seuraavalle sivulle.

Miten tämä homma toteutetaan formsien kanssa? Siis siirtyminen seuraavalle sivulle automaattisesti ilman, että tarvitsee painaa mitään painiketta?

Laitat alkuun tarkistusosan, joka tallettaa muuttujaan $ok true, mikäli kirjautuminen ok, ja siirryt eteenpäin näin:

if($ok) {
header("Location: http://osoite_jonne_matkataan");
die;
}

Perään sitten lomakkeen tulostus, johon mennään, jos ei ollut ok.

Huomaa, että ennen header-funktiota ei saa tulostaa yhtään mitään. Se tarkoittaa, että sitä ennen voi olla vain php:tä, joka ei tulosta mitään. HTML:ää ei saa olla, ei edes HTML-tagia. Eikä edes tyhjiä rivejä ennen kuin php alkaa.

Käytännössä ohjelmasi normaalisti kyllä toimii, vaikka et noudattaisi tuota ohjetta, mutta noudata sitä.

Triton [13.08.2009 23:51:24]

#

Niin tai sitten heittää ob_startin sivunalkuun, niin silloin voi tulostaa myös ennen headeria...

hk [14.08.2009 00:45:42]

#

Siihen ei oikeastaan ole mitään syytä normaalisti.

eija [14.08.2009 17:30:03]

#

Tuo header("Location: .... on tosi hyvä apufunktio. Sillä tosiaan voi valita minne mennä seuraavaksi.

Ongelmana on vain se, että kun määrittelen lomakkeella tuon $ok:n, se toimii oikein lomakkeen lopussa, mutta on tyhjä sitten lomakkeen alussa. Ei toimi mikään global $ok tai static...Yritin määritellä sen vielä lomakkeen hidden kentällä, mutta arvo tuli php osiosta ja muuttui taas lomakkeelle tultaessa. Onko tähän jotain yksinkertaista ratkaisua? (En ymmärrä vielä mitään monimutkaista)

Teuro [14.08.2009 17:56:14]

#

Alla oleva pätkä on oikeastaan hieman runsaammilla kommenteilla ryydetty ajv:n vinkki, joskaan tässä ei ole mitään millä tunnistaa käyttäjää / vastaavaa. Idea tulisi selvitä tällä aika helpolla.

Muuttujien siivouksen voisi hoitaa omassa funktiosssaan, kuten myös salasanan muuntaminen kryptisemmäksi, jolloin tarvittaeessa voidaan muuttaa koko salasanan muunnos helpommin.

<?php
/* Alustetaan muuttuja $ok false arvolla Virhestä tulee hiukan pienempi, jos jatkossa mokataan */
$ok = false;

/**
	* Tarkistetaan onko muuttujissa $_POST['tunnus'] ja $_POST['salasana']
	* sopivat arvot. Samalla eskapoidaan vaaralliset merkit vaarattomiksi
*/

if(isset($_POST['tunnus'])){
	$tunnus = mysql_real_escape_string(trim($_POST['tunnus']));
	$salasana = mysql_real_escape_string(trim($_POST['salasana']));


	/* Tarkistetaan, että molempien kenttien pituus > 0 */

	if(strlen($tunnus) > 0 && strlen($salasana) > 0){
		/* Muunnetaan salasana md5 funktiolla hieman kryptisemmäksi */

        $salasana = md5($salasana);

		/* Haetaan kannasta tiedot ylläolevilla tiedoilla */
		$kysely = "
		SELECT
			tunnus,
			oikeus
		FROM
			kayttajat
		WHERE
			tunnus = '$tunnus'
		AND
		salasana = '$salasana'";

		$tiedot = mysql_query($kysely);

		if(mysql_num_rows($tiedot) === 1){
			/* Sijoitetaan $kayttajataulukkoon saadut tiedot */
			$kayttaja = mysql_fetch_array($tiedot);

			$ok = true;
		}

	}else{
		/* Tarkasti ottaen $ok on edelleen false */
		$ok = false;
	}

	if($ok === true){
		header("Location: http://www.osoite.com/ok.php");
	}else{
		/* Ilmoita vaikkapa virheellisestä tunnuksesta / salasanasta */
	}
}

eija [19.08.2009 15:42:54]

#

Kiitos! Tuolla tavalla minä sen suurinpiirtein sitten tein, paitsi nuo kryptaukset jätän tulevaan ajankohtaan, kuhan osaan ensin nämä php:n perusteet.


Sivun alkuun

Vastaus

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

Tietoa sivustosta