Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP:n kirjautumissysteemin virheilmoitus

Santeri P. [21.04.2011 12:48:33]

#

Hei.
Osoitteessa https://www.ohjelmointiputka.net/koodivinkit/23878-php-kirjautuminen-sessioneilla oleva koodivinkki näyttää virheilmoitusta kun lisään siihen tällaisen pätkän html-koodia: <body bgcolor="bronze">
Se toimii muuten,mutta jotakin virheilmoitusta se pukkaa kokoajan.
Kertokaapas,miten voisin määrittää taustavärin ilman että se tekisi sen virheilmoituksen?

t0ll0 [21.04.2011 12:59:40]

#

Jos muokattua koodia näyttäisit niin olisi helpompi avittaa..
Plus se "jokin virheilmoitus" olisi hyvä kopioida tänne.

Onko bronze väri? Kannattaa muutenkin käyttää hex-lukuja eikä värin nimeä http://www.w3schools.com/html/html_colornames.asp
edit. en tarkoittanut tällä sitä ettäkö nimenomaan bronze tai ylipäätään mikään väri aiheuttaisi virheilmotuksen.

Santeri P. [21.04.2011 13:35:14]

#

hmm
koodi o täs

<body bgcolor="#800000">
<?php
//aloitetaan sessionit
session_start();

//asetukset
$tiedosto = "userit.txt"; //tiedosto jossa tiedot usereista
$tarkastus = "tarkista.php"; //TÄMÄ tiedosto
$etusivu = "userfilu.php"; //sivu jonne mennään kirjautumisen jälkeen

//jos tiedostoa ei ole, tehdään se
if(!file_exists($tiedosto)) {
  touch($tiedosto);
  chmod($tiedosto, "0766");
}

$data = file($tiedosto);
$userit = array();

//kerätään tiedot usereista
for ($i=0; $i<count($data); $i++) {
  $entry = explode("|", $data[$i]);
  $userit[$i] = $entry[0];
}

//tietojen siistimistä varten
function clean ($string) {
  $string = str_replace("|", "", $string);
  $string = strip_tags($string);
  $string = ereg_replace("\n", "", $string);
  return strtolower($string);
}

//jollei olla sisällä näytetään kirjautumislomake
if (empty($_SESSION["sess_tunnus"]) || $_SESSION["sess_iposoite"] != $_SERVER["REMOTE_ADDR"]) {
  $tunnus = clean($_POST["tunnus"]);
  $email = clean($_POST["email"]);
  $salasana = clean($_POST["salasana"]);
  $salasana2 = clean($_POST["salasana2"]);

  //kirjautuminen
  if (isset($_POST["kirjaudu"])) {
    if (in_array($tunnus, $userit) != "") {
      $entry = explode("|", $data[array_search($tunnus, $userit)]);
      if ($entry[2] == md5($salasana)) {
        //sessionit kuntoon
        session_register("sess_tunnus");
        $_SESSION["sess_tunnus"] = $tunnus;
        session_register("sess_iposoite");
        $_SESSION["sess_iposoite"] = $_SERVER["REMOTE_ADDR"];

        echo "<b>Kirjauduit sisään!</b><br>\n";
        echo "Jatka klikkaamalla <a href=\"". $etusivu ."\">tästä</a>.";
      }
      else {
        echo "<b>Virheellinen salasana.</b><br>\n";
        echo "Voit kirjautua uudelleen klikkaamalla <a href=\"". $tarkastus ."\">tästä</a>.";
      }
    }
    else {
      echo "<b>Tunnusta \"<i>". $tunnus ."</i>\" ei löydy.</b><br>\n";
      echo "Voit kirjautua uudelleen klikkaamalla <a href=\"". $tarkastus ."\">tästä</a>.";
    }
  }
  //rekisteröityminen
  elseif (isset($_POST["rekisteroidy"])) {
    if (in_array($tunnus, $userit) == $null) {
      if ($salasana == $salasana2) {
        if (strlen($tunnus) >= 3) {
          if (strlen($salasana) >= 3) {
            $fo = fopen($tiedosto, "a");
            flock($fo, 2); //lukitaan tiedosto
            fwrite($fo, $tunnus ."|". $email ."|". md5($salasana) ."|\n");
            flock($fo, 3); //ja vapautetaan se
            fclose($fo);

            echo "<b>Kiitos rekisteröitymisestäsi!</b><br>\n";
            echo "Voit nyt kirjautua sisään <a href=\"". $tarkastus ."\">tästä</a>.";
          }
          else {
            echo "<b>Epäkelpo salasana.</b><br>\n";
            echo "Voit rekisteröityä toisella salasanalla klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
          }
        }
        else {
          echo "<b>Epäkelpo tunnus \"<i>". $tunnus ."</i>\".</b><br>\n";
          echo "Voit rekisteröityä toisella tunnuksella klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
        }
      }
      else {
        echo "<b>Salasanat eivät täsmää.</b><br>\n";
        echo "Voit rekisteröityä uudelleen klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
      }
    }
    else {
      echo "<b>Tunnus \"<i>". $tunnus ."</i>\" on jo käytössä.</b><br>\n";
      echo "Voit rekisteröityä toisella tunnuksella klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
    }
  }
  else {
    if ($_GET["act"] == "rekisteroidy") {
      echo "<form action=\"". $tarkastus ."\" method=\"post\">\n";
      echo "<b>Rekisteröidy</b><br>\n";
      echo "Jos sinulla on jo tunnus, <a href=\"". $tarkastus ."\">kirjaudu</a>.<br>\n";
      echo "Tunnus: <input type=\"text\" name=\"tunnus\"><br>\n";
      echo "E-mail: <input type=\"text\" name=\"email\"><br>\n";
      echo "Salasana: <input type=\"password\" name=\"salasana\"><br>\n";
      echo "Salasana uudelleen: <input type=\"password\" name=\"salasana2\"><br>\n";
      echo "<input type=\"submit\" value=\"Rekisteröidy\" name=\"rekisteroidy\">\n";
      echo "</form>";
    }
    else {
      echo "<form action=\"". $tarkastus ."\" method=\"post\">\n";
      echo "<b>Kirjaudu sisään</b><br>\n";
      echo "Ole hyvä ja kirjaudu sisään. Jos sinulla ei ole tunnusta, <a href=\"". $tarkastus ."?act=rekisteroidy\">rekisteröidy</a>.<br>\n";
      echo "Tunnus: <input type=\"text\" name=\"tunnus\"><br>\n";
      echo "Salasana: <input type=\"password\" name=\"salasana\"><br>\n";
      echo "<input type=\"submit\" value=\"Kirjaudu\" name=\"kirjaudu\">\n";
      echo "</form>";
    }
  }
  exit();
}
?>

-tossu- [21.04.2011 13:47:43]

#

Vika on siinä, että ennen session_startia on tekstiä. Siirrä HTML-koodi alusta session_startin jälkeiseen osaan.

Santeri P. [21.04.2011 13:49:17]

#

kiitos

Othnos [21.04.2011 13:51:04]

#

Lisäisin vielä, että kannattaa lukea sitä PHP:n dokumentointia.

https://www.php.net/manual/en/function.session-start.php:

Note:

To use cookie-based sessions, session_start() must be called before outputing anything to the browser.

Santeri P. [21.04.2011 13:52:38]

#

Oho,en oo lukenu oikee tota manuaalii

Vastaus

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

Tietoa sivustosta