Sivustoa tehdessä tahtoo putkahdella monenlaisia kysymyksia mieleen, mutta koskaan ei viitsi yhtä varten tehdä tänne omaa aihettaan. Pakko kuitenkin saada vastaus, en pärjää kovin kauaa pelkällä mutu-tiedolla. Niinpä kokoan tähän kaikki mieleen tulleet kysymykset, jos niitä nyt saan päähän palautettua enää.
No ensinnä, validaattori itkee lomakkeesta ja sanoo näin: "document type does not allow element "input" here; missing one of "ins", "del", "h1", "h2", "h3", "h4", "h5", "h6", "p", "div", "address", "fieldset" start-tag." Kohta mistä valittaa on "...t" value="Hyväksyn käyttöehdot ja rekisteröidyn"/>" Koodi menee näin:
<form action="PHP/rekisterointi.php" method="get"> <p><input type="text" name="tunnus" maxlength="18" size="18" value=""/> käyttäjätunnus</p> <p><input type="password" name="salasana1" maxlength="18" size="18" value=""/> salasana</p> <p><input type="password" name="salasana2" maxlength="18" size="18" value=""/> salasana uudelleen</p> Ja niin edelleen, tässä on vaikka mitä roskaa väliss... <input type="submit" value="Hyväksyn käyttöehdot ja rekisteröidyn"/> </form>
Miten tehdään turvallinen kirjautumissysteemi? Itse tein niin, että tiedot välitetään lomakkeelta ihan normisti getin kautta, ja tunnus, salasanan md5-hashi ja muut tiedot säilytetään MySQL-tietokannassa. Onko jotain mihin pitäisi kiinnittää huomiota erityisesti?
Teenkö ihan päin persettä jos kirjauduttaessa tallennan evästeeseen kirjautuneen tunnuksen, ja tarkistan aina onko sellainen eväste kuin tunnus tyhjä (if ($tunnus == "")) jotta tiedän onko kirjauduttu sisään?
Kuinka paljon tietoa voi MySQL tietokannan yhteen tauluun sijoittaa? Ja onko järkevintä tallentaa artikkelit, foorumin viestit ynnä muut isot jutut tekstitiedostoon vai tietokantaan? Mitä tulisi ottaa huomioon?
Kuinka määrään kauanko jokin eväste on voimassa?
Kuinka voin tehdä kuvalinkin jonka kuva vaihtuu kun hiirellä osoitetaan siihen? Jotenkin CSS:n avulla tämä onnistui mutta en muista enkä osaa Googlettaa että miten. Tällä hetkellä on vain img-tagi a-tagin sisällä.
Hmm, siinä kai enin osa ainakin tuli, lisäilen jos muistuu lisää. Ja kiitoksia jo etukäteen jos joku viitsisi vastata.
EDIT: Joo sitä vielä että mikä on järkevin merkistökoodaus webbisivuille? ISO 8859-1, ISO 8859-15, UTF-8 vai mikä?
Miten tehdään turvallinen kirjautumissysteemi? Itse tein niin, että tiedot välitetään lomakkeelta ihan normisti getin kautta, ja tunnus, salasanan md5-hashi ja muut tiedot säilytetään MySQL-tietokannassa. Onko jotain mihin pitäisi kiinnittää huomiota erityisesti?
Varmaan POSTin kautta olisi parempi lähettää, eipä muuta.
Teenkö ihan päin persettä jos kirjauduttaessa tallennan evästeeseen kirjautuneen tunnuksen, ja tarkistan aina onko sellainen eväste kuin tunnus tyhjä (if ($tunnus == "")) jotta tiedän onko kirjauduttu sisään?
Suosittelen mielummin sessioneiden käyttöä.
Kuinka voin tehdä kuvalinkin jonka kuva vaihtuu kun hiirellä osoitetaan siihen? Jotenkin CSS:n avulla tämä onnistui mutta en muista enkä osaa Googlettaa että miten. Tällä hetkellä on vain img-tagi a-tagin sisällä.
Laitat img -tagiin vaikka class="kuva" ja sitten cssään kuva:hover{tapahtumat}
Quirzo: Minulta pääsi aivopieru, tietysti käytän sessioita enkä evästeitä, evästeet taitavat olla suurinpien tietoturvariskien listalla kun niitä voi kuka tahansa käpristellä. Harmi että sessiotkin heittävät id:n evästeellä, jos jollekin sattuu sellainen kämmi että evää evästeet niin eipä toimi sivut...
Siirryin myös postin käyttöön getin sijasta, joten onpa nyt sekin tietoturvariski/epäkäytännöllisyys poistettu. Muistelen kuitenkin lukeneeni jostain ongelmista postin kohdalla, olikohan jotain että se ei välttämättä toimi aina joissain tilanteissa, muistelenkohan ihan höpöjä?
Tumpelo kirjoitti:
No ensinnä, validaattori itkee lomakkeesta ja sanoo näin: "document type does not allow element "input" here; missing one of "ins", "del", "h1", "h2", "h3", "h4", "h5", "h6", "p", "div", "address", "fieldset" start-tag." Kohta mistä valittaa on "...t" value="Hyväksyn käyttöehdot ja rekisteröidyn"/>"
input ei voi olla suoraan formin sisällä, vaan välissä pitää olla joku listatuista elementeistä.
Tumpelo kirjoitti:
Ja onko järkevintä tallentaa artikkelit, foorumin viestit ynnä muut isot jutut tekstitiedostoon vai tietokantaan?
Jos kanta on käytettävissä, on hyvin vähän syitä olla käyttämättä sitä.
Tumpelo kirjoitti:
Kuinka määrään kauanko jokin eväste on voimassa?
setcookie-funktion kolmas parametri.
Tumpelo kirjoitti:
Kuinka voin tehdä kuvalinkin jonka kuva vaihtuu kun hiirellä osoitetaan siihen?
Tee kuva, jossa on molemmat kuvat päällekäin, laite se elementin taustaksi ja muuta taustakuvan sijaintia :hoverissa. Ks. esim. http://alistapart.com/articles/slidingdoors2/
Tumpelo kirjoitti:
EDIT: Joo sitä vielä että mikä on järkevin merkistökoodaus webbisivuille? ISO 8859-1, ISO 8859-15, UTF-8 vai mikä?
UTF-8
Tumpelo kirjoitti:
Ja onko järkevintä tallentaa artikkelit, foorumin viestit ynnä muut isot jutut tekstitiedostoon vai tietokantaan? Mitä tulisi ottaa huomioon?
Ainakin keskustelu on järkevää toteuttaa tietokannan avulla, sillä tiedostojen kanssa tulee monta murhetta viestien määrän kasvaessa. Tietokannan etuna on, että tietoa pystyy hakemaan ja muuttamaan tehokkaasti. Jos tieto on muuttumatonta ja se vain näytetään sellaisenaan nettisivulla, tiedosto kelpaa yhtä hyvin. Tietokannasta kannattaa ottaa aika ajoin varmuuskopioita ja pitää olla varovainen, mitä kyselyihin kirjoittaa. Esim. jos tietoa muuttaessa unohtaa kirjoittaa, mitä riviä muutos koskee, sama muutos tehdäänkin kaikkiin riveihin, ja tällöin voi tuhoutua paljon tietoa.
Tumpelo kirjoitti:
- - evästeet taitavat olla suurinpien tietoturvariskien listalla kun niitä voi kuka tahansa käpristellä. Harmi että sessiotkin heittävät id:n evästeellä, jos jollekin sattuu sellainen kämmi että evää evästeet niin eipä toimi sivut...
Evästeitä ei pysty tutkimaan kuka tahansa, vaan ainoastaan käyttäjä, jonka koneella eväste on, ja sivusto, joka evästeen on asettanut. Istunnon tunnus tallennetaan tosiaan yleensä evästeeseen, eli istunto ei ole juuri evästettä turvallisempi. Jos joku saa tietoonsa istunnon tunnuksen, hän voi esiintyä mainiosti toisena käyttäjänä. Mutta istunnossa on sentään se etu, että käyttäjän muita tietoja ei lähetetä evästeeseen. Joskus vuosia sitten evästeillä oli huono maine, mutta nykyään voi kyllä luottaa siihen, että ne ovat toiminnassa käyttäjän selaimessa.
Tumpelo kirjoitti:
Siirryin myös postin käyttöön getin sijasta, joten onpa nyt sekin tietoturvariski/epäkäytännöllisyys poistettu.
Jos lomakkeen kautta vain haetaan jotain tietoa, kannattaa käyttää get-lähetystä. Jos taas lomakkeeseen kirjoitetaan paljonkin tietoa ja lähetys aiheuttaa muutoksia palvelimen tietoihin tai saa jotain muuta merkittävää aikaan, post-lähetys on parempi. Esim. Ohjelmointiputkassa haku käyttää get-lähetystä mutta viestin lähetys käyttää post-lähetystä. Riippumatta lähetystavasta tiedot lähetetään sellaisenaan palvelimelle, eli kumpaakaan tapaa ei voi pitää toista turvallisempana. Tosin get-tieto näkyy tunnetusti sivun osoitteessa, eli jos siihen kirjoittaa salaisuuden ja erehtyy lähettämään osoitteen jonnekin, salaisuus paljastuu.
Kiitoksia vinkeistä.
Vielä pukkaa kysymystä: kuinka voin jo luotuun tauluun lisätä tietueen? Minulla on vaikka taulu foo jossa on tietueet mosh TEXT, daa INT ja fy INT ja haluaisin lisätä vielä yhden tietueen hail TEXT tuonne perään.
http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
Auttaisikohan tuo?
Ravver kirjoitti:
http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
Auttaisikohan tuo?
Kyllähän tuo auttoi. Oli pirun sekava sivusto mutta sain lopulta tongittua sieltä tämän: ALTER TABLE taulu ADD foo TEXT.
Mitenkä saa piilotettua nuo PHP:n ja MySQL:n virheilmoitukset? Esimerkiksi, jos käyttäjä kirjoittaa salasanan tai tunnuksen väärin kirjautumisessa, näyttöön tulee hirveä litania virheilmoituksia ja näiden jälkeen sitten vasta echolla tulostettu virheilmoitus tyyliin "Väärä salasana tai tunnus!".
Miten voi / kannattaa tehdä listaus kaikkista liittymistiedoista eli id,enimi,snimi,pkunta,ammatti,email,puhnro... viestit.??? teiksti tiedosto vai jokin muu? Miten php:llä ne saa kerättyä?
Tumpelo kirjoitti:
Mitenkä saa piilotettua nuo PHP:n ja MySQL:n virheilmoitukset? Esimerkiksi, jos käyttäjä kirjoittaa salasanan tai tunnuksen väärin kirjautumisessa, näyttöön tulee hirveä litania virheilmoituksia ja näiden jälkeen sitten vasta echolla tulostettu virheilmoitus tyyliin "Väärä salasana tai tunnus!".
@-merkki funkkarin eessä piilottaa mahdolliset errorit. Virheilmotus-asetuksia voi erikseen säätää PHP:n conffeista tahikka error_reporting -funkkarilla.
@-merkki ei ole _tässä_ se toimivin ratkaisu. Sinun pitäisikin tulkita mitä virheilmoituksia siinä tulee ja toimia niiden mukaan.
Esim.
Tietokantakyselyt pitää tarkistaa ehtolauseella että ne on onnistuneet ja jättää osa koodista menemättä läpi, jos haku ei onnistu, jottei niitä virheilmotuksia tulisi.
Kuinkas tuo käytännössä nyt onnistuu tuon tietokantakyselyn onnistumisen tarkastaminen? Esim seuraavalle koodinpätkälle, jossa tulee erroria jos $tunnus ei vastaa yhtään tietokannan riviä.
$haku = mysql_query("SELECT salasana, status FROM kayttajat WHERE tunnus = '$tunnus'"); $salasana_haettu = mysql_result($haku, 0, "salasana"); $status_haettu = mysql_result($haku, 0, "status");
Ääh, muokkaus ehti mennä umpeen. Sellainenkin kysymys putkahti mieleen, että miten saa ääkköset toimimaan oikein osoiterivin kautta kulkevan tiedon mukana? Itse sivu on utf-8 koodattu, mutta osoiterivin mukana viilettävät ääkköset eivät ilmeisesti joten ne näkyvät kysymysmerkkeinä itse sivulla.
Esim tässä näkyy ainakin minulla kysymysmerkkejä ääkkösten tilalla.
Tumpelo kirjoitti:
Kuinkas tuo käytännössä nyt onnistuu tuon tietokantakyselyn onnistumisen tarkastaminen?
Tässä tapauksessa kysely kyllä onnistuu (eli siinä ei ole virheitä), mutta yksikään tietokannan rivi ei täytä annettuja ehtoja. Ratkaisu on tarkistaa funktiolla mysql_num_rows tietokannasta haettujen rivien määrä, ja jos rivien määrä on nolla, niitä ei myöskään yritetä käsitellä.
Tumpelo kirjoitti:
- - miten saa ääkköset toimimaan oikein osoiterivin kautta kulkevan tiedon mukana?
Funktio utf8_encode tekstiä tulostaessa voisi auttaa tähän ongelmaan.
Kuinkas onnistuu sessionin iän määritys? Vakionahan ne kestävät vain selaimen aukioloajan verran, mutta pitäisi saada sellainen mahdollisuus että ruksataan kirjautumisessa "muista minut" kohta jolloin sessionin iäksi annettaisiin vuosia.
Ja vielä sellaista että mikä olisi helpoin tapa käydä tekstimuuttuja läpi ja korvata jokainen \n merkinnällä "</p>\n\n<p>"?
lainaus:
Ja vielä sellaista että mikä olisi helpoin tapa käydä tekstimuuttuja läpi ja korvata jokainen \n merkinnällä "</p>\n\n<p>"?
$korvaus = str_replace("\n", "</p>\n\n<p>", $tekstimuuttuja);
Tämä?
No sepä juuri.
Aihe on jo aika vanha, joten et voi enää vastata siihen.