Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP:n aloittanut

Sivun loppuun

viljami [13.03.2005 08:42:37]

#

On niin kauan kun on tänne viimeks kirjautunu VB:n merkeissä että ei meinanu muistaa salasanaa... Mutta asiaan.

Todellakin olen aloittanut vasta php:hen tutustumisen. Ja tuossa kopioin suoraa koskemattomana

https://www.ohjelmointiputka.net/koodivinkit/23878-php-kirjautuminen-sessioneilla

Tuolta löytyvän scriptin. Koodi kyllä toimii oikein, eli tekee kaiken tarvittavan. Mutta miksi sivulle tulee nämä errorit.

Notice: Undefined index: tunnus in c:\Inetpub\wwwroot\tarkista.php on line 35

Notice: Undefined index: email in c:\Inetpub\wwwroot\tarkista.php on line 36

Notice: Undefined index: salasana in c:\Inetpub\wwwroot\tarkista.php on line 37

Notice: Undefined index: salasana2 in c:\Inetpub\wwwroot\tarkista.php on line 38

Notice: Undefined index: act in c:\Inetpub\wwwroot\tarkista.php on line 100

Ja niikö erroreistakin voi päätellä on käytösssäni IIS.
Kyseisistä scripteistä näiltä riveiltä en ole löytänyt mitään omaan silmään poikkeavaa.

Samaan tormäsin muutamia päiviä sitten kun edelleen Copy Pastella siirsin vieraskirja scriptit. Joissa tuli samanlaisia virheitä. Mutta silloinkin tuo itse vieraskirja toimi oikein.

pwc [13.03.2005 10:39:32]

#

Nuo johtuu siitä, että muuttujia $tunnus, $email jne. ei ole määritelty. Johtuu php:n conffeista, ota register_globals pois päältä. Taikka sitten vaihdat koodista kaikki $_POST['muuttuja'] -kohdat $muuttujaksi..

edit: niinjoo, IIS:tä en tiedä.

ajv [13.03.2005 11:00:43]

#

Juu elikkä eihän huomautukset varsinaisesti liity register_globals-asetukseen vaan error_reporting-asetukseen. Huomautukset ilmoittavat, jos jokin muuttuja on jäänyt esittelemättä ja näin ollen parantavat tietoturvaa tietyssä määrin. Itse suosittelisin pitämään asetukset tiukkoina ja muokkaamaan koodin sellaiseksi, että huomautuksia ei tule. Ei se sen kummempaa ole, kuin esittelet muuttujat ennen niiden käyttöä. Tässä muutama esimerkki, jolla huomautuksen voi välttää:

<?php
//antaa huomautuksen koska $arvo:a ei ole määritelty
if($arvo)
   //do something

//ratkaisu on tarkistaa, onko se määritelty ja tarvittaessa, että se ei ole tyhjä:
if(isset($arvo) && $arvo != "")
   //do something

//tai vaihtoehtoisesti esitellä muuttuja skriptin alussa
$arvo = false;
if($arvo)
   //do something

//Huomaa! Nyt kun $arvo on esitelty - vaikkakin epätodeksi - isset($arvo) palauttaa true

?>

Toinen vaihtoehto on ottaa huomautukset pois käytöstä. Tämä tapahtuu laittamalla skriptin alkuun

<?php
error_reporting(E_ALL ^ E_NOTICE);
?>

Tai vaihtoehtoisesti muuttaa php.ini-tiedostosta ko. asetuksen
error_reporting = E_ALL & ~E_NOTICE

Tämän voisi melkein lisätä FAQ:iin

viljami [13.03.2005 12:07:01]

#

Jep, tuolla alko pelaan. Luonnollisesti. Kun otti virheilmoitukset pois päältä.

PWC:n esmerkki ei toiminu. Ilmotti että undefined VARIABLE. eli ei undefined index.

ajv:n esimerkki oli muuten hyvä, mutta en osannut käyttää sitä :D Olisko mahdotonta jos liittäsit sen alkuperäiseen koodiin ja sitte tänne niin nään miten se toimii?

ajv [13.03.2005 12:12:55]

#

while(et_osaa(asia)){
   opettele(asia)
}

:)

viljami [13.03.2005 16:14:28]

#

Eli on mahdotonta?
Näyttää siltä. ajv:lle tiedoksi että en olisi kysynyt täällä tätä kysymystä jos sen olisin tiennyt. Eli niinkö varmaan arvattavissa, että kysyin asiaa siksi että nimenomaan voisin opiskella asiaa, ja uutta ohjelmointikieltä.... Opiskellaan, opiskellaan....

Antti Laaksonen [13.03.2005 16:36:21]

#

Huomautukset eivät siis ole virheitä ensinkään, ja koodi toimii niistä huolimatta. Jos tietää, mitä on tekemässä, voi huomautukset mielestäni jättää omaan arvoonsa. Monesti ne onkin kytketty pois PHP:n asetuksissa. Jos kuitenkin haluat eroon huomautuksista kytkemättä niitä pois, mitä jotkut pitävät hyvänä ohjelmointitapana, et saa viitata semmoisiin muuttujiin tai taulukonkohtiin, joille ei ole annettu arvoa.

Ensimmäinen huomautus on "Notice: Undefined index: tunnus - - on line 35". Suomeksi siis "Huomautus: Määrittämätön taulukonkohta: tunnus - - rivillä 35". Vastaavalla rivillä lukee $_POST["tunnus"]. Jos lomakkeen kautta ei ole tullut tunnus-muuttujaa eli sivu ladataan ensimmäisen kerran, taulukonkohtaa ei ole olemassa. Korjaus on tarkistaa ennen sijoitusta, että $_POST["tunnus"] on asetettu. Tämä tapahtuu isset-funktiolla ajv:n näyttämän mallin mukaan. Samantapainen korjaus kelpaa myös muihin kohtiin.

ajv [13.03.2005 17:09:06]

#

viljami kirjoitti:

ajv:lle tiedoksi että en olisi kysynyt täällä tätä kysymystä jos sen olisin tiennyt. Eli niinkö varmaan arvattavissa, että kysyin asiaa siksi että nimenomaan voisin opiskella asiaa, ja uutta ohjelmointikieltä.... Opiskellaan, opiskellaan....

Eh.. Pyysit valmista koodia ja yritin vastata siihen mahdollisimman ystävällisesti (huomaa hymiö). Sitäpaitsi aika helposti tuo antamani esimerkki on sovellettavissa siihen valmiiseen koodiin. Jos et osaa soveltaa, kannattaa palata opinnoissa hieman taaksepäin ja kerrata perusasiat.

viljami [13.03.2005 17:35:40]

#

Anteeksipyyntö nyt ensialkuun. Ja kiitos. Kyllähän tämä tästa alkaa selviämään. Minua hämäsi ajv:n tekstissä se kun iisetin jälkeen oli //do something ja se mulla huijas. Kun aattelin vain mielessäni että ei mulla tarvi "tehdä mitään" vaan määritellä nimenomaan kyseinen muuttuja. No jep nyt alko toimimaan. Mutta tätä riviä en saanut toimimaan enää samalla lailla. Tämä rivi ilmoittaa....

if ($_GET["act"] == "rekisteroidy")

... edelleen tämän.
Notice: Undefined index: act in c:\Inetpub\wwwroot\tarkista.php on line 100

Ja kun yrittää määritellä se ei sivulle tule enää mitään... :D
Pitänee viellä yrittää...

Metabolix [13.03.2005 17:56:32]

#

Sitä varten pitääkin olla näin:

if (isset($_GET["act"]) && ($_GET["act"] == "rekisteroidy"))

ajv [13.03.2005 18:02:24]

#

if(isset($_GET['act']) && $_GET['act'] == "rekisteroidy")

En osaa hirveän hyvin tuota and-operaatiota selittää, mutta yritetään:
AND (&&) -operaatiossa tarkastetaan ensimmäinen ehto, jos se ei toteudu, niin loput ehdot jätetään tarkastamatta, koska tulos on true vain, jos kaikki ehdot täyttyvät.
OR (||) -operaatiossa taas loogisesti tarkistetaan kaikki ehdot, koska siinä riittää, että yksikin ehto toteutuu.

Eli $_GET['act']:a verrataan merkkijonoon vain, jos se on asetettu.

Tämä sitten taas ei päde bittitason operaatioihin & ja |.

Hellami [13.03.2005 18:08:38]

#

viljami kirjoitti:

Ja kun yrittää määritellä se ei sivulle tule enää mitään... :D
Pitänee viellä yrittää...

SysRq868 / kommentit kirjoitti:

Entäs toi kun menee tarkista.php kun on jo kirjautunut,
näyttää tyhjän sivun.

Mulla toimii hyvin mbnetissä, joten ?.

Mahdollisesti sama vika?
Ja osoiterivissä siis tyyliin: "tarkista.php?act=rekisteroidy"?


Sivun alkuun

Vastaus

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

Tietoa sivustosta