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ä?
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.
Latasin tuon, mutta meni sormi suuhun. Mitenkäs sitä käytetään?
Antti on ansiokkaasti kirjoittanut oppaan nettisivuston aloittamisesta, ei anneta sen mennä hukkaan. Mukana on kuvitettu XAMPP-ohje.
Kiitoksia!
Uusi ongelma:
Käytän tätä(https://www.ohjelmointiputka.net/koodivinkit/
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.
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:
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:
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ä.
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
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.
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...
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
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.
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:
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.
Ei tullut mitään, kun uusia virheitä lappasi. Siirryin kokeilemaan tätä(https://www.ohjelmointiputka.net/koodivinkit/
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.&
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ä?
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
ZuBer kirjoitti:
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in J:\apachefriends\xampp\htdocs\****\****\ylaosa.&
#8203;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", "");
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ä?
Molemmat.
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.
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.
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.
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.
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).
Zend
Enpä tiedä, tuleeko minun taidoillani mitään noin monimutkaisesta systeemistä. Alle kk PHP:n kanssa tekemisissä, tosin muiden kielien kanssa kauemminkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.