Keskustelut - Web-ohjelmointi - kirjautumisen onnistumisen/epäonnistumisen TULOSTUS näytölle (HTML/PHP/JavaScript)


ex-Pertti 19:31 7.9.11 
Moro taas! Mä olen yrittänyt koko päivän ratkaista seuraavaa ongelmaa vailla ratkaisua edelleenkään, joten hienoo jos joku viitsisi jeesata :).

Mulla on html-formi jossa kysytään salasanaa. Salasana on tallennettu mysql-kantaan ja mä haen sen tietokannasta tuolle samalle sivulle jossa formikin on. Javascriptillä sain jo tehtyy tarkistukset että käyttäjä voi syöttää vain numeroita tai kirjaimia ja ilmoitus tästä tulee ton formin oikealle puolelle esim. "kenttä ei voi olla tyhjä" yms. Käyttäjän syöttäessä oikeen salasanan mä avaan pdf-tiedoston ja tääkin onnistuu, mutta sitten kun käyttäjä syöttää väärän salasanan niin mä en ole onnistunut ratkaisemaan sitä et miten mä saisin ilmoituksen "väärä salasana" tohon samaan paikaan mihin tulee javascriptin virheilmoituksetkin?

Form action kai vaatii jonkun tiedoston (esim. testaa_salasana.php), mutta miten mä saan tuolta filusta haettua salasanan tarkistuksen jälkeen ilmoituksen takaisin html-tiedostoon? Oon myös yrittänyt tulostaa tuota PHP-tiedostossa ja JavaScript-tagien sisällä, mutta jostain syystä noissa tapauksissa avautuu uusi tyhjä sivu eikä sitä sivua jonka mä haluaisin avautuvan :/.

Homma on varmaan tosi simppeli mutta kun ei niin ei :D. Pitäiskö tässä käyttää jotain AJAXia mahollisesti???
RedEagle 20:35 7.9.11 
Ymmärsinköhän mä nyt aivan oikein eli palvelimella ajettu php-koodi pulauttaa tietokannassa olevan salasanan selaimelle, jossa vertaat sitä javascriptillä käyttäjän syötteeseen? Silloinhan oikea salasana on helposti luettavissa sivun lähdekoodista sekä käyttäjän selaimen ja palvelimesi välisestä liikenteestä.

Tietokanntaan tallennettua salasanaa ei siis pidä lähettää selaimelle vaan salasanan oikeellisuus tarkastaa palvelimella vertaamalla käyttäjän syötettä tietokannassa olevaan salasanaan. Oletetaan, että sinulla on lataapdf.php-tiedosto, jonka tehtävä on tarkastaa käyttäjän salasana ja jos se on oikein palvella pdf-tiedosto käyttäjälle. Kun käyttäjä pyytää lataapdf.php-sivua se tarkastaa, onko sille lähetetty http post:lla salasana, jos on niin se tarkastaa salasanan tietokantaa vasten. Jos salasana on oikein pdf-tiedosto lähetetään käyttäjälle. Jos salasana on väärin tai sitä ei ole annettu näytetään käyttäjälle kirjautumislomake ja tarvittaessa valitetaan virheellisestä salasanasta (eli php:llä tulostelet virheilmon sivulle haluamaasi kohtaan).

Javascriptiä et tarvitse tuohon ollenkaan paitsi jos haluat jo selaimen päässä tarkastaa, että lomakkeeseen on syötetty jotain ennen kuin se lähetetään palvelimelle.
ex-Pertti 20:53 7.9.11 
Sori keskustelunavaus on "vähän" epäselvä :D.

Siis en mä tod. javascriptillä vertaa salasanaa tietokannassa olevaan :). Ainut ongelma mulla on siis tuo "(eli php:llä tulostelet virheilmon sivulle haluamaasi kohtaan)"-osio! Jostain syystä tään vertailun loppuosa, siis toi elsehaara aiheutta mulle harmaita hiuksia:


PHP
//functions.php
if ($given_password == $correct_password) {
        ?>
        <embed src="../pdf/tulokset.pdf" height="2350" width="850"></embed>
        <?php
        }
       
        else {
                // echo "väärä salasana!";
                header("Location: ../index.php");
        }
 


..Mulla on index.php-filu josta mä haen tähän filuun formista käyttäjän syöttämän salasanan ja vertaan niitä tuossa if-lauseessa. PDF-filun saan avattua ihan oikein mutta kun mä haluaisin ilmoittaa käyttäjälle väärästä salasanasta (siinä index.php-tiedostossa missä kaikki html-koodi on) niin se homma kusee. Jos mä laitan tohon vaikka >>echo "väärä salana";>> niin se teksti tulostuu tyhjänä sivuna nimellä functions.php enkä mä tajua juuri tota kohtaa, eli miten mä saisin sen virheilmoituksen tulostettua index-filussa.

Nythän toi siis väärän salansanan kohdalla avaa index.php:n (joka on oikea filu) mutta ei anna mitään virheilmoitusta käyttäjälle :/. Voinko mä siis jotenkin sijoittaa esim. html-tageilla ton virheilmoituksen toiseen tiedostoon vaikkapa johonkon tekstiformiin?
Haizuli 21:13 7.9.11 
En tiedä onko tämä (tuskin) oikea tekniikka tuon asian hoitamiseen, mutta ainakin naamakirja käyttää loggautuessa rautalankaviritelmää ja avaa uuden sivun jos käyttäjän käyttäjätunnus ja/tai salasana on väärin. Tuolla ainakin pääset eteenpäin, mutta toki vaatii yhden (melkein identtisen) sivun tekemistä, joten epäilen ettei tuo taida ihan validi tapa olla :).
Chrysalid 21:18 7.9.11 
Yleisin tapa tehdä tuo on käsittääkseni asettaa cookie tai sessiomuuttuja serveripuolelta kun salasana on hyväksytty, ja edelleenohjata sen jälkeen sivulle, joka sekin sisältää tarkistuksen, onko kirjautuminen aktiivisena. Isommissa järjestelmissä kannattaa aktiivisten sessioiden hallintaan käyttää erillistä temppikantaa.
editoitu: 19:37 8.9.11
eis 19:35 8.9.11 

PHP
header("Location: loginsivu.php?salasanavaarin");

ja loginsivulle parametrin perusteella virheviestin tulostus

Edit: tosin nytkun luin ekan viestin, niin miksi et vaan tarkista silla ko sivulla itsellään:


HTML
<form action="" method="post">
</form>
 


Ja tosiaan noin kuin Chrysalid sanoikin - sit vasta ohjataan eteenpäin jos päästiin sisälle järjestelmään ja sielä päässä viel erillinen tarkistus.