Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kuvakokoelma sivustolle

Sivun loppuun

mercier [05.07.2011 09:23:29]

#

Suunnittelen sivustolleni kuvakokoelmaa, johon käyttäjät voivat lisätä kuvan ja siihen muutaman (noin 6) metatiedon. Sen jälkeen kuvat julkaistaan listoina, joissa metatiedoista osa (noin 3) toimii lajittelu- tai hakuperusteena. Klikkaamalla listasta avautuu kuva ja kaikki metatiedot tulevat näkyviin. Tällaisia ratkaisuja olen nähnyt muutamia, mutta valmiita koodi- ja koodausvinkkejä ottaisin mielihyvin vastaan, jotta saisi nopsasti alkuun. MySql ja php on käytettävissä + pari settiä innokaan aloittelijan sormia.

Petja [05.07.2011 10:55:04]

#

Lähde vaikka alkuun MySQL ja PHP -oppaalla. Googlea käyttämällä löydät myös muita hyviä koodipaikkoja. Katsopa vaikka esimerkiksi W3Schoolin sivuille.

Itselläni käytössä PHPMyAdmin, jolla pystyn helposti surffailemaan tietokannoissa ja tauluissa. Mikäli sinulla ei sitä vielä ole, ja kiinnostuit katso tänne.

Itse toteutukseen...
1. Luo tietokanta (mikäli vielä ei ole)

CREATE DATABASE database_name

2. Luo tietokannan sisään taulu (mikäli vielä ei ole)
3. Lisää tarvittavat sarakkeet, esimerkkejä: id,kuvanimi,kayttaja,aika,kuvaus,paikka,kamera.

CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)

(koodissa vaiheet 2 ja 3)
4. Katso apukoodeja netistä. Avainsanoja: mysql,order by,limit,php,where
http://google.com/
5. Näytä toteutuksesi meille ja autamme lisää - tarvittaessa!

mercier [05.07.2011 12:14:02]

#

Minulla on MySql jo käytössä ja siinä yksi tietokanta ja phpBB3 keskustelu joka toimii "hienosti". Nuo onnistuin tekemään kun oli aika seikkaperäiset ohjeet. PHPMyAdmin on myös käytössä ja sitä osasin käyttää sen verran, että sain tuon tietokannan aakkostuksen vaihdettua...
Koodauskokemusta ohjelmointikielistä on , mutta tämä vaatii vielä ilmeisen paljon työtä.

-tossu- [05.07.2011 13:37:10]

#

Kuvakokoelman tietokanta ja taulut kannattaa ehdottomasti luoda phpMyAdminilla. Siinä ei pitäisi olla mitään ongelmaa, jos tietää jotain tietokannoista, koska PMA on melko helppokäyttöinen.

mercier kirjoitti:

Koodauskokemusta ohjelmointikielistä on , mutta tämä vaatii vielä ilmeisen paljon työtä.

Sivuston PHP-osuuden koodaaminen ei ole kovin vaikeaa; MySQL hoitaa kaikki vaikeat asiat. Ainoaksi tehtäväksi oikeastaan jää oikeiden parametrien laittaminen SQL-kyselyyn sekä tietojen tulostaminen sivulle. Jos sivulle tulee rekisteröitymismahdollisuus, aiheuttaa se vähän lisää työtä.

mercier [05.07.2011 15:55:36]

#

Minultapa löytyikin SQL Database Wizard; ilmeisesti se tekee elämästä vieläkin hälpompaa. Ainakin tietokanta syntyi. Nyt vaan pitää vielä ymmärtää mitä taulu ja sarakkeet tarkoittavat, ilmeisesti vähän niin kuin Excelin tietueita... Minun phpMyAdmin puhuu kentistä. Mutta homma etenee!

Petja [05.07.2011 17:21:11]

#

Sarakkeet ovat siis vaakasuoraan kulkevia kenttiä, joissa tieto säilytetään. Taulu taas on elementti, missä nämä kentät - eli sarakkeet ovat. Tässä vaiheessa tosiaankin suosittelen kurkkaamaan tuonne Ohjelmointiputkan MySQL ja PHP -oppaaseen, jonka linkin tuossa jo aiemmin annoinkin.

Perusasiat opittuasi, voit siirtyä tutustumaan SQL-injektioon, joka on ollut tälläkin foorumilla viimeaikoina aika kovana aiheena.

mercier [05.07.2011 19:33:59]

#

No jops, tuo kurssi tuli kahlattua ja perusjuttu hoituu. Kuvista luin muualta, täältä en saanut siitä tajunnanvirtaa. BLOB tai hakemisto, kas siinä pulma. Kokeilin BLOBia, mutta sain taulukkoon vain bittipuuroa... Olisiko tässä mitään järkeä: http://www.wellho.net/solutions/php-example-php-form-image-upload-store-in-mysql-database-retreive.html

-tossu- [05.07.2011 20:02:56]

#

Kuvaa ei kannata tallentaa tietokantaan vaan pitää se tavallisena tiedostona.

Lebe80 [05.07.2011 22:19:32]

#

-tossu- kirjoitti:

Kuvaa ei kannata tallentaa tietokantaan vaan pitää se tavallisena tiedostona.

Ja tallentaa kantaan tiedoston nimi ja polku.

jtha [05.07.2011 23:16:52]

#

Petja, liehän nuo sarakkeet pystysuorassa yleensä?

Metabolix [06.07.2011 08:10:29]

#

Lebe80 kirjoitti:

Ja tallentaa kantaan tiedoston nimi ja polku.

Harvoin kylläkään polkua, paitsi siltä osin, kuin tiedostoja on hajautettu eri hakemistoihin. Eli jos kaikki käsiteltävät tiedostot ovat hakemistossa data/upload/kuvat, tätä yhteistä alkuosaa on ihan turha tunkea kantaan, puhumattakaan, että edessä olisi vielä jokin palvelimesta riippuvainen /var/www/omasaitti/public_html.

The Alchemist [06.07.2011 10:41:15]

#

Jos kuvat on hajautettu alihakemistoihin, niin todennäköisesti näillä hakemistoilla on jokin järkevä riippuvuussuhde siihen, miten ne on käyttöliittymän puolella järjestelty. Tällöin polun päättelemiseen riittävät tiedot on väistämättäkin jo tallennettu kantaan esim. ryhmän nimen tai jonkin muun datan muodossa.

Lebe80 [06.07.2011 16:11:11]

#

Kyllä useissa julkaisujärjestelmissäkin tiedostot sijoitetaan eri hakemistoihin, esim. vuosittaista "arkistointia" varten.

mercier [06.07.2011 17:48:14]

#

Edistun japanilaiseen tyyliin - kopioimalla. Tällä koodilla
http://www.w3schools.com/PHP/php_file_upload.asp sain kuvan siirtymään hakemistoon. Se on pieni alku, nyt pitäisi harjoitella siirtämistä niin, että MySql pysyy mukana, vaikka täältä: http://php.about.com/od/phpwithmysql/ss/Upload_file_sql.htm
Netti on niin ihmeellinen, että asiasta lähes tietämätönkin voi tehdä "ihmeitä" - niin tosiaan ihmeitä, joita kauhistelee vielä kauan...

mercier [06.07.2011 21:38:53]

#

Olen jo toosi pitkällä. Tällä koodilla saan tiedot tietokantaan, mutta en kuvaa hakemistoon. Tulee tuo "sori, kuvan..."

<?php

 //Kuvahakemisto
 $target = "images/";
 $target = $target . basename( $_FILES['photo']['n']);

 //Tiedot html-lomakkeelta
 $k=$_POST['k'];
 $h=$_POST['h'];
 $p=$_POST['p'];
 $n=$_POST['n'];
 $o=$_POST['o'];
 $p=$_POST['p'];
 $pic=($_FILES['photo']['n']);

 // Yhteys tietokantaan
 mysql_connect("localhost", "xxx_yyy", "salasana") or die(mysql_error()) ;
 mysql_select_db("aaaa_bbbb") or die(mysql_error()) ;

 //Tiedot tietokantaan
 mysql_query("INSERT INTO `kuvataulu` VALUES ('$k', '$h', '$p', '$n', '$o', '$p', '$pic')") ;

 //Kuva palvelimen hakemistoon TÄMÄ EI TOIMI
 if(move_uploaded_file($_FILES['photo']['tmp_n'], $target))
 {

 //Menikö hyvin...
 echo "Kuva ". basename( $_FILES['uploadedfile']['n']). " on siirretty ja tiedot lisätty";
 }
 else {

 //... no ei mennyt
 echo "Sori, kuvan siirron kanssa oli ongelmia.";
 }
 ?>

ja tässä se html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
  <title>l_k</title>
</head>
<body>
<form enctype="multipart/form-data" action="lisaa.php" method="post"> <br>
K: <input name="k" type="text"><br>
H: <input name="h" type="text"><br>
P: <input name="p" type="text"><br>
N: <input name="n" type="text"><br>
O: <input name="o" type="text"><br>
P: <input name="p" type="text"><br>
Photo: <input name="photo" type="file"><br>
<input value="Add" type="submit"> </form>

</body></html>

Mod. lisäsi kooditagit.

Teuro [06.07.2011 22:42:51]

#

Kyselysi on rikki laita perään echo mysql_error() ja korjaa virhe kyselyyn. Sitten mitä ihmettä seuraavassa tapahtuu mielestäsi? Tulkin pitäisi nostaa tuosta ainakin E_NOTICE tason huomautus, koska yrität käyttää määrittelemätöntä muuttujaa. funktio move_uploaded_file() ei suinkaan muuta taulukon nimeä.

mercier kirjoitti:

<?php
if(move_uploaded_file($_FILES['photo']['tmp_n'], $target)) {
	//Menikö hyvin...
	echo "Kuva ". basename( $_FILES['uploadedfile']['n']). " on siirretty ja tiedot lisätty";
} else {
	//... no ei mennyt
	echo "Sori, kuvan siirron kanssa oli ongelmia.";
}
?>

mercier [06.07.2011 23:07:13]

#

Tuossa koodin osassa (on ainakin tarkoitus) siirretään kuva hakemistoon images/. Ei tule mitään tulkin virheilmoituksia, vain tuo oma virheilmoitus. Aluksi ajattelin, että vika johtuu salasanasuojatusta hakemistosta, mutta ei toimi muuallakaan. MySQL-kantaan tulee tiedot hienosti, mutta kuva ei ilmesty hakemistoon. Kun sen saisikin talteen, niin voisi jatkaa ehtojen lisäämistä.

Metabolix [06.07.2011 23:27:21]

#

'uploadedfile' on ilmiselvästi väärin, kun muualla on 'photo'. Ja mikähän tuo 'n' yrittää olla? Pitäisi varmaan olla 'name'.

PHP-ohjelmoinnin sääntö numero yksi: laita tiedoston alkuun nämä rivit ja korjaa kaikki ongelmat:

<?php
ini_set("display_errors", 1);
ini_set("error_reporting", E_ALL | E_STRICT);

Teuro [07.07.2011 06:24:35]

#

Taisin tosiaan puhua puuta heinää tuon kyselyn kanssa, mutta ei siitä silti oikein tolkkua tahdo saada. Itse tykkään kirjoittaa kyselyn siten, että ensin luetellaan ne kentät, joihin lisätään ja sitten annetaan valituille kentille arvot. Yhden kirjaimen muuttujat ovat potentiaalisia virhelähteitä.

mercier [07.07.2011 12:01:54]

#

Nyt tämä toimii! Kiitos ohjauksesta.


Sivun alkuun

Vastaus

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

Tietoa sivustosta