Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Salasanan tarkistus php:ssä

Sivun loppuun

juha127 [17.10.2005 17:09:41]

#

Siis osaisiko joku auttaa kun minulla on tuossa tarkistus koodissa jotakin vikaa:

<?php

$nimi = $_POST[nimi];
$salasana = ($_POST[salasana]);
$salasan2 = md5($salasana);

$tunnukset = fopen("loki.txt", "r");

for ($i = 0; $i++) {

   $tiedot = explode("|", $tunnukset[$i], 3);

   $nimi = $tiedot[0];
   $email = $tiedot[1];
   $salasana1 = $tiedot[2];
}

if ($nimi == $nimi1 AND $salasana2 == $salasana1)
	{
		session_start();
		$_SESSION["nimi"] = $nimi;
		$_SESSION["salasana"] = $salasana2;
		echo "Tunnukset oikein!!!";
		echo '<a href="member.php">Sisälle!</a>';
	}
else
	{
		session_start();

		unset($_SESSION["nimi"]);
		unset($_SESSION["salasana"]);
		echo "Tunnukset ovat väärin.";
		echo '<br><a href="login.php">Takaisin</a>';
	}

fcloce($tunnukset);
?>

Saan aina tulokseksi "Tunnukset ovat väärin" paitsi jos jätän kentät tyhjäksi.
EDIT
Huomasin tuossa for silmukassa on jotain häikkää mutta mitä, vai pitäisikö siinä käyttää jotain muuta?

Lebe80 [17.10.2005 17:25:01]

#

näyttäisi siltä, että nyt "tarkistat" vain viimeisen tunnuksen tiedostossa. Eli siirräpä if -tarkistus for -loopin sisälle.

Lisäksi for -lauseessa taitaa olla jonkin sortin bugi (takaraja asettamatta).

for ($i=0;$i<count($tunnukset);$i++) {...}

juha127 [17.10.2005 17:47:26]

#

Joo nyt se löysi oikeat tunnukset, mutta siihen sivulle tulee
Fatal error: Call to undefined function: fcloce() in /mbnet/r/rspkrs/salaus/cookie.php on line 36

ajv [17.10.2005 17:59:26]

#

Olisko fclose() :)

Ja äkkiä katottuna on tuossa kyllä kaikenlaista pientä häikkää muutenkin. Ettet olisi sekoittanut nyt fopenia file()-funktioon.

juha127 [17.10.2005 18:12:03]

#

Oho... No kyllähän toita sattuu.
Mutta vielä olisi kysyttävää tuon rekistöröitymis jutusta.

<?php

$loki = fopen("loki.txt", "a");//loki tiedosto

//haetaan lomakkeelta...
$nimi = $_POST["nimi"];//nimi
$email = $_POST["email"];//sähköposti osoite
$salasana1 = $_POST["salasana1"];//salasana
$salasana2 = $_POST["salasana2"];//salasanan tarkistus


//tarkistetaan täsmäävätkö salasanat
if ($salasana1 == $salasana2)
	{
	$salasana = md5($salasana1);
	}
//jos nimi puuttuu näytetään rekistöröitymis lomake
elseif (empty($nimi))
	{
	header("Location: rekistoroidy_lomake.php");
	exit;
	}
//jos email puuttuu näytetään rekistöröitymis lomake
elseif (empty($email))
	{
	header("Loaction: rekistoroidy_lomake.php");
	exit;
	}
//jos salasanat eivät täsmää näytetään kirjautumis lomake
else
	{
	header("Location: rekistoroidy_lomake.php");
	exit;
	}

$rivi = "$nimi|$email|$salasana\n";//rivi joka kirjoitetaan lokiin

	fwrite($loki, $rivi);//kirjoitetaan lokiin

	fclose($loki);//suljetaan loki

$kayttaja_tiedot = "Nimi:$nimi\nEmail:$email\nSalasana:$salasana";
mail("rspkrs@mbnet.fi", "Käyttäjä tiedot", $kayttaja_tiedot);


header("Location: kiitos.php");
?>

Tuo jostain syystä tallentaa tiedot vaikka kaikki kentät olisivat tyhjiä. Osaisko joku vastata tähän ongelmaan?
EDIT
Huomasin tuossa että tuo salasanojen vertailu piti siirtää loppuun. Mutta miten saisi lisättyä sen että ylös tulisi, että "et täyttänyt kaikkia kenttiä"?

Juice [17.10.2005 20:22:59]

#

Osapuilleen niin, että laitat ensin

<?php
if(empty($email) || empty($nimi)) {
  echo "Et täyttänyt kaikkia kenttiä.";
  #Tulostalomake();
} else if($salasana1 != $salasana2) {
  echo "Salasanat eivät täsmää.";
  #Tulostalomake();
} else {
  #OK
}
?>

Ja jos ei kaikki täytetty/salasanat täsmää, muista laittaa email ja nimi-kenttään valueksi syötetty arvo. Etköhän pärjää näillä. En todellakaan käyttänyt tähän koodiin paljoa aikaa :P

juha127 [17.10.2005 20:55:05]

#

Joo nyt sain tuon toimimaan täytyi kyllä tehdä enemmän tuollaisia muutoksia mitä Juice kirjoitti.
EDIT
Mitenkä saisin näkyviin lomakkeelle jos kaikkia tietoja ei ole laitettu, tulisi teksti jossa kerrottaisiin että et kirjoittanut kaikkia tietoja

juha127 [18.10.2005 17:57:02]

#

Voisko tuon tehdä tälläi...

<?php
echo $virhe;
?>
jotain koodia...
<?php
if (empty($nimi))
	{
	$virhe = "Et laittanut nimeä!";
	exit;
	}
?>

Eli muuttajan $virhe arvoksi tulisi, Et laittanut nimeä!, jos nimeä ei ole laitettu.

squid [18.10.2005 18:55:22]

#

Mutta eikös tuon täydy olla toisin päin, ja minkä takia tuota ei voi suorittaa kerralla? Eli vaikka näin:

<?php
...
if (empty($nimi) {
  echo "Et laittanut nimeä.";
  header("Location: laheta.php");
}
/*tähän viestin kirjotus tiedostoon/kantaan */
?>

juha127 [18.10.2005 18:59:59]

#

Niin voi olla. Mutta eikös ollu niin että ennen headerii ei saa olla tulostettuna mitään.

Olga [18.10.2005 19:10:59]

#

Sivun alkuun ob_start() ja loppuun ob_end_flush() ja avot. Ja tuossa squidin esimerkissä käyttäjä ei koskaan näe virheilmoitusta, sillä selain ohjataan välittömästi uudelle sivulle. Tuohon on vaihtoehtoisia toteutustapoja miljoona, mutta voit esimerkiksi kentän tulostuksen yhteydessä tarkistaa onko kyseisen kentän kohdalla tullut virheellinen syöte ja sitten tulostaa mahdollisen virheilmoituksen.

squid [18.10.2005 19:20:01]

#

Oho... joo tohon täytyy laittaa parin sekunnin odotus aika :)

juha127 [18.10.2005 21:09:30]

#

Sain tuon toimimaan "joten kuten", mutta en toivotulla tavalla.
http://koti.mbnet.fi/rspkrs/salaus/login.php
Tuossa olisi muuten koko hoito

juha127 [19.10.2005 18:07:20]

#

Mitenkä tuota täytyisi muuttaa:

for ($i = 0;$i < count($kayttajat); $i++) {

	$tiedot = explode("|", $kayttajat[$i], 3);

	$nimi2 = $tiedot[0];
	$email = $tiedot[1];
	$salasana2 = $tiedot[2];

	session_start();//aloitetaan sessionit

	//tarkistetaan sessioneilla onko käyttjä jo kirjautunut
	$_SESSION["nimi"] = $nimi;
	$_SESSION["salasana"] = $salasana;

	if ($nimi == $nimi2 AND $salasana == $salasana2)//käyttäjä pääsee sisälle
	{
	echo "Olet kirjautunut sisään";
	//tähen tulee salattu sivu alue
	}

Tuossa kerran on se vikana että jos arvot ovat tyhjät niin pääsee sisalle.

Olga [19.10.2005 18:50:30]

#

tarkista jossain välissä että onko annetut syötteet tyhjiä vai ei.

juha127 [19.10.2005 18:58:50]

#

Joo tuli itelki mielee vast vähä aikasit. :$

Nobo [22.10.2005 01:52:07]

#

juha127 kirjoitti:

Tuossa kerran on se vikana että jos arvot ovat tyhjät niin pääsee sisalle.

Pääset sinne sisälle oli arvo sitten mikä tahansa, niiden ei tarvitse olla tyhjiäkään.


Sivun alkuun

Vastaus

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

Tietoa sivustosta