Aloittelija kaipaa jälleen apua, tällä kertaa kuvan lisäämisen (ja tulostamisen) kanssa :/
Minun pitäisi saada lisättyä kuva tietokantaan ja eläimen omaan kansioon (kansiot luodaan tietojen lisäämisvaiheessa nimeä käyttäen).
Toistaiseksi olen kyllä saanut lisättyä kuvan tiedot tietokantaan ja kuvan yhteen ns. pääkansioon mutta en saa sitä menemään oikeaan alakansioon (eläimet/$eläimennimi/kuva).
Kuvat pitäisi saada myös lisättyä jo tietojen lisäys vaiheessa. Eli jo silloin kun oikeaa polkua ei vielä ole luotu.
Tulostamaan en ole vielä päässyt mitään mutta epäilen että neuvot ja niksit ovat siinäkin tervetulleita.
Saikohan tästä mitään tolkkua.
Voisin toki laittaa liudan koodia esille, jos tarvitaan.
Nasu86 kirjoitti:
Voisin toki laittaa liudan koodia esille, jos tarvitaan.
Laita vaan, se helpottaa auttamista.
if(isset($_POST['submit_lisaa'])){ $reknro=$_POST['reknro']; $nimi=$_POST['nimi']; $spv=$_POST['spv']; $skk=$_POST['skk']; $svv=$_POST['svv']; $maa=$_POST['maa']; $sukupuoli=$_POST['sukupuoli']; $vari=$_POST['vari']; $kuvio=$_POST['kuvio']; $turkki=$_POST['turkki']; $muuta=$_POST['muuta']; $laatuluokka=$_POST['laatuluokka']; $arvonimi=$_POST['arvonimi']; $isa=$_POST['isa']; $ema=$_POST['ema']; $kasvattaja=$_POST['kasvattaja']; $omistaja=$_POST['omistaja']; $filetmp=$_FILES["file_img"]["tmp_name"]; $filename=$_FILES["file_img"]["name"]; $filetype=$_FILES["file_img"]["type"]; $filepath="rotat/".$nimi.$filename; $syntynyt=$spv.".".$skk.".".$svv; if($_POST['kuollut']){ $kpv=$_POST['kpv']; $kkk=$_POST['kkk']; $kvv=$_POST['kvv']; $kuollut=$kpv.".".$kkk.".".$kvv; } $tietokantayhteys=mysql_CONNECT("tunnukset yms.") or die("Yhteyttä tietokantapalvelimeen ei saatu muodostettua"); mysql_select_db("u428947856_rotta") or die ("Valittua tietokantaa ei löydy"); $lause="INSERT INTO `rottatietokanta`(ID, reknro, nimi, syntynyt, kuollut, maa, sukupuoli, vari, kuvio, turkki, muuta, laatuluokka, arvonimet, isa, ema, kasvattaja, omistaja, img_name, img_path, img_type) VALUES ('','$reknro','$nimi','$syntynyt','$kuollut','$maa','$sukupuoli','$vari','$kuvio','$turkki','$muuta','$laatuluokka','$arvonimi','$isa','$ema','$kasvattaja','$omistaja',$filename','$filepath','$filetype)"; $tulos=mysql_query($lause,$tietokantayhteys) or die ("Tieto ei tallentunut tietokantaan. Tarkista tiedot.").mysql_error(); header("Location:http://www.rottatietokanta.net/index.php"); if ($tulos){ $nimi=strtolower($nimi); mkdir("rotat/$nimi"); // luodaan kansio rotan nimen perusteella copy("rottasivupohja.php", "rotat/$nimi/index.php"); } }
Tämä tekee sen ettei tieto tallennu tietokantaan.
Ennen kuvan lisäämistä tiedot tallentui nätisti.
SQL-lauseesta puuttuu pari heittomerkkiä, $filenamea ennen ja $filetypen jälkeen:
... '$kasvattaja','$omistaja',$filename','$filepath','$filetype);
Mutta tärkeämpi pointti on, että muuttujien lisääminen SQL:n sekaan tällä tavalla aiheuttaa bugeja ja tietoturvaongelman. Esimerkiksi PDO ja prepare+execute on parempi tapa.
Olisiko yksinkertaisempaa laittaa kaikki kuvat samaan kansioon? Miksi jokainen rotta ylipäätään tarvitsee oman kansionsa? Tavanomaisempaa olisi, että joka PHP-sivusta on vain yksi versio, jolle annetaan parametrinä rotan nimi tai id. Kaikki rotta-spesifinen data tallennetaan tietokantaan, eikä tiedostoihin omissa kansioissaan. Uuden rotan lisäämisen ei pitäisi vaikuttaa koodiin tai tiedostoihin (ladattuja kuvia lukuunottamatta) mitenkään.
Olen kyllä tietoinen mySQL:n surkeudesta ja tavoite onkin siirtyä PDO:n käyttäjäksi heti kun olen saanut tämän akuutin deadlinen pois.
Kyseessä on siis oma projekti, jolla suoritan opintojeni näytön ja opinnoissa olemme käyttäneet ainoastaan MySQL:ää.
Toki neuvot voi antaa PDO:na mutta tarvitsen silloin vähän laajemmat ohjeet.
Mietin alunperin tehdä tämän asian yksinkertaisemmin eli ilman kansioita. Rupesin kuitenkin miettimään että kun jokaiselle yksilölle voidaan lisätä 1-5 valokuvaa ja eläimiä on tuhansia, pysyisi homma siistimpänä kun yhden elukan kuvat olisi omassa kansiossaan. Tiedot haetaan kuitenkin aina tietokannasta.
PDO:n voi ottaa käyttöön nykyisen MySQL-tietokantasi kanssa ilman mitään muutoksia, se on vain erilainen rajapinta mysql_xxx
-funktioiden sijaan. Putkan oppaan avulla pääset nopeasti alkuun.
Hätäratkaisu mahdollisimman pienillä muutoksilla on käyttää muuttujat mysql_real_escape_string()
-funktion läpi ennen kuin ne lisätään SQL:n sekaan: https://www.php.net/manual/en/function.mysql-real-escape-string.php#example-1798
Jos eläimiä on tuhansia, sehän tarkoittaa et nykyinen ratkasiu luo tuhansia kansioita, eikä se ole oleellisesti siistimpää. Lisäksi täytyy tarkistaa, ettei $nimi
sisällä kiellettyjä merkkejä kuten pistettä tai kauttaviivoja.
Kuvat voi jakaa kansioihin esimerkiksi kuukauden perusteella, img/2015-09/kuvannimi.jpg
, mutta aluksi tälle tuskin on tarvetta. Muutos on helppo tehdä myöhemminkin.
Nasu86 kirjoitti:
Olen kyllä tietoinen mySQL:n surkeudesta ja tavoite onkin siirtyä PDO:n käyttäjäksi heti kun olen saanut tämän akuutin deadlinen pois.
Et sinä valitettavasti siitä deadlinesta kunnialla selviä tekemällä paskaa. Kun järjestelmä vuotaa ja sekoilee, niin olisi ehkä ollut parempi myöhästyä pikkuisen.
The Alchemist kirjoitti:
Nasu86 kirjoitti:
Olen kyllä tietoinen mySQL:n surkeudesta ja tavoite onkin siirtyä PDO:n käyttäjäksi heti kun olen saanut tämän akuutin deadlinen pois.
Et sinä valitettavasti siitä deadlinesta kunnialla selviä tekemällä paskaa. Kun järjestelmä vuotaa ja sekoilee, niin olisi ehkä ollut parempi myöhästyä pikkuisen.
Valitettavasti tämä ei ole mahdollinen vaihtoehto, joten nyt on mentävä sillä mitä on opetettu ja jatkettava itsenäistä opiskelua kun tämä on ohi.
Koska järjestelmä ei tule olemaan varsinaisesti käytössä ennen "versio 2.0" ja koska ainoa opetettu kieli on ollut MySQL, uskon että homma voidaan saada toimimaan sen hetken ajan riittävällä tavalla. Pysyvä ratkaisu se ei voi olla.
Joskus on vain mentävä sillä mitä on taskussa sillä hetkellä ja otettava seuraavaksi tavoitteeksi uuden, paremman oppiminen.
Toivottavasti et koe että yritän lytätä hyvän pointtisi sillä se ei ole tarkoitus. Olen tietoinen ongelmista ja ymmärrän ettei kieltä tule käyttää julkisissa järjestelmissä. Ja haluan oppia kunnollisen tavan tehdä asiat. Sen takia neuvotkin voi hyvin antaa PDO:na mutta mieluiten niin selkeästi kuin mahdollista, alusta loppuun, sillä kieli on vielä varsin vieras ja tulen keskittymään siihen heti tämän urakan jälkeen koko panostuksella.
Pohdin tuota kansioista luopumista seuraavaan versioon, ehkä jo tähän jos aikaa jää. Isoa muutosta se ei taida koodiin tarkoittaa.
Mutta tuota. Ongelma on edelleen (oli kieli mikä tahansa) että kuvat pitäisi saada
a) lisättyä jo kun eläintä ollaan vasta lisäämässä tietokantaan
b) liitettyä jo "olemassa olevaan" eläimeen
c) ja vieläpä tulostettua, ensin thumbnailina ja sen jälkeen oikean kokoisena (tai näin alkuun edes pienenä versiona)
En oleta kenenkään ratkaisevan näitä puolestani mutta ihan jokainen neuvo ja vinkki on tervetullut ja auttaa tässä paniikissa varmasti. Kielestä riippumatta. Kaikki otetaan kiitollisena vastaan.
Nasu86 kirjoitti:
Mutta tuota. Ongelma on edelleen (oli kieli mikä tahansa) että kuvat pitäisi saada
a) lisättyä jo kun eläintä ollaan vasta lisäämässä tietokantaan
Tämä on siis tuossa koodissa jonka pastesit? Tuleeko siitä joku virheilmoitus?
Nasu86 kirjoitti:
b) liitettyä jo "olemassa olevaan" eläimeen
c) ja vieläpä tulostettua, ensin thumbnailina ja sen jälkeen oikean kokoisena (tai näin alkuun edes pienenä versiona)
b) Mikä on ongelma? Etkö tiedä miten lähteä toteuttamaan, vai etkö saa koodiasi toimimaan?
c) Tämä ei ole sen isompi asia kuin <img>
-tagin tulostus sopivaan paikkaan.
Nasu86 kirjoitti:
Valitettavasti tämä ei ole mahdollinen vaihtoehto, joten nyt on mentävä sillä mitä on opetettu ja jatkettava itsenäistä opiskelua kun tämä on ohi.
Koska järjestelmä ei tule olemaan varsinaisesti käytössä ennen "versio 2.0" ja koska ainoa opetettu kieli on ollut MySQL --
Mysql on tietokantamoottori. Pdo on rajapinta Mysqlin käyttöön. En ymmärrä.
The Alchemist kirjoitti:
Nasu86 kirjoitti:
Valitettavasti tämä ei ole mahdollinen vaihtoehto, joten nyt on mentävä sillä mitä on opetettu ja jatkettava itsenäistä opiskelua kun tämä on ohi.
Koska järjestelmä ei tule olemaan varsinaisesti käytössä ennen "versio 2.0" ja koska ainoa opetettu kieli on ollut MySQL --Mysql on tietokantamoottori. Pdo on rajapinta Mysqlin käyttöön. En ymmärrä.
En ymmärrä mitä et ymmärrä. Pitäisihän tuosta nyt ymmärtää mistä puhutaan, mutta lisäsin varmuuden vuoksi linkin. Vai pitäisikö syyttää PHP:n kehittäjiä siitä että menivät nimeämään apin niinkin omaperäisesti kuin "MySQL"
Grez kirjoitti:
The Alchemist kirjoitti:
Nasu86 kirjoitti:
Valitettavasti tämä ei ole mahdollinen vaihtoehto, joten nyt on mentävä sillä mitä on opetettu ja jatkettava itsenäistä opiskelua kun tämä on ohi.
Koska järjestelmä ei tule olemaan varsinaisesti käytössä ennen "versio 2.0" ja koska ainoa opetettu kieli on ollut MySQL --Mysql on tietokantamoottori. Pdo on rajapinta Mysqlin käyttöön. En ymmärrä.
En ymmärrä mitä et ymmärrä. Pitäisihän tuosta nyt ymmärtää mistä puhutaan, mutta lisäsin varmuuden vuoksi linkin. Vai pitäisikö syyttää PHP:n kehittäjiä siitä että menivät nimeämään apin niinkin omaperäisesti kuin "MySQL"
Jos olisin facebookissa niin voisin painaa tykkää nappia :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.