Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kuinka pääsen alkuun PHP:ssa?

Sivun loppuun

ZuBer [13.04.2011 18:22:34]

#

Moi!

Onko olemassa jotain PHP-editoria tai vastaavaa, ettei tarvitsisi lähettää tiedostoja aina palvelimelle?

Olen ihan aloittelija ja PHP kiinnostaisi, mutta voiko PHP:tä käyttää netittömällä koneella?

Linkkiä?

Grez [13.04.2011 18:31:27]

#

Editori ja PHP-koodin ajaminen eivät liity toisiinsa oikeastaan mitenkään. Eli oletan että kysymys koskee enemmänkin PHP-koodin ajamista paikallisella koneella.

Helpoin ratkaisu on laittaa omalle koneelle jokin PHP:n ja WWW-palvelimen sisältämä valmispaketti, jolloin skriptejä voi muokkailla suoraan paikallisella levyllä ja testailla paikallisesti. Nettiyhteyttäkään ei silloin tarvitse. Tällaisia paketteja on lukuisia, esim. XAMPP.

ZuBer [13.04.2011 20:15:35]

#

Latasin tuon, mutta meni sormi suuhun. Mitenkäs sitä käytetään?

Metabolix [13.04.2011 20:18:26]

#

Antti on ansiokkaasti kirjoittanut oppaan nettisivuston aloittamisesta, ei anneta sen mennä hukkaan. Mukana on kuvitettu XAMPP-ohje.

ZuBer [14.04.2011 21:59:56]

#

Kiitoksia!

Uusi ongelma:
Käytän tätä(https://www.ohjelmointiputka.net/koodivinkit/23878-php-kirjautuminen-sessioneilla)koodivinkkiä. Aina, kun käynnistän tarkista.php:n, tulee seuraavat virheilmoitukset:

Notice: Undefined index: tunnus in C:\...tarkista.php on line 35

Notice: Undefined index: email in C:\...tarkista.php on line 36

Notice: Undefined index: salasana in C:\...tarkista.php on line 37

Notice: Undefined index: salasana2 in C:\...tarkista.php on line 38

Notice: Undefined index: act in C:\...tarkista.php on line 94

Kirjautuminen kyllä toimii, mutta nuo häiritsevät.

Metabolix [14.04.2011 22:07:42]

#

Putkan vanhat koodivinkit eivät laadullaan häikäise. Tuossakin virheilmoitukset ovat vain yksi ongelma, toteutusta ei voi todellakaan kehua hyväksi.

Voit piilottaa yksittäiset virheet @-merkillä, tuossa tapauksessa näin:

$tunnus = clean(@$_POST["tunnus"]);

Usein piilottaminen on huono tapa ja kannattaa sen sijaan tehdä vaikka if-lause:

$tunnus = null;
if (isset($_POST["tunnus"])) {
  $tunnus = clean($_POST["tunnus"]);
}

Triton [14.04.2011 23:20:05]

#

Tai one-linerina Metabolixin if-lause ehdotus:

$tunnus = ( isset( $_POST[ 'tunnus' ] ) ? clean( $_POST[ 'tunnus' ] ) : null );

Edit. Itse asiassa tuo kannattaisi määritellä omaan funktioon, niin
vältytään turhalta koodin toistolta.

Vaikka näin:

function puhdista( array $taulukko, $avain ) {
   return ( isset( $taulukko[ $avain ] ) ? clean( $taulukko[ $avain ] ) : null );
}

$tunnus = puhdista( $_POST, "tunnus" );

// Tässä tapauksessa voidaan tehdä yhtälailla näinkin:

$tunnus = puhdista( $_GET, "tunnus" );

makumaku [15.04.2011 08:19:08]

#

Ei kai tuo ole kovin järkevää määritellä ensin suomenkielinen funktio puhdista(), jossa sitten taas kutsutaan uutta englanninkielistä functiota clean()? Kannattais varmaan tehdä vaan yksi funktio joka hoitaa homman. Tai ainakin käyttää pelkästään jompaakumpaa kieltä jotta funktiioiden nimeäminen pysyisi selkeänä.

ZuBer [15.04.2011 08:33:23]

#

Sain ne kohdat jo toimimaan, mutta uutta valitusta pukkaa:

Notice: Undefined index: act in C:\...tarkista.php on line 100

Deprecated: Function ereg_replace() is deprecated in C:\...\tarkista.php on line 29

Deprecated: Function ereg_replace() is deprecated in C:\...tarkista.php on line 29

Deprecated: Function session_register() is deprecated in C:...\tarkista.php on line 46

Deprecated: Function session_register() is deprecated in C:...\tarkista.php on line 48

-tossu- [15.04.2011 10:06:23]

#

ZuBer kirjoitti:

Sain ne kohdat jo toimimaan, mutta uutta valitusta pukkaa:

Valitukset tarkoittavat, että session_register ja ereg_replace -funktiot ovat vanhentuneita, eikä niitä pitäisi enää käyttää.

Katsoin koodin pikaisesti läpi. Funktion session_register käyttäminen näyttää olevan aivan turhaa, joten kokeile poistaa rivit, joissa sitä kutsutaan.
Session_unregister-funktiot voit korvata funktiolla session_destroy.

Ereg_replace-funktionkaan käyttämiselle ei näytä olevan mitään syytä, eli kokeile korvata se funktiolla str_replace.

Triton [15.04.2011 11:42:50]

#

makumaku kirjoitti:

Ei kai tuo ole kovin järkevää määritellä ensin suomenkielinen funktio puhdista(), jossa sitten taas kutsutaan uutta englanninkielistä functiota clean()? Kannattais varmaan tehdä vaan yksi funktio joka hoitaa homman. Tai ainakin käyttää pelkästään jompaakumpaa kieltä jotta funktiioiden nimeäminen pysyisi selkeänä.

Öö..tuota noin täytyy sanoa, että mielestäni takerruit hieman epäolennaiseen asiaan... Tuon funktionhan nyt voi nimetä ihan niin kuin haluaa. Minulla ei ole myös pienintäkään aavistusta, mitä tuo clean-funktio tekee, joten sen takia ymppäsin sen suoraan tuon puhdista-funktion sisälle. Tottakai on fiksuinta tehdä yksi funktio, joka hoitaa koko merkkijonon puhdistuksen...

Othnos [15.04.2011 12:20:22]

#

ZuBer kirjoitti:

Sain ne kohdat jo toimimaan, mutta uutta valitusta pukkaa:

Notice: Undefined index: act in C:\...tarkista.php on line 100

Kuten aikaisemmin jo mainittiin yrität verrata muuttujaa jota ei ole määritetty. Korjaus tuo aikaisemmin mainittu

if (isset($_GET['act') ...

Triton kirjoitti:

Tuon funktionhan nyt voi nimetä ihan niin kuin haluaa.

Voi, mutta kannattaako koodin selkeyden vuoksi? Helpompi opetella alusta asti "oikeat" koodaustavat, kuin alkaa myöhemmässä vaiheessa muuttamaan "vääriä" tapoja oikeiksi. Olet kyllä oikeassa, että valmista koodinpätkää käytettäessä ei yleensä ole järkevää alkaa nimeämään omaan koodiin sopivaksi, mutta kyseisessä tapauksessa saattaisi olla hyvää harjoitusta.

Triton [15.04.2011 13:36:43]

#

Othnos kirjoitti:

Triton kirjoitti:

Tuon funktionhan nyt voi nimetä ihan niin kuin haluaa.

Voi, mutta kannattaako koodin selkeyden vuoksi? Helpompi opetella alusta asti "oikeat" koodaustavat, kuin alkaa myöhemmässä vaiheessa muuttamaan "vääriä" tapoja oikeiksi. Olet kyllä oikeassa, että valmista koodinpätkää käytettäessä ei yleensä ole järkevää alkaa nimeämään omaan koodiin sopivaksi, mutta kyseisessä tapauksessa saattaisi olla hyvää harjoitusta.

Epäilen, että tulin nyt hieman väärin ymmärretyksi. En nyt tarkoittanut sitä, että funktio voitaisiin nimetä miten tahansa huonosti, vaan sitä, että jokainen voi tuon funktion nimetä sen mukaan, minkä katsoo sopivaksi. Kuten aikaisemmin kävi ilmi, että tuon puhdista-funktion sisällä tulisi tehdä myös muitakin puhdistamiseen liittyviä operaatioita, niin se, mitä funktiossa tehdään voi vaikuttaa ihan ymmärrettävästikin siihen, miten tuo funktio tulisi nimetä.
Tottakai täytyy tähdätä siihen, että koodi on mahdollisimman selkeää ja helppoa luettavaa, ettei tarvitse myöhemmässä vaiheessa tehdä mitään refaktorointeja yms...

Eli jotta tämä täysin sivuraiteille eksynyt keskustelu saadaan loppumaan, niin tässä on funktio sellaisena jona sen nyt pitäisi olla:

function clean( array $array, $key ) {

   $value = ( isset( $array[ $key ] ) ? $array[ $key ] : null );

   // Tässä tehdään puhdistusoperaatiot...

   return $value;

}

Metabolix [15.04.2011 14:31:09]

#

No mutta siitä ei pääse yli eikä ympäri, että koko $_POST-taulukon kopioiminen funktion parametrina on tuhlausta. Muutenkin tuo "korjattu" funktio on entistä typerämpi, koska NULL-arvo ajetaan turhaan ties minkä puhdistuksen läpi. Olisi selvempää käyttää if-lausetta ja palauttaa suoraan NULL, jos arvoa ei löydy. Silloin funktion kutsujankin on helpompi tarkistaa, oliko arvo lähetetty vai ei.

Sitä paitsi kyseisen koodivinkin koko clean-funktio on hieman magic_quotes-henkinen purkkaratkaisu: sillä ei ole täytetty mitään todellista tarvetta, vaan siinä tehdään käyttäjän lähettämään dataan muutama summittainen, epäintuitiivinen muutos, joilla paikkaillaan vinkin muita ongelmia.

Ei kannata ottaa mallia ikivanhoista koodivinkeistä. Kai nyt maalaisjärkikin sanoo, että jos vinkin käytöstä tulee heti alkuun kymmenkunta varoitusta, se ei luultavasti ole kovin hyvä vinkki.

ZuBer [15.04.2011 16:09:40]

#

Ei tullut mitään, kun uusia virheitä lappasi. Siirryin kokeilemaan tätä(https://www.ohjelmointiputka.net/koodivinkit/24301-php-kirjautuminen-rekisteröityminen-mysql-llä)
Siinäkin tuli virhe:
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in J:\apachefriends\xampp\htdocs\****\****\ylaosa.​php on line 7
En ole 100% varma lukiko siinä 100% noin, koska se on toisella koneella ja tuon kopioin tuon koodivinkin kommenteista. Mutta tuollaista antaa. Käytän Apachea, että johtuisiko se siitä?

Triton [15.04.2011 16:21:20]

#

Metabolix kirjoitti:

No mutta siitä ei pääse yli eikä ympäri, että koko $_POST-taulukon kopioiminen funktion parametrina on tuhlausta. Muutenkin tuo "korjattu" funktio on entistä typerämpi, koska NULL-arvo ajetaan turhaan ties minkä puhdistuksen läpi. Olisi selvempää käyttää if-lausetta ja palauttaa suoraan NULL, jos arvoa ei löydy. Silloin funktion kutsujankin on helpompi tarkistaa, oliko arvo lähetetty vai ei.

Totta puhut tuo ns. "korjattu" versio on itse asiassa erittäin surkea, enkä ymmärrä mitä mielessäni liikkuin kun sen kirjoitin... :D

Macro [15.04.2011 16:27:15]

#

ZuBer kirjoitti:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in J:\apachefriends\xampp\htdocs\****\****\ylaosa.​php on line 7

Sun pitää antaa mysql_connect-funktion parametreiksi MySQL-palvelimen osoite, käyttäjätunnus ja salasana. ODBC ja using password: NO ovat minulla ainakin oletuksina, kun ne jättää tyhjiksi.

MySQL:n käyttöön tarttet sitten vielä sen Apachen lisäksi MySQL-palvelimen. Kumminkin polun perusteella sulla on XAMPP, jossa on jo MySQL-palvelin. Kirjoita mysql_connect-funktioon tunnukseksi root ja jätä salasana tyhjäksi, jollet ole sitä asettanut.

mysql_connect("localhost", "root", "");

makumaku [15.04.2011 16:27:53]

#

Ei johdu Apachesta. Kuten virheessä lukee, niin mysql tietokantaan yritetään ottaa yhteyttä mutta oikeudet eivät tähän ole kunnossa. Huomasit kai että tässä koodivinkissä käytetään mysql-tietokantaa, ja siten täytyy asettaa tietokannan käyttäjätunnukset, salasanat, tietokannan nimi, jne.. oikeiksi?
Jos asensit tuon Xamppin, niin todennäköisesti sinulla mysql-palvelin kyllä pyörii, mutta koodissa (config.php) olevan ja tietokantaan asetetut tunnukset täytyy vastata toisiaan.

Yleisesti kysyn että onko sinulla tarkoitus saada jokin kirjautumissysteemi toimimaan, vai haluatko muuten vain opetella php-kieltä?

ZuBer [15.04.2011 16:32:09]

#

Molemmat.

makumaku [15.04.2011 16:43:49]

#

Itse melkein voisin suositella että jos on tarvetta kirjautumissyteemille niin etsii netistä oikeasti toimivan ja testatun valmiin systeemin, jota useat käyttää. Näin ei tarvitse itse pystyä tarkistamaan jokaista riviä että onko siellä aukkoja ja toimiiko koodi. Tälläisissä palstoille heitetyissä vinkeissä taso voi olla hyvin kirjavaa, osa varmaan hyviä mutta sitten osa voi olla jopa testaamatonta koodia. Eli pitäisi olla itsellä taito tarkistaa mitä nämä oikeasti tekee.

Sitten erikseen paneutuu php-koodauksen opetteluun. Ottaa vaikka jonkun helpon oppaan, esim https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=phpj,
ja alkaa tuota lukea ja samalla kokeilee koodata itsekin. Sitten kun opas on luettu pari kertaa ja jotenkin sisäistetty niin voi siirtyä esim tekemään näitä https://www.ohjelmointiputka.net/phph/

Mutta jos ottaa jonkun epämääräisen kirjautumissysteemin pohjaksi (en tarkoita edellä olleita koodeja), niin saattaa käydä niin ettei systeemi toimi edes kunnolla ja opettelu käy liian hankalaksi.

qeijo [15.04.2011 17:52:07]

#

Mielestäni ei ole järkevää miettiä ko. koodivinkkiä..

Siinä käytetään mm. tiedostopohjaista tunnuksien hallintaa, joka on mielestäni aika huono ja jopa turvaton tapa..
Lisäksi se on semmoinen soppa html ja php sekaisin että sen kehitys ja ylläpito olisi aika raskasta, suorastaan mahdotonta..

Suosittelen (kaikki tietävänä) että lähdet heti alusta tekemään asiat muutamalla perus säännöllä:

Pidä html ja php / php-logiikka erillään tosistaan, opettele hyödyntämään olio ohjelmointia => OOP


Tutustu johonkin php-frameworkiin, ja MVC-ohjelmointi 'tapaan'

Aina kun teet jotain, mieti miten voisit tehdä sen mahdollisimman universaaliksi/modulaariseksi.

Kirjoita koodit ja ohjelmat kirjastotyyppisiksi jolloin pääset vähemmällä, ja kehitys ja ylläpito on helpompaa.

Othnos [15.04.2011 18:34:37]

#

Mikäs tiedostoista tekee turvattoman?

Voisitko antaa esimerkki koodin miten toteuttaa MVC-mallia web-ohjelmoinnissa? Yrittänyt hieman etsiä hyviä vinkkejä, mutta lähes tuloksetta.

Metabolix [15.04.2011 19:00:21]

#

Othnos: Lue tämä viestini MVC-mallista. Asiasta ei tarvitse tehdä mutkikasta, vaan pääasia on, että ensin käsitellään syöte (controller) ja sitten tulostetaan (view) ja että tiedon hakuun ja tallentamiseen on yhtenäinen proseduraalinen tai luokkapohjainen rajapinta (model).

jimi-kimi [15.04.2011 22:57:53]

#

Zend

ZuBer [16.04.2011 10:49:41]

#

Enpä tiedä, tuleeko minun taidoillani mitään noin monimutkaisesta systeemistä. Alle kk PHP:n kanssa tekemisissä, tosin muiden kielien kanssa kauemminkin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta