Moips. Olen tehnyt VJGO Tubea, uutta videopalvelua. Löytyy toistaiseksi osoitteesta http://vjgo.arkku.net/mediaplayer/. Tahtoisin teiltä joitain ideoita tyyleihin ja suunnitteluun. Toistaiseksi pelkästään videopalvelua ei vissiinkään ole mahdollista haxia, joten seitä voitte yrittää. Voisitteko kertoa ideanne sivuston tyyleihin?
Videoita voitte laittaa sähköpostiini ville.juhani.sinisalo@gmail.com. Eikä sitten laiteta mitään pornoa eikä šhokeeraavaa materiaalia!
Kannattais ainaki upload väkertää ettei s-postiin tarttis videoita eriksee lähetellä ;D
Palvelu jota pyörität käsin sähköpostin yli? Jotain rajaa hei...
Tuo ytoim ii myslillä
uploadia en tee ku hakkeroisitte sen
Paratiisin poika jos teet tarpeeksi HYVÄN uploadin ei sitä olekkaan niin ihan helppo hakkeroida. Kukaan ei ala käyttämään tuollaista palvelua ilman rekkaamista ja uppia.
ilmeeni kun OP ei osaa interwebs
Tosin arkku.net ja servut.us palvelu on siltä osin hankala että kaikenlainen tiedostojen uppaus ja kansioiden selaus php:llä on vaikeata. Tuon palvelun siirrän omalle koneelleni kun on uoloadin vuoro.
Osaako joku muuten tehdä wmv päätteisistä videoista mp4 videoita? VJGO:n mainos video ei oikein toimi...
kukaan ei käytä tota palvelua teki sen miten vaan
Marbo totta, juutuubbi o paljon parempi, eikä sitä ihan helposti kaada..
Minä vain yritän tehdä edes 1 projektin niin, että saatan sen päätökseen. Evät kaikkien teidänkään sivut mitään maailmankuuluja ole, mutta silti olette ne tehneet.
Ahaa.. 50mb riittää hyvin videopalvelullesi. :)
Kannattais ny vaa se uppi tehä, oli oma palvelin tai ei
Huoh.
Teen minkälaisen upin vaan, jonka osaan tehdä, te kuitenkin jotenkin haxaatte sen. on sitä ennenki mun kuvaupeilla sählätty tiedostonimillä esim.php.txt
Paratiisin poika: sovellas vaika tuota: https://www.ohjelmointiputka.net/koodivinkit/
edit: Kannattaa ostaa nyt Stocmannilta sellane lehti ku Linux Format, siinä tuli hyvä php-opas mukana (englanniksi ofc)
Hmm... Jos haluatte että teen uplaodin, niin kyllä voin sen tehdä. Tosin... En ole varma toimiiko arkku.net:in palvelimilla uploadin mitenkä. Ja omalta koneelta onnistuin tuhoamaan ftp yhteyden ja tietokaanan käytön. Jotakin sain uploadiini tehtyä. Voisitte kertoa mitä puuttuu, onko turvallisuus riskejä ja kertoa miten taan kunnolla tiedostojen tallennuksen.
<?php $video_paate = array(".mp4", ".flv", ".avi", ".mpeg", ".ogg"); if(!isset($_GET['action'])) { $action=intval($_GET['action']); if($action = 'upload') { $tarkastus = $_GET['tarkastus']; if(empty($tarkastus)) { $video = $_GET['video']; $name = $_GET['name']; $description = $_GET['description']; }else { echo "Olet todennäköisesti botti! Pääsy estetty!"; } } }else { echo "<form action='upload.php' method='post' enctype='multipart/form-data'>"; echo "Video: <input type='file' name='file' /> "; echo "<input type='text' name='tarkistus' style='display:hidden;'>"; echo "<input type='submit' name='submit' value='Submit' />"; echo "</form>"; }
Niin voisiko joku auttaa tuon uploadin tekemisessä? Kun kerran uploadia vaaditaan, niin voin sen tehdä. Mutta voitteko auttaa hieman?
Paratiisin poika: iekös nyt kannattais vaan soveltaa..?
Pyydän apua, koska en itse osaa tehdä tietoturvaa uploadiin.
Teknkik kirjoitti:
Ahaa.. 50mb riittää hyvin videopalvelullesi. :)
Kannattais ny vaa se uppi tehä, oli oma palvelin tai ei
Mitä merkitystä tällä on, kun tuo sivu on lähinnä testiversio k.o. softaan?
Paratiisin poika kirjoitti:
Pyydän apua, koska en itse osaa tehdä tietoturvaa uploadiin.
Jos haluat että myös video.php.mp4 tms estetään, niin pistä
<?php $tiedosto = 'video.mp4'; $sallitut = array('mp4','flv','avi','mpeg','ogg'); $jako = explode('.',$tiedosto,2); if(in_array($jako[1],$sallitut)) { echo "tiedosto kelpaa"; # tähän mielellään mime-tyypin tarkistus ymsyms } else { echo "tiedosto ei kelpaa"; }
Tuo siis jakaa tiedostonimen ensimmäisen pisteen kohdalta ja tarkistaa kuuluuko loppuosa, joka on muotoa "video.mp4" => "mp4", "video.php.mp4" => "php.mp4", sallittuihin päätteisiin. Esimerkki: http://jjp.servut.us/videotarkistus.php?tiedosto=video.avi
Näyttäisi toimivan. Estää myös asp tiedostot ja .htaccess tiedostot. :) Kiitos.
Puoli vuotta sitten laitoin merkille, että Archin Apache (oletusasetuksilla) syötti esimerkiksi .php.txt päätteiset tiedostot php-tulkin läpi. Paha
Jouluserverillä sama; panin merkille väsätessäni ylläpitäjien tahoilta suoritettua haksausta estävää systeemiä uploadiin.
http://vjgo.arkku.net/mediaplayer/upload.php
Kesken mutta voisiko joku testata tuota? itsellä ei ole yhtään videoita koneella.
"Request Entity Too Large
The requested resource
/mediaplayer/upload.php
does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit."
Yritin uppia tuota kymmenminuuttista 720p-Fukkiretaa, 161M näköjään.
Miks toi muuten näyttää "tiedosto ei kelpaa" heti ku meen sivulle?
En jaksa poistaa sitä. Yritä uppia joku vähän lyhyempi video. Heti kun vain saan tuon XP:n toimimaan, laitan tuon Tube palvelun sinne. Siellä voin sitten sallai isommatkin videot. Mutta testaa nyt jollain pienemmällä videolla. Tämä kone lagaa niin paljon, etten jaksa edes ftp:n sivuille mennä korjaamaan tuota.
Vähän niinkuin
"emmäää ny jaks tee sää se mul nii saan sen heti"
Sanoisin vaikka asenneviaksi.
Noh, koitin tuota lyhyempää versiosta samasta, selain lähetti tiedoston perille ja sivus vastas informatiivisesti "tiedosto ei kelpaa".
Ja tiedoston nimessähän ei saa olla kuin yksi '.' merkki, jotta tuo toimisi. Tämä siis jos tuo on yksi yhteen yllä olevan raakalihan antaman ohjeen mukainen. 'tiedosto ei kelpaa' messu tulee saman koodin takia, jos $tiedosto muuttujaa ei ole olemassa tai se ei kuulu tuohon sallittuihin päätteisiin.
Tiedoston nimi oli tosiaan fukkireta1x.mp4
Miksikäs muuten Matroskaa ei sallita? Se on oikein hyvä kontaineri.
"Olet todennäköisesti botti! Pääsy estetty!"
mitä hittoa?!
Miksei tossa voi vaan lukea, että se tarkistuskenttä pitää täyttää. Tuskin botteja kiinnostaa lukea tommosta tekstiä. Eli eiköhän useimmissa tapauksissa tekstin lukenut ole ihan oikea henkilö.
Lebe80 kirjoitti:
"Olet todennäköisesti botti! Pääsy estetty!"
mitä hittoa?!
Miksei tossa voi vaan lukea, että se tarkistuskenttä pitää täyttää. Tuskin botteja kiinnostaa lukea tommosta tekstiä. Eli eiköhän useimmissa tapauksissa tekstin lukenut ole ihan oikea henkilö.
Ei vi**u repesin xD
Öööh tota. Se on vain öö... hmm... Tuon tekstin ei pitöisi olla sivulla. En tajua yhtään. Poistin sen. Odottakaas hetkonen. Tarkistan asian.
EDIT: Ei siellä sellaista teksitä ole.
<?php $video = $_GET['video']; $name = $_GET['name']; $description = $_GET['description']; $sallitut = array('mp4','flv','avi','mpeg','ogg'); $jako = explode('.',$video,2); if(in_array($jako[1],$sallitut)) { echo "tiedosto kelpaa"; } else { echo "tiedosto ei kelpaa"; } ?> <form action='upload.php' method='post' enctype='multipart/form-data'> Video: <input type='file' name='file' /> <br> Nimi: <input type="text" name="name"><br> Selite: <textarea name='description'></textarea><br> <input type='submit' name='submit' value='Lataa' /> </form>
Mitäpä jos lukisit koodisi läpi. Et esimerkiksi missään vaiheessa tarkista onko Lataa-nappia edes painettu, vaan suoritat koodin kokonaisuudessaan jokaisella sivunlatauksella jolloin sivu tulostaa aina "tiedosto ei kelpaa".
Ja lisäksi tuollaisenaan koodisi ei edes vastaanota tiedostoja. Lähetät lomakkeelta kentät post-muodossa ja vastaanotat get-muodossa. File-tyyppisen kentän sisältö löytyy muuttujista $_FILES['file']['name'] ja $_FILES['file']['tmp_name'].
Kannattais ensin opetella vähän enemmän PHP:tä ennen kuin alkaa tämmöstä väkertämään. :d
Hmm... Tiedän ettei se tarkista onko nappia painettu. on niin huono kone, etten ole jaksanut tehdä tällä. Sen lisäksi tiedän myös, ettei tuo vastaanota tiedostoja. Syy tähän on sama kuin edelliseen. Nyt tämä kuitenkin taitaa vähän toimia, joten teen tuonne sen muutoksen.
Vai olisikohan syynä laiska ihminen, joka syyttää konetta kun jokin ei onnistu?
Paratiisin poika kirjoitti:
Sen lisäksi tiedän myös, ettei tuo vastaanota tiedostoja.
Miksi ihmeessä sitten pyysit muiden lähettää tiedostoja testinä? Käytännössä edelliset lähettelyt olivat aivan turhia ja veivät vain hetkellisesti kaistaa. Jos sinulla ei ole videotiedostoja koneellasi niin poista tuo tarkistus tuosta (tai nimeä jokin muu tiedosto siten, että sen pääte on sallituissa päätteissä), niiden lähetys hoituu täsmälleen samalla tavalla kuin videotiedostojen. Siten voit testata tuota ihan itsenäisesti ja antaa muiden testata vasta sitten, kun se edes käsittelee lähetetyt tiedostot.
<?php if (isset($_POST['submit'])) { $video = $_GET['video']; $name = $_GET['name']; $description = $_GET['description']; $sallitut = array('mp4','flv','avi','mpeg','ogg','au'); $jako = explode('.',$video,2); if(in_array($jako[1],$sallitut)) { echo "tiedosto kelpaa"; } else { echo "tiedosto ei kelpaa"; } }else { ?> <form action="upload.php" method="post" enctype="multipart/form-data"> Video: <input type="file" name="video" /> <br> <!--Nimi: <input type="text" name="name"><br>--> <!--Selite: <textarea name='description'></textarea><br>--> <input type="submit" name="submit" value="Lataa" /> </form> <?php } ?>
Ei toimi... Sanoo aina ettei tiedosto keltaa. jopa tuolle au filulle. Mikä vikana?
Vika löytyy skriptin viideltä ensimmäiseltä riviltä, ja syykin on mainittu jo edellä. Miksi olet kommentoinut HTML-lomakkeesta kentät nimi ja selite pois? Tosin tiedoston nimen saat $_FILES
-taulukon kautta myös.
Olisikohan aika tututusta PHP-oppaaseen?
Voiko joku auttaa? En saa tuota toimimaan millään. Sitäpaitsi onnistuin jo testaamaan toista koodia. Menee ihan perseelleen.
Paratiisin poika kirjoitti:
Ei toimi... Sanoo aina ettei tiedosto keltaa. jopa tuolle au filulle. Mikä vikana?
Mika9 kirjoitti:
File-tyyppisen kentän sisältö löytyy muuttujista $_FILES['file']['name']
Aloita vaikkapa korjaamalla jo edellä pariin otteeseen neuvottu:
$video = $_FILES['video']['name'];
Lisäksi mieti mitä eroa on muutujilla $_POST, $_GET ja miten niihin liittyy form-tagin atribuutti method="post".
Hmm... Sain sen toimimaan. Jibbijaijee!
voitte testata sitä nyt...
http://vjgo.arkku.net/mediaplayer/upload.php
Toimiikos se?
Paratiisin poika kirjoitti:
Toimiikos se?
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/upload.php:27 Stack trace: #0 /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/upload.php(27): PDOStatement->execute(Array) #1 {main} thrown in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/upload.php on line 27
Yllättävää kyllä, ei toimi, itsekin voisit ehkä testata? Virhe tuli siitä, että annoin liian ison ID:n. Miksi käyttäjän pitää edes ylipäätään syöttää ID? Oletan ettet ole tehnyt ID:n päällekkäisyystarkistusta? ID:n voi laittaa lisättyjen entryjen mukaan automaattisesti kasvavaksi.
Testasin joo. huomasin että unohdin id:n. Nyt toimii. ID pitää määritellä itse. Auttaisiko joku minua tekeen jonku random funktion jolla sit noi id:t ei menisi päällekkäin...
Miten teen sen id:n automaattisesti entyyttesisties nousevaksi?
Laita kenttä AUTO_INCREMENTiksi.
Putkan myslioppaasta löytyy maaginen AUTO_INCREMENT
https://www.ohjelmointiputka.net/oppaat/opas.
Hmm... Noin. Tehty. Voisiko joku nyt lähettää jonkun lyhytnimisen ja lyhyen videon?
Mukava olisi myös, jos videot oikeasti näkyisivät...
Joo joo. Ymmärsin. Lopettakaa! olen korjaamassa tuota aukkoa!
Tossahan on toi Muokkaa-linkki, mikset käyttäisi sitä?
Koska oma koneeni lagaa (teidän takianne), joudun käyttämään isäni konetta. En ajatellut kirjautua sisään.
Miten koneesi muka lagaa meidän toimesta? Nojoo onko tuo upload vielä samanlainen kuin yllä oleva? Kannattaa tarkastaa todellakin viimeisen pisteen jälkeinen tiedostopääte, koska video.avi.php menee tuon seulan läpi aivan puhtaasti, koska jaat tuon merkkijono kahteen osaan ensimmäisen pisteen kohdalta. PHP ja varsinkaan sen kehittyneemmät ominaisuudet eivät ole vielä sinulle sopivia, mutta alkeiden ja oppaiden parissa vietetty aika ei mene varmaankaan hukkaan.
Ei tuolla mitään php filuja näy. Sitäpaitsi, miten minä nyt poistan nuo teidän typerät videonne tuolta? Ei anna poistaa niitä.
Paratiisin poika kirjoitti:
Ei tuolla mitään php filuja näy.
Niin, kun me ollaan oltu niin kilttejä, että ollaan uppailtu vaan oikeita videoita--tähän mennessä.
Paratiisin poika kirjoitti:
Sitäpaitsi, miten minä nyt poistan nuo teidän typerät videonne tuolta? Ei anna poistaa niitä.
Ai, sinnekö meni jotain? Etusivulla ei kyllä näy kuin Otto-koira. No, kristallipallo sanoo: koska se oli PHP, joka loi ne tiedostot, niitten omistajaks tuli se käyttäjä, joka ajaa Apachea tuolla serverillä ja tämä käyttäjä ei oo sama ku mitä käytät FTP-selailuun. Joudut siis luomaan PHP-skriptin, jonka suoritat veppiserveriä ajavana käyttäjänä, joka joko antaa tiedostoille paremmat oikeudet, tai suoraan poistaa ne.
Siitä toisesta osastahan muodostuu avi.php, jota ei kyllä hyväksyttyjen päätteiden taulukosta löydy. Anyhoo, pathinfo on kaveri.
Auttaisitteko siinä tapauksessa minua estämään html tiedostot? Huomaan kyllä että ette enään ole yhtä ilkeitä. ennen oli goattse, nykyään piparkakku goatse. :) Kiitos tästä.
Tarkennuksena, tuo tiedostonimen tarkistus jakaa nimen kahteen osaan ensimmäisen pisteen kohdalta ja tarkistaa kuuluuko jälkimmäinen osa taulukkoon, mistä saadaan tulokseksi:
video.avi => avi => hyväksytään
video.avi.php => avi.php => ei hyväksytä
avi.php => php => ei hyväksytä
video.php.avi => php.avi = ei hyväksytä (syystä että joillakin palvelimilla on tapana ajeluttaa *.php.* PHP-tulkin lävitse ja miten tämän voisi tsekata PHP:llä en tiedä)
raakaliha kirjoitti:
Tarkennuksena, tuo tiedostonimen tarkistus jakaa nimen kahteen osaan ensimmäisen pisteen kohdalta ja tarkistaa kuuluuko jälkimmäinen osa taulukkoon, mistä saadaan tulokseksi:
video.avi => avi => hyväksytään
video.avi.php => avi.php => ei hyväksytä
avi.php => php => ei hyväksytä
video.php.avi => php.avi = ei hyväksytä (syystä että joillakin palvelimilla on tapana ajeluttaa *.php.* PHP-tulkin lävitse ja miten tämän voisi tsekata PHP:llä en tiedä)
Helpointa ois varmaa tarkistaa viiminen pääte vaikka pathinfo:lla ja laittaa nimeks md5 hashi alkuperäisestä tiedostonimestä esimerkiksi.
Tuutti: Eiköhän helpointa ole tarkistaa kaikki "päätteet". Jos joukossa on yksikin esim. php, niin tiedostoa ei tueta.
Millä tavalla sellanen järjestely (plus erikseen videotarkistus) olisi sitten parempi kuin kaikkien ensimmäisen pisteen jälkeen tarkistus kerralla? Meinaatko että esim "video.abc.avi" menisi läpi sit?
raakaliha kirjoitti:
joillakin palvelimilla on tapana ajeluttaa *.php.*
Kuulostaa kyllä aika oudolta ja virheelliseltä. Pystytkö osoittamaan jonkin tällaisen palvelimen?
raakaliha kirjoitti:
Meinaatko että esim "video.abc.avi" menisi läpi sit?
Tietenkin sen pitää mennä läpi. Esimerkki: Pertsa haluaa lähettää videon siitä, miten koodataan PHP:llä vieraskirja. Pertsa kuvaa itsensä naputtelemassa tiedostoa vieraskirja.php ja tallentaa videon nimellä vieraskirja.php.avi. Nimi on looginen ja tiedosto kelvollinen, joten onko oikein hylätä se vain siksi, ettei osaa koodata kunnollista tarkistusta?
Tiedoston viimeisen päätteen tarkistamisen pitäisi riittää aivan hyvin. Toisaalta kaikkein järkevintä olisi unohtaa koko tiedostonimi ja tarkistaa vain sisällön perusteella, että tiedosto on haluttua muotoa, ja tallentaa tiedosto täysin uudella nimellä (1.avi, 2.avi jne.). Käyttäjän kertomat tiedot voi sitten tallentaa vaikka tietokantaan, ja rivin id-numerosta saadaan tiedostolle nimi. Tällä tavalla vältytään myös törmäyksiltä tiedostonimissä.
Minä en tarkistaisi tiedoston päätettä ollenkaan, vaan varmistaisin, että se todella on video. Lisäksi PHP kannattaa varmuuden vuoksi ottaa pois käytöstä upload-hakemistossa.
Meinaatko muuten pitäää videot sellaisinaan, vai transkoodata kaikki videot samaan muotoon? Jos transkoodaat videot ei mitään tarkistuksia sisällön suhteen välttämättä tarvita; dekooderi kyllä valitttaa mikäli sille koittaa antaa jotakin muuta kuin videota.
Jouluserver ainakin ajellutti tiedosto.php.txt tiedostot läpi. Tätä keinoa on käytetty mm. minun palvelimeni tiedostojen ja tietokannan tuhoamiseen. Itse olen testannut ja todennut että php tulkin läpi menee myös esimerkiksi tiedosto.php.png... Ainakin jouluserverillä.
Hmm... Mikä olisi järkevin tapa uploadiin nyt. Kun video on uploadettu, ja pitäisi saada sinne linkki siihen videoon... Nyt näyttää tältä:
<?php include('toppart.php'); $pagename = "Upload"; include('head.php'); $tila = "suljettu"; if($tila=="avoinna") { if (isset($_POST['submit'])) { $video = $_FILES['video']['name']; $sallitut = array('mp4','flv','avi','mpeg','ogg','au'); $jako = explode('.',$video,2); if(in_array($jako[1],$sallitut)) { if (file_exists("videos/" . $_FILES["video"]["name"])) { echo $_FILES["video"]["name"] . " on jo olemassa. "; } else { $kysely = $yhteys->prepare("INSERT INTO videos (video, image, name, description, adder) VALUES (?, ?, ?, ?, ?)"); $kysely->execute(array($video, $_POST["image"], $_POST["name"], $_POST["description"], $_POST["adder"])); move_uploaded_file($_FILES["video"]["tmp_name"], "videos/" . $_FILES["video"]["name"]); echo "Linkki: Vittu minä mitään linkkiä tähän saa!"; #Tähän pitäisi saada linkki niin että se on tyyliä index.php?id=$id } } else { echo "Tiedosto ei kelpaa!"; } }else { ?> Sallitut tiedostomuodot: <tt><b>mp4, flv, avi, mpeg, ogg, au</b></tt> <form action="upload.php" method="post" enctype="multipart/form-data"> <table border=0> <tr> <td>Video: </td><td> <input type="file" name="video" /></td> </tr> <tr> <td>Laita Koira.PNG: </td><td> <input type="text" name="image" /></td> </tr> <tr> <td>Videon nimi: </td><td> <input type="text" name="name" /></td> </tr> <tr> <td>Selite: </td><td> <input type="text" name="description" /></td> </tr> <tr> <td>Nimesi: </td><td> <input type="text" name="adder" /></td> </tr> </table> <input type="submit" name="submit" value="Lataa" /> </form> <?php include('bottompart.php'); } }else { echo "Upload suljettu tilapäisesti! Aukeaa joskus!"; include('bottompart.php'); } ?>
En jaksa värkätä sitä millään miljoonarivisellä koodilla tietokannasta. mikä olisi viisain ratkaisu tähän?
Ps. Tuo ei päästä läpi ainakaan seuraavia tiedostoja:
tiedosto.avi.php
tiedosto.php.avi
Mutta en tajua että miksei tuo näytä minun koneellani kuin tuon mp4 videon... Tuon Otto koira.
Paratiisin poika kirjoitti:
pitäisi saada sinne linkki siihen videoon... En jaksa värkätä sitä millään miljoonarivisellä koodilla tietokannasta. mikä olisi viisain ratkaisu tähän?
Avainfunktio ongelmaasi on mysql_insert_id(), joka palauttaa auto incrementillä luodun ID:n.
Ja vinkkinä: koodista tulee selkeämpää kun yhdistelet ehtolausekkeita, etkä pesi niitä sisäkkäin.
Kiitos. Osaatko muuten kertoa että minkä takia tuo minun koodini ei lataa noita videoita tuonne videos kansioon?
Edit: Tuo että nuo jutut olisivat samalla rivillä ei oikein ole hyvä juttu. En edes enään löydä että mikä "}" merkki pitäisi tuolta poistaa jos nuin tekisin.
Huomaa myös, että kun kerran on tiedosto lähetetty, ei formin kuulu näkyä. Jos taas on suljettuna, pitää näkyä vain toppart.php, head.php, teksti "suljettu jne..." ja bottompart.php. Vissiin myös muuttuja $pagename...
Ei tuo id juttu toimi. Listaan tähän nyt foorumini tiedostot:
Kansiot
videos (tänne tallenutt videot)
images (tänne tallentuu kuvat)
Videosoitin
Longtail Video (Tiedostot softan mukaan)
Tiedostot
upload.php
<?php include('toppart.php'); $pagename = "Upload"; include('head.php'); $tila = "avoinna"; if($tila=="avoinna") { if (isset($_POST['submit'])) { $video = $_FILES['video']['name']; $sallitut = array('mp4','flv','avi','mpeg','ogg','au'); $jako = explode('.',$video,2); if(in_array($jako[1],$sallitut)) { if (file_exists("videos/" . $_FILES["video"]["name"])) { echo $_FILES["video"]["name"] . " on jo olemassa. "; } else { $kysely = $yhteys->prepare("INSERT INTO videos (video, image, name, description, adder) VALUES (?, ?, ?, ?, ?)"); $kysely->execute(array($video, $_POST["image"], $_POST["name"], $_POST["description"], $_POST["adder"])); $id = mysql_insert_id(); move_uploaded_file($_FILES["file"]["tmp_name"], "videos/" . $_FILES["file"]["name"]); echo "Video: <a href='index.php?id=$id'>" . $_POST["name"] . "</a>"; } } else { echo "Tiedosto ei kelpaa!"; } }else { ?> Sallitut tiedostomuodot: <tt><b>mp4, flv, avi, mpeg, ogg, au</b></tt> <form action="upload.php" method="post" enctype="multipart/form-data"> <table border=0> <tr> <td>Video: </td><td> <input type="file" name="video" /></td> </tr> <tr> <td>Laita Koira.PNG: </td><td> <input type="text" name="image" /></td> </tr> <tr> <td>Videon nimi: </td><td> <input type="text" name="name" /></td> </tr> <tr> <td>Selite: </td><td> <input type="text" name="description" /></td> </tr> <tr> <td>Nimesi: </td><td> <input type="text" name="adder" /></td> </tr> </table> <input type="submit" name="submit" value="Lataa" /> </form> <?php include('bottompart.php'); } }else { echo "Upload suljettu tilapäisesti! Aukeaa joskus!"; include('bottompart.php'); } ?>
toppart.php
<?php include('settings.php'); try { $yhteys = new PDO("mysql:host=$dbhost;dbname=$dbname", "$dbuser", "$dbpassword"); } catch (PDOException $e) { die("VIRHE: " . $e->getMessage()); } $yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); ?>
head.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <?php echo " <title>$pagename</title>"; ?> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <?php echo "<table border=0 width='100%'>\n"; echo "<tr>\n<td id='logo'><acronym title='Etusivulle'><a href='index.php'><img src='Logo.png'></a></acronym>\n"; echo "</td>\n"; echo "<td id='search'><form method='get' action='search.php'>\n"; echo "<input id='search' type='text' name='query'><input id='search_button' type='submit' value='Hae'>\n"; echo "</form>\n"; echo "<a href='upload.php'>Lataa video!</a></td>\n"; echo "</tr>\n"; echo "<tr id='hr'>\n"; echo "<td colspan='3' id='hr'> </td>\n"; echo "</tr>\n</table>"; ?>
index.php
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.jwplayer.js"></script> <body style="background-color:white;"> <?php if(!isset($_GET['id'])) { include('toppart.php'); $pagename = "Etusivu - VJGO Tube"; include('head.php'); $kysely = $yhteys->prepare("SELECT * FROM videos"); $kysely->execute(); echo "<h3>Lista " . $sitename . "ssa tällä hetkellä olevista videoista</h3>"; echo "<ul>"; while ($rivi = $kysely->fetch()) { $name = $rivi['name']; $id = $rivi['id']; $name = str_replace("<", "<", $name); $name = str_replace(">", ">", $name); echo "<li><a href='index.php?id=$id'>$name</a></li>\n"; } echo "</ul>"; include('bottompart.php'); }else { $id=intval($_GET['id']); include('toppart.php'); $kysely = $yhteys->prepare("SELECT * FROM videos WHERE id = $id"); $kysely->execute(); while ($rivi = $kysely->fetch()) { $video = $rivi['video']; $image = $rivi['image']; $name = $rivi['name']; $info = $rivi['description']; $adder = $rivi['adder']; $time = $rivi['time']; $name = str_replace("<", "<", $name); $name = str_replace(">", ">", $name); $info = str_replace("<", "<", $info); $info = str_replace(">", ">", $info); $adder = str_replace("<", "<", $adder); $adder = str_replace(">", ">", $adder); $pagename = "Video: $name - VJGO Tube"; include('head.php'); echo "<table border=0><tr>\n<td>\n<h1>" . $name . "</h1>\n</td>\n</tr>\n<tr>\n<td id='video'>\n<video height='400' id='player' poster='images/" . $image . "' src='videos/" . $video . "' width='400'>\n</td>\n<td id='empty'>\n<img src='empty.PNG' />\n</td>\n<td id='information'>\n<table>\n<tr>\n<td id='info'>\n<h3>" . $name . "</h3>\n</td>\n</tr>\n<tr>\n<td id='info'>\nLisääjä: <b>" . $adder . "</b>\n</td>\n</tr>\n<tr>\n<td id='info'>\nAika: " . $time . "\n</td>\n</tr>\n<tr>\n<td>\n<hr>\n</td>\n</tr>\n<tr>\n<td id='info'>\n" . $info . "\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>"; include('bottompart.php'); } } ?> <script type="text/javascript"> $('#player').jwplayer({ flashplayer:'player.swf', skin:'five/five.xml' }); </script> </body>
settings.php (kaikki ettimään salasanaa. Sen te kuitenkin haluatte...)
<?php $dbhost = "localhost"; $dbname = "2989_vjgo"; $dbuser = "2989_vjgo"; $dbpassword = "Arkkunetpalvelinrulettaa18462"; $sitename = "VJGO Tube"; $copyrighttext = "Copyright © <a href='vjgo.arkku.net/'>Ville-Juhani sinisalo</a> 2010"; ?>
bottompart.php
<br><br><br> <div id="bottom"> <?php echo "<small>" . $copyrighttext . "</small>"; ?> </div> </body> </html>
css tiedoston voitte katsoa ihan palvelimelta. se on style.css
Jos teillä on parannusideoita koodiin, kertokaa. Otan mielelläni apua vastaan.
Paratiisin poika kirjoitti:
Ei tuo id juttu toimi.
Onhan id sarake määritelty AUTO_INCREMENT:ksi sekä PRIMARY KEY:ksi.
Paratiisin poika kirjoitti:
Jos teillä on parannusideoita koodiin, kertokaa. Otan mielelläni apua vastaan.
Koodia voisit sisentää paremmin, että sitä olisi helpompi lukea.
Eihän tuo "SELECT * FROM videos WHERE id = $id" palauta ikinä kuin yhden rivin, joten miksi käsittelet sen silmukassa?
Nuo n+1 str_replace:a voit korvata htmlentities-funktiolla.
Bottompart.php -tiedostossa on jo </html> -tagi, älä laita sitä uudelleen index.php -tiedostoon.
Okei. kiitos. Mutta teen tässä tuota search.php tiedostoa. En saa sitä kuitenkaan toimimaan.
<?php include("toppart.php"); $pagename = "Haku"; include("head.php"); echo "<h2>Haku</h2>\n"; echo "<form method='post' action='search.php'><input type='text' name='query'><input type='submit' value='Hae'><br></form>\n"; if(isset($_GET['query'])) { $query = '$_GET["query"]'; if($query == '') { include("bottompart.php"); exit(); } echo "<h3>Videot</h3>\n"; echo "<ul>\n"; $kysely = $yhteys->prepare("SELECT * FROM videos WHERE name = '$query' LIMIT 25"); $kysely->execute(); while ($rivi = $kysely->fetch()) { $id = mysql_result($kysely,'id'); $name = clean(mysql_result($kysely,'name')); echo "<li><a href='index.php?id=" . $rivi["id"] . "'>" . $rivi["name"] . "</a></li>\n"; } echo "</ul>\n"; include('bottompart.php'); }else { echo "<p>Ei hakutuloksia</p>"; include('bottompart.php'); } ?>
Uskon että tässä on vaan joku tyhmä virhe jota en huomannut...
$query = '$_GET["query"]';
Mietipä uudelleen. Jälleen kerran virhe olisi löytynyt yksinkertaisesti tulostamalla sivulle tai tiedostoon muuttujien arvoja eri vaiheissa.
Toinen virhe on tuossa kyselyn muodostamisessa ja käytössä. PDO:n ideana nimenomaan on, että muuttujaa $query ei sijoiteta suoraan kyselyn sekaan vaan se annetaan parametrina execute-metodille. Myös tietojen haku tulosriviltä on aivan pielessä, yrität jotenkin oudosti sekoittaa PDO:ta ja vanhoja MySQL-funktioita. Katso oppaasta mallia näissäkin asioissa.
Edit: Ja laita koodin alkuun ne pari ini_set-riviä (display_errors ja error_reporting, haulla löytyy), jotta saat PHP:ltä lisää virheilmoituksia!
En tajunnu. Koitan ymmärtää ja korjata kaiken...
Edit: Miksei tuo upload toimi? Se ei tallenna noita videoita...
<?php $query = '$_GET["query"]';
Katso väritystä, mitä muuttujan $query arvoksi nyt tulee? Vihje: rivistä pitää poistaa jotakin. Lisäksi formissa on väärä method. Metabolix ehtikin jo sanoa, että käytät PDO:ta väärin, uploadissa parametrien välitys on tehty niin kuin kuuluu, ota siitä mallia.
Paratiisin poika kirjoitti:
$kysely = $yhteys->prepare("INSERT INTO videos (video, image, name, description, adder) VALUES (?, ?, ?, ?, ?)"); $kysely->execute(array($video, $_POST["image"], $_POST["name"], $_POST["description"], $_POST["adder"])); $id = mysql_insert_id(); move_uploaded_file($_FILES["file"]["tmp_name"], "videos/" . $_FILES["file"]["name"]); echo "Video: <a href='index.php?id=$id'>" . $_POST["name"] . "</a>";
Kannattaa tarkastaa, että tiedosto menee perille enneku kirjottaa kantaan mitään.
Metabolix kirjoitti:
raakaliha kirjoitti:
joillakin palvelimilla on tapana ajeluttaa *.php.*
Kuulostaa kyllä aika oudolta ja virheelliseltä. Pystytkö osoittamaan jonkin tällaisen palvelimen?
Jouluserverille koitin kerran ladata varmaankin putkasta kopioidulla upload-formilla tiedoston juttu15.php.jpg, jonka sisältö oli paintilla tekemäni jpeg-kuva, johon olin Notepad++:lla liittänyt jonnekin päin "sotkua" pätkän <?php ... ?>. Tiedosto ajettiin PHP:nä. Tuon voi toivottavasti jättää useimmilla palvelimilla huomiotta ja käyttää täällä aiemmin mainittuja tarkistuksia.
Jälkimmäistä ehdotustasi (1.avi, 2.avi) sen sijaan suosittelisin käytettäväksi Paratiisipojalle.
Tarvittaessa kaikki päätteet voi tarkistaa tällä koodilla:
Suosittelen lisäämään tiedostojen nimiin MySQL:n generoiman ID-numeron. Tällöin ei tarvitse tarkistaa onko saman niminen tiedosto jo olemassa, kun kaikilla tiedostoilla on varmasti uniikki nimi tyyliin 3_mun-video.mkv
... move_uploaded_file($_FILES['file']['tmp_name'], 'videos/' . $id . '_' . $_FILES['file']['name']); ...
Hakuun täsmällisen WHERE A = A, haun tilalle sopii paremmin MySQL:n LIKE
Niin. Olen määrittänyt tietokantaan nyt id:n sellaiseksi kuin sanoitte. Tästä huolimatta ei tuo "$id = mysql_insert_id();" juttu toimi.
Jos käytät PDO:ta niin käytä PDO:n vastinetta.
En saa tuota toimimaan. Laittaisitko tuon rivin mulle?
...nyt hei kaverit oikeesti...
Mitä? En saanut sitä toimimaan. Laittaa vain erroria. Sitäpaitsi tuo uploadikaan ei oikein toimi.
Et saanut sitä toimimaan, eli et osaa vielä ohjelmoida tarpeeksi tuollaiseen hommaan, eli sinun pitäisi ensin opetella perusasiat (funktioiden kutsuminen, olioiden käyttö ym.) kunnolla jostain oppaasta ja käyttää vähän omaakin järkeä. Ei todellakaan pitäisi olla vaikeaa kirjoittaa yhtä vaivaista metodikutsua, joka ei edes vaadi parametreja.
hmm... Siis... Mikä hitto tuossa uploadissa ensinnäkin kusee? Se ei laita noita tiedostoja videos kansioon, vaikka koodi on kop... lainattu w3scools.com php upload esimerkistä.
Lisäilen sinne muuten videoita...
Mitä jos laittaisit ne virheilmoitukset päälle (kuten jo aiemmin sanoin), niin koodi ehkä itse kertoo, mikä mättää.
Tuolla sivun alaosassa näkyy etusivul mul ainaki numero 11. se tuli ku laitoin ne päälle.
Tossa on nyt toppart.php yläosan koodi
Miten voit olla noin toivoton kaheli? Onko tosiaan liian vaikeaa kirjoittaa pari valmiiksi kerrottua sanaa hakuun ja kaivaa sieltä jokin niistä lukuisista viesteistä, joissa kerrotaan suoraan, miten ne virheet saa esiin? Kerrotaan nyt vielä kerran:
Kerrankin on lupa kopioida koodia suoraan – nauti tilaisuudestasi!
Hmm... Kokeilin sitä ekaa hakua vaan. Se vei php.net:in sivuille... Sori et oon tällainen tohelo ja erittäin huonomuistinen. ainakin lähimuistin kannalta...
Nyt näkyy virheet. Yritän korjata noiden avulla. Kiits.
Lisättäköön vielä että hänen pahimmat tohelointinsa johtunevat minun mesessä antamistani neuvoista. :)
Hihi... nyt paljastui että mistä saan paljon apua... :P
Joku taisi mainita jotain siitä, että suoritan kaikki sql kyselyt tulostuksessa silmukassa. Syy on siinä, etten osaa muuten. Nyt on kuitenkin ongelmia mulla.
Teen kategoria sivua. Otsikko pitäisi saada tyyliin Kategoria: {kategorian nimi}. Otsikko kuitenkin määritellään muuttujaan $pagename, ja sen jälkeen includetetaan head.php. Mikä avuksi? Kaikki on mulle nyt sekavaa tässä.
<?php include('toppart.php'); if(!isset($_GET['c'])) { $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}category"); $kysely->execute(); $pagename = "Kategoriat"; include('head.php'); echo "<h1>kategoriat</h1>\n<ul>"; while ($rivi = $kysely->fetch()) { $name = $rivi['name']; $id = $rivi['id']; echo "<li><a href='category?c=$id'>$name</a></li>\n"; } echo "</ul>"; }else { $c=(isset($_GET["c"])); $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}category WHERE id='$c'"); $kysely->execute(); $pagename = "Kategoria: $c"; include('head.php'); echo "<small><a href='category.php'>Kaikki kategoriat</a></small>\n"; while ($rivi = $kysely->fetch()) { $name = $rivi['name']; $description = $rivi['description']; echo "<h1>$name</h1>\n$description<br>\n<h3>videot</h3>\n<p>Linkit</p>"; } include('bottompart.php'); } ?>
Ps. Laitoin surkeasti asennellun linkkivalikon. Parempia ideita tuohon kellään?
Paratiisin poika kirjoitti:
Joku taisi mainita jotain siitä, että suoritan kaikki sql kyselyt tulostuksessa silmukassa. Syy on siinä, etten osaa muuten.
Mikä siinä on niin vaikeaa, jätät vain sen silmukan pois, pitäisi olla ihan helppoa mikäli olet itse kirjoittanut koodin, etkä kopioinut sitä jostain tietämättä mitä se tekee.
Paratiisin poika kirjoitti:
Teen kategoria sivua. Otsikko pitäisi saada tyyliin Kategoria: {kategorian nimi}. Otsikko kuitenkin määritellään muuttujaan $pagename, ja sen jälkeen includetetaan head.php. Mikä avuksi? Kaikki on mulle nyt sekavaa tässä.
Voisit kertoa mikä vika tuossa koodissa on. Huomasin kuitenkin, että asetat muuttujan $c arvoksi "isset($_GET["c"])", eikä koodi sen takia toimi niin kuin haluaisit sen toimivan. Ota PHP:n manuaali esiin ja katso mitä funktio isset palauttaa. Edelleenkin käytät PDO:ta väärin, älä laita mitään muuttujia kyselyyn, vaan anna ne executen yhteydessä, upload-koodin olit tainnut tehdä sen suhteen oikein. Voisit myös alkaa sisentämään koodia paremmin, jotta sitä olisi helpompi lukea.
hmm. silmukka hakee tuolla $rivi juttulla taulusta tietoa. ainoa muu paikka missä se määritellään, on... hmm... se silmukan aloitus. _Muuta en osaa tuolla pdo:lla tehdä hakeakseni tietoa...
Ei voi olla noin vaikeaa jättää yksi silmukkaa pois :)
"Näin jätät silmukan pois mikäli kysely palauttaa vain yhden rivin" rautalangasta väännettynä:
<?php //koodia... $kysely->execute(); while ($rivi = $kysely->fetch()) { //koodia... }
-->
<?php //koodia... $kysely->execute(); $rivi = $kysely->fetch(); //koodia...
Mitäpä jos opeteltais ne kielen perusasiat ennenkuin ruvetaan tekemään jotain youtubea
derp kirjoitti:
Mitäpä jos opeteltais ne kielen perusasiat
Niin tai ohjelmoinnin...
Miksei tässäkin voi vain opetella käyttämään YouTube Apia, niin voisi pistää ne videot suoraan YouTubeen, ja näyttää sen kautta omilla sivuillaan?
Haluan tehdä itse sellaisen youtuben, jonka jokainen voi ladata sivuiltani ja muokata ja pitää siellä just niitä videoita joita haluaa ja muutella nimiä mielensä mukaan.
Voisiko joku auttaa ihan vaan css pulmassa nyt?
Tuolla on tuo linkkipalkki. siinä on linkit Etusivulle ja Kategorioihin. Siinä on jotain mätää... Mikä vikana?
css
ul li.links { list-style-type:none; margin:0; padding:0; list-style-image: none; background-color: #dddddd; }li.links { display: inline; font-weight: bold; }a:active.links { background-color: gray; }a:hover.links { background-color: gray; }a.links { text-decoration: none; font-weight: bold; }
html
<ul class='links'> <li class='links'><a href='index.php' class='links'>Etusivu</a></li> <li class='links'><a href='category.php' class='links'>Kategoriat</a></li> </ul>
Edit: Unohdin kertoa ongelman. Kuva tuolla: http://vjgo.arkku.net/mediaplayer/
Anteeksi kuvan muoto, mutta tämä on yhä se Windows 2000
Paratiisin poika kirjoitti:
Haluan tehdä itse sellaisen youtuben, jonka jokainen voi ladata sivuiltani ja muokata ja pitää siellä just niitä videoita joita haluaa ja muutella nimiä mielensä mukaan.
Haluat tehdä "itse"? Eli kopioida toimivan koodin suoraan ohjelmointiputkasta?
Pyydän vain välillä apua kun en osaa itse...
Id korjattu :D
Muuten. Tuolla kategoriassa on nyt mulla ongelma. Otsikon sain korjattua. mutta nyt pitöisi kyseisen kategoriuan videot saada listattua. laitoin video_videos tauluun kohdan category. sinne on määritelty noita.
Miten saan 2 kyselyä samalla sivulatauksella?
<?php include('toppart.php'); if(!isset($_GET['c'])) { $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}category"); $kysely->execute(); $pagename = "Kategoriat"; include('head.php'); echo "<h1>kategoriat</h1>\n<ul>"; while ($rivi = $kysely->fetch()) { $name = $rivi['name']; $id = $rivi['id']; echo "<li><a href='category?c=$id'>$name</a></li>\n"; } echo "</ul>"; }else { $c=(isset($_GET["c"])); $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}category WHERE id='$c'"); $kysely->execute(array($_GET["c"])); $rivi = $kysely->fetch(); $name = $rivi['name']; $description = $rivi['description']; $pagename = "Kategoria: $name"; include('head.php'); echo "<small><a href='category.php'>Kaikki kategoriat</a></small>\n"; echo "<h1>$name</h1>\n$description<br>\n<h3>videot</h3>\n<p>Tähän tulee kategorian linkit tyyliin <ul>\n<li><a...</li>\n...</ul>\n</p>"; include('bottompart.php'); } ?>
Paratiisin poika kirjoitti:
Tuolla on tuo linkkipalkki. siinä on linkit Etusivulle ja Kategorioihin. Siinä on jotain mätää... Mikä vikana?
Miten minä voisin tietää mikä siinä on sinun mielestäsi vikana?! Kerro mitä siinä pitäisi olla toisin, emmehän me muuten voi auttaa.
Paratiisin poika kirjoitti:
Pyydän vain välillä apua kun en osaa itse...
Minusta sinä pyydät "välillä" apua kun et osaa itse... Et tunnu osaavan ohjelmoinnista edes perussasioita kunnolla ja silti yrität koodata näin suurta projektia. Sinuna unohtaisin tämän hetkeksi ja jatkaisin sitten kun on vähän lisää kokemusta. Mikäli kuitenkin haluat välttämättä jatkaa tätä, älä lisää tähän enää mitään ominaisuuksia, voisit jopa poistaa kategoriat, ja tee sivustosta toimiva. Sen jälkeen voit halutessasi lisätä muita virityksiä sivuille.
Edit:
Paratiisin poika kirjoitti:
Muuten. Tuolla kategoriassa on nyt mulla ongelma. Otsikon sain korjattua. mutta nyt pitöisi kyseisen kategoriuan videot saada listattua. laitoin video_videos tauluun kohdan category. sinne on määritelty noita.
Tarkoititko, että loit video_videos tauluun sarakkeen category, jolla määritellään mihin kategoriaan video kuuluu? Mikäli teit niin kuin arvelin, niin video voi olla vain yhdessä kategoriassa kerralaan, jos haluat että video voi kuulua moneen kategoriaan, tarvitset yhden taulun lisää. Siitä lienee kirjoitettu MySQL-oppaassa.
Paratiisin poika kirjoitti:
Miten saan 2 kyselyä samalla sivulatauksella?
Koodaat siihen sivuun kaksi kyselyä, eihän siinä ole mitään ihmeellistä.
Väännän vielä rautalangasta:
Huoh. Kerroin jo mitä haluan sille linkkipalkille tehdä. sitäpaitti joku sai ladattua jopa 2 videota sivulle. Tosin avi muodossa...
Mitkä videomuodot näkyvät nettisivulla?
Paratiisin poika kirjoitti:
Huoh. Kerroin jo mitä haluan sille linkkipalkille tehdä.
Et todellakaan kertonut. Annoit vain pätkän koodia ja kuvan ja sanoit että homma kusee.
Paratiisin poika kirjoitti:
Mitkä videomuodot näkyvät nettisivulla?
Kannattais oikeesti jättää nää monimutkaset youtubet muiden tehtäväksi, ei sun kokemuksella ja oma-aloitteisuudella saa aikaseksi yhtään mitään... Paitsi hyvät naurut, joka kerta kun näitä keskusteluja lukee.
Kuvassa on se, minkä haluan tulokseksi. Nyt se ei tod ole sitä.
Ja minä haluan tehdä jotain, mutta jostain syystä mikään ei onnistu. Nytkin tuo categoria heittää kokoajan mekaniikka kategorian vaikka kategorian id olisi 372569834793.
<?php include('toppart.php'); if(!isset($_GET['c'])) { $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}category"); $kysely->execute(); $pagename = "Kategoriat"; include('head.php'); echo "<h1>kategoriat</h1>\n<ul>"; while ($rivi = $kysely->fetch()) { $name = $rivi['name']; $id = $rivi['id']; echo "<li><a href='category?c=$id'>$name</a></li>\n"; } echo "</ul>"; }else { $c=(isset($_GET["c"])); $kysely1 = $yhteys->prepare("SELECT * FROM {$dbtable}category WHERE id='$c'"); $kysely1->execute(); while ($rivi = $kysely1->fetch()) { $category = $rivi['name']; $description = $rivi['description']; $pagename = "Kategoria: $category"; include('head.php'); echo "<small><a href='category.php'>Kaikki kategoriat</a></small>\n"; echo "<h1>$category</h1>\n$description<br>\n<h3>videot</h3>\n<p>\n<ul>\n"; } $kysely2 = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE category='$category'"); $kysely2->execute(); while ($rivi2 = $kysely2->fetch()) { $name = $rivi2['name']; $id = $rivi2['id']; echo "<li><a href='index.php?id=$id'>$name</a></li>\n"; } echo "</ul>\n</p>\n"; include('bottompart.php'); } ?>
Paratiisin poika kirjoitti:
Huoh. Kerroin jo mitä haluan sille linkkipalkille tehdä.
Minusta sinä aivan selvästi kysyit "Siinä on jotain mätää... Mikä vikana?", ja liitit jonkun kuvan missä ei näyttänyt olevan mitään vikaa. Jos olet kertonut mitä haluat tehdä sille jossain aiemmassa viestissä, en ole huomannut sitä, enkä kyllä jaksa lukea koko ketjua selvittääkseni.
Paratiisin poika kirjoitti:
sitäpaitti joku sai ladattua jopa 2 videota sivulle. Tosin avi muodossa... Mitkä videomuodot näkyvät nettisivulla?
Jos pyörität videoita flash-soittimella, niin muodot joita flash tukee, en kylläkään muista niitä ulkoa. Mikäli taas käytät selaimen omaa videosoitinta (video-tagi), niin sitten ne muodot joita selain tukee/joihin on asennettuna koodekit. Avi taas ei ole videomuoto, vaan pelkkä paketti videolle ja äänelle; siinä voi olla monia erillaisia videotamuotoja sisällä.
Edit: Tänne olikin ilmestynyt lisää viestejä sinä aikana kun kirjoitin tätä, olit siis tehnyt fotarilla sellaisen kuvan sivusta kuin haluaisit sen olevan, minä luulin, että se on sivu nykyisessä muodossa.
'Kuvassa näkyy millaisen lopputuloksen haluan. sivuleni (http://vjgo.arkku.net/mediaplayer/) tuo linkkipalkki on ihan jotain muuta...
Eikös tuo kuva ole aika lähellä haluamaasi? Kokeile seuraavaa koodia, sillä linkkipalkin pitäisi venyä koko ruudun levyiseksi.
ul.links { background-color: #dddddd; width: 100%; }
Nyt toimii tuo hyvin. Kiitos.
Ja jos jotain isompaa projektia haluaa oikeasti alkaa vääntämään, niin suosittelen tutustumaan CodeIgniter-nimiseen PHP-frameworkkiin... Mielestäni se on erittäin helppokäyttöinen verrattuna esim. Zendiin. (Tuo tarjoaa mm. valmiin luokkarajapinnan noiden tiedostojen uploadaamiseen.)
Mites tuo kategoria sivu... Mikä siinä on vikana? Itse en löydä mitään vikaa. Sama uploadissa...
Hmm... tulostin tuon $c muuttujan, ja huomasin sen olevan aina 1. Tarkastin miten sen kuuluu mennä, ja nyt se toimii... hihi... Sori. mun moka
Haluasin mielipiteen registeröintisivustani. Tällähetkellä ei tarkasta meilien @ merkki juttua. Estää html tagit :D
Oma mielipide on se, että ehkä tässäkin olisi kannattanut käyttää valmista alustaa, jolloin ihan perustoimintoja ei tarvitsisi itse vääntää. Paratiisin_Poika olisi voinut käyttää senkin ajan vaikka niiden komponenttien ja laajennusten koodailuun.
Jotenkaan joku "kirjautumissivu" tai käyttäjien rekisteröitymistoiminto ei jaksa enää yllättää.
Mua kiinnostaa lähinnä se, miten tallennat salasanat tietokantaan.
Tallennan salasanat tietenkin suojarusti seuraavalla koodilla;
<?php //tää on täs jot koodi värittyisi include('toppart.php'); $pagename = "Rekisteröinti"; include('head.php'); $username = $_POST["username"]; $password = $_POST["password"]; $email = $_POST["email"]; if(!empty($password)) { if(!empty($email)) { if(!empty($username)) { $forbiddenchars=false; if(strpos($username,":")) $forbiddenchars=true; if(strpos($username,"&")) $forbiddenchars=true; if(strpos($username,"?")) $forbiddenchars=true; if(strpos($username,"<")) $forbiddenchars=true; if(strpos($username,">")) $forbiddenchars=true; if(strpos($username,"'")) $forbiddenchars=true; if(strpos($username,"\"")) $forbiddenchars=true; if(!$forbiddenchars) { $kysely = $yhteys->prepare("INSERT INTO {$dbtable}users (username, password, email) VALUES (?, ?, ?)"); $kysely->execute(array($username, md5($password), $email)); $id = $yhteys->lastInsertId(); echo "Tunnus <a href='profile.php?id={$id}'>{$username}</a> on onnistuneesti luotu."; }else { echo "Tunnuksesi sisältää kiellettyjä merkkejä!"; } }else { echo "Anna salasana!"; } }else { echo "Anna sähköposti!"; } }else { echo "Anna tunnus!"; } include('bottompart.php'); } }
Paratiisin poika kirjoitti:
Tallennan salasanat tietenkin suojarusti seuraavalla koodilla;
Salasanat kannattaisi suolata; Suolaamatonta MD5-tiivistettä ei murra kovinkaan kauaa.
Koodissa on kyllä muutakin parantamisen varaa. Aivan aluksi se kannattaisi sisentää kunnolla, tuo on nyt aika vaikealukuista. Sisentämisen jälkeen tutustu loogisiin operaattoreihin. Kolmanneksi päätä "koodaustyylisi", eli mihin kohtiin laitat välilyöntejä, ovatko muuttujat suomeksi vai englanniksi jne.
Mikä idea muuten on merkkien :&?<>'\ kieltämisessä käyttäjänimissä? Kannattaisi ennemminkin määritellä sallitut merkit; nyt käyttäjänimeen voi laittaa mitä ihmeellisempiä kontrollimerkkejä.
Ajattelin tälä kertaa tehdä sellaisen sovelluksen, jota ei niin helpolla murretakaan, joten en katso ttarpeelliseksi suojata salasanoja suolalla. Kontrollimerkitkään eivät haittaa, ksoka niillä ei voi sotkea. Ja sisennystä en osaa oikein kunnolla. Ja muuttujat muunnan jossainvaiheessa kokonaan englanninkielisiksi, koska välillä on vaikeaa keksiä synonyymejä joillekkin ä, ö ja/tai å merkkejä sisältäville muuttujille.
Mikä vika koodissani muuten on tässä kohtaa, jossa teen login sivua:
elseif($action == '2') { include('toppart.php'); $pagename = "Kirjautuminen"; include('head.php'); $username = $_POST["username"]; $passwordmd5 = $_POST["password"]; $passwordmd5 = md5('$passwordmd5'); $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username='$username'"); $kysely->execute(); $rivi = $kysely->fetch() $dbpasswordmd5 = $rivi["password"]; //Tähän php jäljittää ongelman $dbusername = $rivi["username"]; //Ja tuon ratkettua, varmaan jatkaa tähän $login = true; if(!$passwordmd5 == $dbpasswordmd5) $login=false; if($login) { setcookie("$username", "$passwordmd5"); setcookie("$username", "$passwordmd5", time() + 60 * 60 * 24 * 365); echo "jeah!!!"; }else { echo "höh!"; } include('bottompart.php'); }
Paratiisin poika kirjoitti:
<? $kysely->execute(); $rivi = $kysely->fetch() $dbpasswordmd5 = $rivi["password"]; //Tähän php jäljittää ongelman
Riviltä juuri ennen virhettä puuttuu puolipiste. Kun saat virheilmoituksen, kannattaa tarkistaa kyseinen rivi ja rivi ennen sitä, ettei niissä ole vastaavia kirjoitusvirheitä. Itselläni ainakin puolet virheilmoituksista ovat tällaisia.
Paratiisin poika kirjoitti:
Ajattelin tälä kertaa tehdä sellaisen sovelluksen, jota ei niin helpolla murretakaan, joten en katso ttarpeelliseksi suojata salasanoja suolalla.
"Ajattelin tällä kertaa ajaa (pyörällä) niin varovasti, etten katso tarpeelliseksi käyttää kypärää."
Paratiisin poika kirjoitti:
Ajattelin tälä kertaa tehdä sellaisen sovelluksen, jota ei niin helpolla murretakaan, joten en katso ttarpeelliseksi suojata salasanoja suolalla.
Ei näin, ei todellakaan näin.
Paratiisin poika kirjoitti:
muuttujat muunnan jossainvaiheessa kokonaan englanninkielisiksi, koska välillä on vaikeaa keksiä synonyymejä joillekkin ä, ö ja/tai å merkkejä sisältäville muuttujille.
Muunna ihmeessä, that's what everybody else uses, mut tiesit kai, että PHP on niin pervo kieli, että sen identiefereissä saa käyttää ääkkösiä?
Paratiisin poika kirjoitti:
Mikä vika koodissani muuten on tässä kohtaa, jossa teen login sivua:
$rivi = $kysely->fetch()
$dbpasswordmd5 = $rivi["password"]; //Tähän php jäljittää ongelman
Jäljittää ihan oikein: puolipiste.
Paratiisin poika kirjoitti:
<?php $dbpasswordmd5 = $rivi["password"]; //Tähän php jäljittää ongelman $dbusername = $rivi["username"]; //Ja tuon ratkettua, varmaan jatkaa tähän ?>
Onko kannassa tuon nimisiä kenttiä? Kannattaa hakea '*' merkin asemasta ne kentät, joita on tarkoitus käyttää jatkossa.
Paratiisin poika kirjoitti:
<?php if(!$passwordmd5 == $dbpasswordmd5) $login=false; ?>
Mitäs hittoa tuon nyt pitäs tehdä?
Joo. Haen yleensä pdo:n ilmoitukset jostain aiemmasta koodistani tai sitten sen oppaasta, kun en niitä muista ulkoa, ja tuo on alunperin while() functiolla haettu, joten unohdin laittaa tuon puolipisteen sitä kun ei siinä valmiina ollut. Ja kun san tämän valmiiksi ja lataukseen alan parantelemaan sitä fiksummaksi, sitten muutan db hakujutun pois pdo tyylisdtä ja teen siitä tietoturvariskillemmän, uttta kun kaikki palvelimet eivät pdo:ta tunnista, on tämä pakollista. Kun tämä on tehty alan muokkaamaan siitä kokoajan vain enemmän ja enemmän YouTube:n tyylistä. Kiitos tuon virheen jäljityksestä.
Edit: Tuo if(!$passwordmd5 == $dbpasswordmd5) $login=false; tekee sen, että jos lähetetty salasana, joka on jo muunnettu md5 muotoon ($dbpasswordmd5) EI ole sama kuin tietokannassa oleva salasana, tunnus ole oikein. Muussa tapauksessa se on oikein. Ja toimii kyllä. Tosin heittää header erroria. jos kirjautuminen on oikein. Kirjautuminen kestää vuoden, jos ei kirjauduta ulos, jota ei juuri nyt voida tehdä.
Edit uus: Huomasin ettei tuo aseta evästeitä. Operalla pystyy katsomaan onko eväste asetettu, kun niitä voi sillä muokata. Ei ollut. Mikä vikana? Koodi on opittu (jes! Löysin sanan joka ei viittaa kopiointiin!) putkan oppaasta.
Edit kolmas: Ohhoh. Käytin asettamiseen evästeitä ja lukuun istuntoa. huppista.
Eikä vielkkää toimi. Auutakaa please
Paratiisin poika kirjoitti:
Huomasin ettei tuo aseta evästeitä.
Ennen keksien asettamista ei saa tulostaa mitään.
Salasanan tarkistus kannattaisi totetuttaa WHERE:llä.
<?php elseif($action == '2') { include('toppart.php'); $pagename = "Kirjautuminen"; include('head.php'); $username = $_POST["username"]; $passwordmd5 = $_POST["password"]; $passwordmd5 = md5('$passwordmd5'); $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username='$username'"); $kysely->execute(); $rivi = $kysely->fetch(); $dbpasswordmd5 = $rivi["password"]; $dbusername = $rivi["username"]; $login = true; if(!$passwordmd5 == $dbpasswordmd5) $login=false; if($login) { //Tässä ennen sessionia on hgirveänä tulostusta! Hui kamala session_start(); $_SESSION["username"] = "$dbusername"; $_SESSION["password"] = "$dbpassword"; echo "jeah!!!"; }else { echo "<a href='login.php'>höh!</a>"; }
Seriously. What is matter whit the code?
*Eiku oho. Nyt löysin vikoja pariki. Hetkoneeeeeeeen
Kerro vielä mikä ei toimi? Ja tuo kommenttissasi oleva kirjoitusta ennen headereita aiheuttaa kyllä headers already sent by... virheen.
Nyt tuo jo asettaa evästeet, mutta ongelmia löytyy nytkin. Voitte tehdä tunnuksen ja chekata miltä näyttää. logout.php poistaa evästeen ja ohjaa etusivulle. Mutta jos ei ole kirjautuneena sisään, tulee erroria ja kunnolla. Korjasin jopa ongelman, joka echotti aina tuon ruotsinkielisen lauseen. Nyt se echotetaan vain jos ollaan kirjautuneena. Teen seuraavaksi palkin, josta sisällä oleva käyttäjä voi mennä profile sivuilleen tai kirjautua ulos.
Edit: Tää projekti sujuu nopeammin ja paremmin kuin odotin :D
Edit toka: Pitäisi saada jotenkin tiedoston nimi. Löysin keinon tulostaa tuonne mediaplayer/tiedosto.php, mutta pitäisi saada tulokseksi VAIN tiedosto.php. Miten onnistuisi? En löydä php.net:istä.
Löysin helpomman tavan kun en tajunnut tuosta mitään. Seuraavaksi katson mitkä errorit saan tuosta piiloon. Valmistuessa estän virheilmoitukset kokonaan.
Haluaako joku auttaa minua poistamaan, tai ainakin vähentämään virheilmoituksia sivullani? En tahtoisi vain sivuuttaa kaikkia erroreita estämällä niitä, vaan korjata ongelmat. Jos joku tahtoo auttaa;
Errorit (Ei kirjautuneena)
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/index.php:1) in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 25 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/index.php:1) in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 25 Notice: Undefined index: username in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 26 Notice: Undefined index: id in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 27 Notice: Undefined index: uniqueid in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 28 Notice: Undefined variable: logged in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 36 Notice: Undefined variable: logged in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 51 Notice: Undefined variable: logged in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/head.php on line 24
Errorit (Kirjautuneena)
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/index.php:1) in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 25
Errorit (Sisäänkirjautumisessa)
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php:24) in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 25 Notice: Undefined index: username in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 26 Notice: Undefined index: id in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 27 Notice: Undefined index: uniqueid in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 28 Notice: Undefined variable: logged in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 36 Notice: Undefined variable: logged in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 51 Notice: A session had already been started - ignoring session_start() in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/login.php on line 105 Warning: Cannot modify header information - headers already sent by (output started at /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php:24) in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/login.php on line 110
Sitten tässä on php koodit, joissa on erroreiden mukaan jokin ongelma.
toppart.php
<?php ini_set("display_errors", 1); ini_set("error_reporting", E_ALL | E_STRICT); if(file_exists("settings.php")) include("settings.php"); else die("<html>\n<head>\n<title>Virhe!</title>\n</head>\n<body>\n<b><i>settings.php</i></b> tiedosto puuttuu!\n</body>\n</html>"); try { $yhteys = new PDO("mysql:host=$dbhost;dbname=$dbname", "$dbuser", "$dbpassword"); } catch (PDOException $e) { die("VIRHE: " . $e->getMessage()); } $yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $ip = $_SERVER['REMOTE_ADDR']; $esta_teksti = false; $file_name = $_SERVER["SERVER_NAME"]; if($file_name == '{$software_dir}/login.php?id=2') { $esta_teksti = true; } if(!$esta_teksti) { session_start(); $session_username = $_SESSION["username"]; $session_id = $_SESSION["id"]; $session_uniqueid = $_SESSION["uniqueid"]; if(!empty($session_username)) { $logged = true; } }else { $logged = false; } if($logged) { $kyselyadmin = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username='$session_username'"); $kyselyadmin->execute(); $rivi = $kyselyadmin->fetch(); $admincheck = $rivi["admin"]; $admin = false; if($admincheck == '1') $admin = true; } $kyselyuniqueid = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE id='$session_id'"); $kyselyuniqueid->execute(); $rivi = $kyselyuniqueid->fetch(); $dbuniqueid = $rivi["uniqueid"]; #Tämä failaa ja kunnolla. en tiedä mikä mättää... if($logged) { if($session_uniqueid == '$dbuniqueid') { echo "HAXER! Tyhjennä tietokoneesi evästeet ja kirjaudu OMALLA tunnuksellasi sisään."; exit; } } ?>
head.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <?php echo " <title>$pagename</title>"; ?> <meta name="description" content="Ilmaisia videoita, Free videos" /> <meta name="keywords" content="video, video player" /> <meta name="author" content="Ville-Juhani Sinisalo" /> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" /> <link rel="stylesheet" type="text/css" href="style.css" /> <script type="text/javascript" src="script.js"></script> </head> <body> <?php echo "<noscript>Sivusto vaatii toimiakseen JavaScript tuen. Selaimessasi ei ole JavaScript päällä. Laita se päälle jotta sivusto toimisi täysin.</noscript>"; echo "<table border=0 width='100%'>\n"; echo "<tr>\n<td id='logo'><acronym title='Etusivulle'><a href='index.php'><img src='Logo.png'></a></acronym>\n"; echo "</td>\n"; echo "<td id='search'><form method='get' action='search.php'>\n"; echo "<input id='search' type='text' name='query'><input id='search_button' type='submit' value='Hae'>\n"; echo "</form>\n"; echo "</td>\n<td>"; if($logged) { echo "<b>{$session_username}</b><br><a href='profile.php?id={$session_id}'>Profiili</a><br><a href='upload.php'>Lataa video!</a><br><a href='logout.php'>Kirjaudu ulos</a>\n"; }else { echo "<br><a href='login.php'>Kirjaudu sisään</a></td>\n"; } echo "</tr>\n"; $kyselyvideot = $yhteys->prepare("SELECT COUNT(*) FROM video_videos"); $kyselyvideot->execute(); $tulos = $kyselyvideot->fetch(); echo "<tr id='hr'>\n"; echo "<td><center>{$sitename}ssa on tällähetkellä <b>" . $tulos["COUNT(*)"] . "</b> videota.\n</center></td>\n</tr>\n<tr>\n"; echo "<td colspan='3' id='hr'>\n<br>\n<ul class='links'>\n<li class='links'><a href='index.php' class='links'>Etusivu</a></li>\n<li class='links'><a href='category.php' class='links'>Kategoriat</a></li>\n</ul>\n</td>\n"; echo "</tr>\n</table>\n"; ?>
Ajattelin tuosta ja index.php filusta kohta vähän pätkiä noita tooooooooooosi pitkiä rivejä...
Tässä on sitten login brobleema
login.php
<?php if(!isset($_GET['action'])) { include('toppart.php'); $pagename = "Kirjaudu sisään"; include('head.php'); echo "<br><br>\n"; echo "<h2>Kirjaudu sisään</h2>\n"; echo "<small>Jos sinulla ei ole tunnusta, voit <a href='?action=1'>luoda</a> sellaisen!</small><br>\n"; echo "<form action='login.php?action=2' method='post'>\n"; echo "<table border=0>"; echo "<tr>"; echo "<td>Tunnus: </td><td> <input type='text' name='username'></td>\n"; echo "</tr>\n<tr>\n"; echo "<td>Salasana: </td><td> <input type='password' name='password'></td>\n"; echo "</tr>\n</table>\n"; echo "<input type='submit' value='Kirjaudu sisään'>\n"; echo "</form>\n"; include('bottompart.php'); }else { $action=intval($_GET['action']); if($action == '1') { include('toppart.php'); $pagename = "Rekisteröinti"; include('head.php'); echo "<h2>Rekisteröinti</h2>\n"; echo "<small>Jos sinulla on jo tunns, <a href='login.php'>kirjaudu sisään</a>!</small>"; echo "<form action='login.php?action=3' method='post'>\n"; echo "<table border=0>"; echo "<tr>"; echo "<td>Tunnus: </td><td> <input type='text' name='username'></td>\n"; echo "</tr>\n<tr>\n"; echo "<td>Salasana: </td><td> <input type='password' name='password'></td>\n"; echo "</tr>\n<tr>\n"; echo "<td>Sähköposti: </td><td> <input type='text' name='email'></td>\n"; echo "</tr>\n</table><br>\n"; echo "<!--<span class='captcha_text' onclick='captcha_info();'>Captcha varmistus</span><br>\n"; echo "<img src='captcha.php' class='captcha' onclick='captcha_info();'><br><br>\n"; echo "<input type='text' name='captcha'><br><br-->\n"; echo "<input type='submit' name='register' value='Rekisteröidy' />"; echo "</form>"; include('bottompart.php'); }elseif($action == '3') { include('toppart.php'); $pagename = "Rekisteröinti onnistui"; include('head.php'); $username = $_POST["username"]; $password = $_POST["password"]; $email = $_POST["email"]; if(!empty($password)) { if(!empty($email)) { if(!empty($username)) { $forbiddenchars=false; if(strpos($username,":")) $forbiddenchars=true; if(strpos($username,"&")) $forbiddenchars=true; if(strpos($username,"?")) $forbiddenchars=true; if(strpos($username,"<")) $forbiddenchars=true; if(strpos($username,">")) $forbiddenchars=true; if(strpos($username,"'")) $forbiddenchars=true; if(strpos($username,"\"")) $forbiddenchars=true; if(!$forbiddenchars) { $uniqueid = rand(1, 9999999999999999999999999999); $uniqueid = md5($uniqueid); $kysely = $yhteys->prepare("INSERT INTO {$dbtable}users (username, password, email, uniqueid) VALUES (?, ?, ?, ?)"); $kysely->execute(array($username, md5($password), $email, $uniqueid)); $id = $yhteys->lastInsertId(); echo "Tunnus <a href='profile.php?id={$id}'>{$username}</a> on onnistuneesti luotu."; }else { echo "Tunnuksesi sisältää kiellettyjä merkkejä!"; } }else { echo "Anna salasana!"; } }else { echo "Anna sähköposti!"; } }else { echo "Anna tunnus!"; } }elseif($action == '2') { include('toppart.php'); $username = $_POST["username"]; $passwordmd5 = $_POST["password"]; $passwordmd5 = md5('$passwordmd5'); $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username='$username'"); $kysely->execute(); $rivi = $kysely->fetch(); $dbpasswordmd5 = $rivi["password"]; $dbusername = $rivi["username"]; $dbid = $rivi["id"]; $dbuniqueid = $rivi["uniqueid"]; $login = true; if(!$passwordmd5 == $dbpasswordmd5) $login=false; if($login) { session_start(); $_SESSION["username"] = "$dbusername"; $_SESSION["id"] = "$dbid"; $_SESSION["uniqueid"] = "$dbuniqueid"; header("Location: index.php"); exit; }else { echo "<a href='login.php'>Ei oikein onnistunut tää nyt kyl yhtään...</a>"; } include('bottompart.php'); } } ?>
Itse sain jo korjattua... hmm minkäs minä nyt korjasinkaan? niin joo. $esta_teksti jutun korjasin. Olin vain määritellyt sen että jos sitä ja tätä niin totta mutten missään määritellyt muuten epätotta.
Poista tulostukset ennen otsikoiden lähettämistä. Tarkista muuttujien olemassa olo isset() funktiolla.
En tajunnut tuota otsikkojuttua. Voisitko tarkentaa? Ja tsekkaan ton isset() function.
otsikolla tarkoitan headereita, eli sivun otsikkotietoja en fyysistä otsikkoa. Muuten otsikon sisältö näyttää olevan $pagename muuttujan kanssa yhtenevä, joten lienee fiksua käyttää sitä tuon otsikon luonnissa hyväksi?
Minä taidan olla hieman tyhmä. Ainoa minkä tuosta tajusin, on se, että kannattaa käyttää jotakin otsikon luonnissa hyväksi. En tosin vieläkään tiedä mitä kannattaa käyttää hyväksi. Anteeki tyhmyyteni.
eli siis jos header() funktio ajetaan tekstin tulostuksen jälkeen tulee virhe. Jos keksi tai sessio aloitetaan tekstin tulostuksen jälkeen tulee virhe. Jälkimmäinen vinkkini tarkoitti muuttujaasi '$pagename'.
En tuolla mun koodissa missään kohtaa ole header() functiota... Miksi mie en oikein tajua?
Paratiisin poika kirjoitti:
En tuolla mun koodissa missään kohtaa ole header() functiota... Miksi mie en oikein tajua?
Myös keksit ja kekseihin perustuvat sessioiden ID:t menenevät headereiden mukana. Niitäkään ei saa olla ennen tulostusta.
Fixed. Ongelmina ovat enään login.php sivu ja kirjautumattomana oleminen, jolloin näkyy erroreita. Raakaliha auttoi :D
Edit: Hakukone korjattu (Ihan ite korjasin) ja nyt toimii. :D :D
valittaa, että tiedosto ei kelpaa. mitä muuten tämä "Laita koira.PNG" kohta tarkoittaa?
Palvelimella on kansio images. Tuossa kansiossa on pari kuvaa, ja 1 niistä on koira.png, jonka tein Otto koira videota varten. Tuon kohdan voisin kylläkin poistaa. Palvelimelle ei mene videoita, jotka ovat jotain muuta kuin sallittuja muotoja. Jos se menee, niin todennäköisesti se vain laittoi tiedot tietokantaan, koska hyvin harvoin videoita on tuolla. suurin osa nykyisistä videoista olen minä uploadannut sinne ftp:llä.
Minulle tuli pdo ongelma. Asetuksissa pitäisi voida muuttaa mail ja description, mutten tiedä miten muotoilla sql kysely:
<?php include('toppart.php'); $pagename = "Muokkaa profiiliasi"; include('head.php'); if($logged) { if (isset($_POST['save'])) { $description = $_POST["description"]; $email = $_POST["email"]; $kysely = $yhteys->prepare("UPDATE {$dbtable}users SET (description, email) WHERE id = '$session_id' VALUES (?, ?)"); $kysely->execute(array($description, $email)); echo "<br><span style='color:green;font-weight:bold;'>Asetukset tallennettu onnistuneesti!</span>\n<br><br>\n"; } $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE id='$session_id'"); $kysely->execute(); $rivi = $kysely->fetch(); $description = $rivi["description"]; $email = $rivi["email"]; echo "<form method='post' action='editprofile.php'>\n"; echo "Käyttäjätunnus: <b>{$session_username}</b><br>\n"; echo "ID: <b>{$session_id}</b>\n<br><br>\n"; echo "<textarea name='description' rows='6' cols='40'>$description</textarea>\n<br>\n"; echo "Sähköpostiosoite: <input type='text' value='{$email}' name='email'><br><br>\n"; echo "<input type='submit' name='save' value='Tallenna'>\n"; echo "</form>\n"; }else { echo "<a href='login.php'>Kirjaudu sisään</a> muuttaaksesi asetuksiasi."; } include('bottompart.php');
Löysin jo ratkaisun
Miten saisin nuo loputkin error ilmoitukset poistettua?
Notice: Undefined index: username in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 27 Notice: Undefined index: id in /var/www/virtual/vjgo.arkku.net/htdocs/mediaplayer/toppart.php on line 28
<?php ini_set("display_errors", 1); ini_set("error_reporting", E_ALL | E_STRICT); if(file_exists("settings.php")) include("settings.php"); else die("<html>\n<head>\n<title>Virhe!</title>\n</head>\n<body>\n<b><i>settings.php</i></b> tiedosto puuttuu!\n</body>\n</html>"); try { $yhteys = new PDO("mysql:host=$dbhost;dbname=$dbname", "$dbuser", "$dbpassword"); } catch (PDOException $e) { die("VIRHE: " . $e->getMessage()); } $yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $ip = $_SERVER['REMOTE_ADDR']; $esta_teksti = false; $file_name = $_SERVER["SERVER_NAME"]; if($file_name == '{$software_dir}login.php?id=2') { $esta_teksti = true; } if(!$esta_teksti) { session_start(); $session_username = $_SESSION["username"]; $session_id = $_SESSION["id"]; $session_uniqueid = $_SESSION["uniqueid"]; if(isset($session_username)) { $logged = true; } }else { $logged = false; } if(!isset($logged)) { $logged = false; } if($logged) { $kyselyadmin = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username='$session_username'"); $kyselyadmin->execute(); $rivi = $kyselyadmin->fetch(); $admincheck = $rivi["admin"]; $admin = false; if($admincheck == '1') $admin = true; } $kyselyuniqueid = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE id='$session_id'"); $kyselyuniqueid->execute(); $rivi = $kyselyuniqueid->fetch(); $dbuniqueid = $rivi["uniqueid"]; if($logged) { if($session_uniqueid == '$dbuniqueid') { echo "HAXER! Tyhjennä tietokoneesi evästeet ja kirjaudu OMALLA tunnuksellasi sisään."; exit; } } ?>
Edelleenkin sillä issetillä (joka ei tosin ole funktio vaan kielen rakenne samoin kuin vaikka if tai for).
Koodissasi on myös useampi '$tällainen'
bugi. (Mietipä sitä. Olisi jo vähitellen aika oppia ne kielen perusasiat.)
$esta_teksti = false; $file_name = $_SERVER["SERVER_NAME"]; if($file_name == '{$software_dir}login.php?id=2') { $esta_teksti = true; }
tälläne villi veikkaus että $_SERVER['server_name'] ei myöskään oo se mitä tässä haet, muutenki vähä hämärä ylipäätää ton tarkotus
Koska login ei suostu ekalla yrityksellä uudelleenohjaamaan tekstin takia, tein tuon systeemin. settings.php filussa on mulla tällainen rivi:
<?php $software_dir = "mediaplayer/";
Tuon ansiosta jos on kirjautumissivu, estetään teksti ja tämän avulla sitten estetään toppart.php tiedostossa oleva istuntokohta. Yksinkertaista. Etsin parhaat ratkaisut kaikkiin kohtiin kunhan tube eka toimii kunnolla.
Mutta pakko teidänkin on myöntää että olen tämän projektini aikana jotain oppinut... isset(), implode()... Ja mikä tärkeintä: Tietoturvan parannus!
Mikä tässä videonpoistosivussa on vikana? SQL kohta heittää erroria...
<?php include('toppart.php'); $pagename = "Poista videoita"; include('head.php'); if($admin) { echo "<b>Poista videoita</b><br><br>\n"; echo "<form action='remorvevideo.php' method='post'>\n"; echo "Videon id: <input type='text' name='id'><br>\n"; echo "Poiston syy: <input type='text' name='reason'><br>\n"; echo "<input type='submit' name='remorve' value='Poista'>\n"; echo "</form>\n"; if (isset($_POST['remorve'])) { $id = $_POST["id"]; $reason = $_POST["reason"]; $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE id = '$id'"); $kysely->execute(); $rivi = $kysely->fetch(); $name = $rivi["name"]; echo "Olet poistamassa videota <a href='index.php?id={$id}' target='blank'>{$name}</a>, jonka id on {$id}.<br>\n"; echo "Syyksi annoit seuraavan: {$reason}<br>\n"; echo "Oletko varma että haluat poistaa tämän videon?<br>\n"; echo "<form action='remorvevideo.php' method='post'>\n"; echo "Ei <input type='radio' name='remorve' value='0' checked><br>\nKyllä <input type='radio' name='remorve' value='1' /><br><br>\n"; echo "<input type='hidden' value='{$id}' name='id'><input type='hidden' value='{$reason}' name='reason'><input type='hidden' value='{$name}' name='name'>\n"; echo "<input type='submit' name='remorve_check' value='Poista'>\n"; echo "</form>"; } if (isset($_POST['remorve_check'])) { $remorve = $_POST["remorve"]; $id = $_POST["id"]; $reason = $_POST["reason"]; $name = $_POST["name"]; if($remorve = '1') { $kysely = $yhteys->prepare("UPDATE deleted FROM {$dbtable}videos SET deleted='1', remorve_reason='$reason' WHERE id='$id'"); $kysely->execute(); echo "Video {$name} on poistettu onnistuneesti!"; }else { echo "Videota ei poistettu."; } } }else { echo "Tämä sivu on tarkoitettu vain ylläpitäjille!"; } include('bottompart.php'); ?>
Koodia olisi huomattavasti kivempi lukea, jos se olisi sisennetty paremmin sekä minkä ihmeen takia et anna noita sql-lauseiden muuttujia tuolle execute-metodille parametriksi, vaan asetat ne suoraan lauseeseen? Tämän takia PDO ei osaa hoitaa sen yhtä tärkeää tehtävää, sql-injektioaukkojen poistamista. Ja jos käyttäisit php:n valinnaisia ehto- ja toistorakenteiden muotoa, niin tuota html-koodi ei tarvitsisi echottaa.
On sama, kuin
<?php if ($sivu == 1): ?> <p>Hello, World!</p> <?php endif; ?>
Tuota edellistä rakennetta voidaan soveltaa samalla idealla toistarakenteisiinkin.
Ylipäätään sun varmaan kannattaisi opetella debuggaamaan tota koodiasi
ihan ilman, että joka käänteessä tulet pyytämään apua. Kannattaisi varmaan lukea hieman tarkemmin niitä virheilmoituksia ja sitä kautta etsiä ongelmaa. Samoin myös koodin paloittelu pienempiin osiin helpottaa virheen etsimistä huomattavasti.
edit. "Remorve" ei sitten tarkoita englanniksi poistamista vaan se on "remove".
Joo. Kiitos. Tarkoitus olisi lopussa laittaa kaikki teksti tietokanstaan, jotta ä ei olisi auml; ja sitä rataa. Lisäksi minä en aivan joka käänteessä pyydä apua. Esim tein videon poistojutun tietokannasta toimivaksi ja käyttäjien estojutun toimivaksi. Tässä olisi sitten login.php sivu sisennettynä (Raakaliha sisensi)
<?php if(!isset($_GET['action'])) { include('toppart.php'); $pagename = "Kirjaudu sisään"; include('head.php'); echo "<br><br>\n"; echo "<h2>Kirjaudu sisään</h2>\n"; echo "<small>Jos sinulla ei ole tunnusta, voit <a href='?action=1'>luoda</a> sellaisen!</small><br>\n"; echo "<form action='login.php?action=2' method='post'>\n"; echo "<table border=0>"; echo "<tr>"; echo "<td>Tunnus: </td><td> <input type='text' name='username'></td>\n"; echo "</tr>\n<tr>\n"; echo "<td>Salasana: </td><td> <input type='password' name='password'></td>\n"; echo "</tr>\n</table>\n"; echo "<input type='submit' value='Kirjaudu sisään'>\n"; echo "</form>\n"; include('bottompart.php'); } else { $action=intval($_GET['action']); if($action == '1') { include('toppart.php'); $pagename = "Rekisteröinti"; include('head.php'); echo "<h2>Rekisteröinti</h2>\n"; echo "<small>Jos sinulla on jo tunns, <a href='login.php'>kirjaudu sisään</a>!</small>\n"; echo "<form action='login.php?action=3' name='register' method='post'>\n"; echo "<table border=0>"; echo "<tr>"; echo "<td>Tunnus: </td><td> <input type='text' name='username'></td>\n"; echo "</tr>\n<tr>\n"; echo "<td>Salasana: </td><td> <input type='password' name='password'></td>\n"; echo "</tr>\n<tr>\n"; echo "</tr>\n<tr>\n"; echo "<td>Salasana uudelleen: </td><td> <input type='password' name='password2'></td>\n"; echo "</tr>\n<tr>\n"; echo "<td>Sähköposti: </td><td> <input type='text' name='email'></td>\n"; echo "</tr>\n</table><br>\n"; echo "<!--<span class='captcha_text' onclick='captcha_info();'>Captcha varmistus</span><br>\n"; echo "<img src='captcha.php' class='captcha' onclick='captcha_info();'><br><br>\n"; echo "<input type='text' name='captcha'><br><br-->\n"; echo "<input type='submit' name='register' value='Rekisteröidy' onclick='return form_check_register()' />\n"; echo "</form>\n"; include('bottompart.php'); } elseif($action == '3') { include('toppart.php'); $pagename = "Rekisteröinti onnistui"; include('head.php'); $username = $_POST["username"]; $password = $_POST["password"]; $password2 = $_POST["password2"]; $email = $_POST["email"]; if(!empty($username)) { if(!empty($email)) { if(!empty($password)) { if(!empty($password2)) { if($password == $password2) { $forbiddenchars=false; if(strpos($username,":")) $forbiddenchars=true; if(strpos($username,"&")) $forbiddenchars=true; if(strpos($username,"?")) $forbiddenchars=true; if(strpos($username,"<")) $forbiddenchars=true; if(strpos($username,">")) $forbiddenchars=true; if(strpos($username,"'")) $forbiddenchars=true; if(strpos($username,"\"")) $forbiddenchars=true; if(!$forbiddenchars) { $uniqueid = rand(1, 9999999999999999999999999999); $uniqueid = md5($uniqueid); $kyselyusername = $yhteys->prepare("SELECT username FROM {$dbtable}users WHERE username = ?"); $kyselyusername->execute(array($username)); if ($kyselyusername->fetch()) { echo "Tunnus on jo olemassa!"; include('bottompart.php'); exit; } $kysely = $yhteys->prepare("INSERT INTO {$dbtable}users (username, password, email, uniqueid) VALUES (?, ?, ?, ?)"); $kysely->execute(array($username, md5($password), $email, $uniqueid)); $id = $yhteys->lastInsertId(); session_start(); $_SESSION["username"] = "$username"; $_SESSION["id"] = "$id"; $_SESSION["uniqueid"] = "$uniqueid"; echo "Tunnus <a href='profile.php?id={$id}'>{$username}</a> on onnistuneesti luotu."; } else { echo "Tunnuksesi sisältää kiellettyjä merkkejä!"; } } else { echo "Salasanat eivät täsmänneet!"; } } else { echo "Anna molemmat salasanat!"; } } else { echo "Anna molemmat salasanat!"; } } else { echo "Anna sähköpostiosoite!"; } } else { echo "Anna tunnus!"; } } elseif($action == '2') { include("toppart.php"); $username = $_POST["username"]; $passwordmd5 = $_POST["password"]; $passwordmd5 = md5($passwordmd5); $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username='$username'"); $kysely->execute(); $rivi = $kysely->fetch(); $dbpasswordmd5 = $rivi["password"]; $dbusername = $rivi["username"]; $dbid = $rivi["id"]; $dbuniqueid = $rivi["uniqueid"]; $login = true; if($passwordmd5 != $dbpasswordmd5) $login=false; if($login) { $_SESSION["username"] = "$dbusername"; $_SESSION["id"] = "$dbid"; $_SESSION["uniqueid"] = "$dbuniqueid"; header("Location: index.php"); exit; } else { echo "Ei oikein onnistunut tä nyt kyl yhtän...<a href='login.php'>Uusi yritys</a>!"; } include('bottompart.php'); } } ?>
Ps. Terin kommentointijutun videoihin. Kommentteja ei vielä voi lähettää kun en sitä kerinnyt tehdä. Kommentointi sivu on iframeilla, jotta koodi olisi edes ieman lyhyempi.
Edit: Kommentointi toimii!
Paratiisin poika kirjoitti:
Tarkoitus olisi lopussa laittaa kaikki teksti tietokanstaan, jotta ä ei olisi auml; ja sitä rataa.
Oletko siis laittamassa niitä sivuilla olevia staattisia tekstejä tietokantaan? Niiden säilyttäminen tietokannassa vain monimutkaistaa asioita turhaan.
Paratiisin poika kirjoitti:
Kommentointi sivu on iframeilla, jotta koodi olisi edes ieman lyhyempi.
Mikäli koodi tuntuu liian pitkältä, voit laittaa kommentoinnin toiseen tiedostoon ja liittää includella palvelimella. Älä käytä liittämiseen käyttäjäpuolen kikkailuja.
Edit: Pidempiin koodeihin voisi laittaa scrollbarit, nyt ne tekevät sivusta turhan pitkän.
Onko tuo millainen se nyt on niin se mitä tarkoitit?
http://vjgo.arkku.net/mediaplayer/index.php?id=36
Edit: Kohta taitaa putka mennä solmuun... Mullla alko lagiin tääs ivu mutta muut toimii :o
Muuten... Aloin tutustumaan tuohon HTML5 kieleen, mutta en näe siinä mitään toimivaa (tai ehkä pari). Mikä vikana? ihan w3scools sivulta katon ettei lähde ole virheellinen
Anteeks, mut nyt mua rupee kohta jo itkettämään. Ihan niin ku sä et edes lukisi noita vastauksia loppuun, ennen kuin hyppäät jo kokonaan toiseen aiheeseen. Kuten muutkin on jo sanoneet, niin niiden perusasioiden opettelusta olisi varmasti hyötyä. Toisaalta ei myöskään kannata ensimmäiseksi hommaksi haukata liian suurta palaa kakkua, siitä ei tuu kun lisää itkua...
Anteeksi. Pyrin ensin selvittämään 1 ongelman ja sitten toisen. Mikäs olisi nyt ongelmana... hmm.
Jos ei ole kirjautuneena, niin tuolla ylhäällä on 2 erroria. Miten ne saisi poistettua ilman mitään suurempia kikkailuja? Minun pääni ei pysty hahmottamaan ratkaisua.
<?php ini_set("display_errors", 1); ini_set("error_reporting", E_ALL | E_STRICT); if(file_exists("settings.php")) include("settings.php"); else die("<html>\n<head>\n<title>Virhe!</title>\n</head>\n<body>\n<b><i>settings.php</i></b> tiedosto puuttuu!\n</body>\n</html>"); try { $yhteys = new PDO("mysql:host=$dbhost;dbname=$dbname", "$dbuser", "$dbpassword"); } catch (PDOException $e) { die("VIRHE: " . $e->getMessage()); } $yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $ip = $_SERVER['REMOTE_ADDR']; $esta_teksti = false; $file_name = $_SERVER["SERVER_NAME"]; if($file_name == '{$software_dir}login.php?id=2') { $esta_teksti = true; } if(!$esta_teksti) { session_start(); $session_username = $_SESSION["username"]; $session_id = $_SESSION["id"]; $session_uniqueid = $_SESSION["uniqueid"]; if(isset($session_username)) { $logged = true; } }else { $logged = false; } if(!isset($logged)) { $logged = false; } if($logged) { $kyselyadmin = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username='$session_username'"); $kyselyadmin->execute(); $rivi = $kyselyadmin->fetch(); $admincheck = $rivi["admin"]; $blockedcheck = $rivi["blocked"]; $admin = false; $blocked = false; if($admincheck == '1') $admin = true; if($blockedcheck == '1') $blocked = true; } $kyselyuniqueid = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE id='$session_id'"); $kyselyuniqueid->execute(); $rivi = $kyselyuniqueid->fetch(); $dbuniqueid = $rivi["uniqueid"]; if($logged) { if($session_uniqueid == '$dbuniqueid') { echo "HAXER! Tyhjennä tietokoneesi evästeet ja kirjaudu OMALLA tunnuksellasi sisään."; exit; } } ?>
Edit: koodi päivitetty
Paratiisin poika kirjoitti:
Jos ei ole kirjautuneena, niin tuolla ylhäällä on 2 erroria. Miten ne saisi poistettua ilman mitään suurempia kikkailuja? Minun pääni ei pysty hahmottamaan ratkaisua.
Minusta siellä on kylläkin kolme Undefined index -erroria, tarkoitat varmaan niitä. Ne johtuvat siitä, että et tarkista onko taulukon indeksiä olemssa ennen kuin yrität lukea sitä.
<?php $session_username = $_SESSION["username"]; $session_id = $_SESSION["id"]; $session_uniqueid = $_SESSION["uniqueid"];
Saat ne pois tarkistamalla indeksin olemssaolon issetillä.
<?php $muuttuja = isset ($taulukko ["indeksi"]) ? $taulukko ["indeksi"] : "indeksiä ei löytynyt";
Toinen vaihtoehto on laittaa Notice-tason virheilmoitukset piiloon.
Itseasiassa nuo menee piiloon jos positan laajennetut virheilmoitukset käytöstä. Mennäään seuraavaan asiaan. Admin oikeuksilla videon poisto ei hyväksy sql lauseketta. Mikä vika?
<?php include('toppart.php'); $pagename = "Poista videoita"; include('head.php'); if($admin) { echo "<b>Poista videoita</b><br><br>\n"; echo "<form action='remorvevideo.php' method='post'>\n"; echo "Videon id: <input type='text' name='id'><br>\n"; echo "Poiston syy: <input type='text' name='reason'><br>\n"; echo "<input type='submit' name='remorve' value='Poista'>\n"; echo "</form>\n"; if (isset($_POST['remorve'])) { $id = $_POST["id"]; $reason = $_POST["reason"]; $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE id = '$id'"); $kysely->execute(); $rivi = $kysely->fetch(); $name = $rivi["name"]; echo "Olet poistamassa videota <a href='index.php?id={$id}' target='blank'>{$name}</a>, jonka id on {$id}.<br>\n"; echo "Syyksi annoit seuraavan: {$reason}<br>\n"; echo "Oletko varma että haluat poistaa tämän videon?<br>\n"; echo "<form action='remorvevideo.php' method='post'>\n"; echo "Ei <input type='radio' name='remorve' value='0' checked><br>\nKyllä <input type='radio' name='remorve' value='1' /><br><br>\n"; echo "<input type='hidden' value='{$id}' name='id'><input type='hidden' value='{$reason}' name='reason'><input type='hidden' value='{$name}' name='name'>\n"; echo "<input type='submit' name='remorve_check' value='Poista'>\n"; echo "</form>"; } if (isset($_POST['remorve_check'])) { $remorve = $_POST["remorve"]; $id = $_POST["id"]; $reason = $_POST["reason"]; $name = $_POST["name"]; if($remorve = '1') { $kysely = $yhteys->prepare("UPDATE deleted FROM {$dbtable}videos SET deleted='1', remorve_reason='$reason' WHERE id='$id'"); $kysely->execute(); echo "Video {$name} on poistettu onnistuneesti!"; }else { echo "Videota ei poistettu."; } } }else { echo "Tämä sivu on tarkoitettu vain ylläpitäjille!"; } include('bottompart.php'); ?>
Paratiisin poika kirjoitti:
Itseasiassa nuo menee piiloon jos positan laajennetut virheilmoitukset käytöstä.
Juu, mutta ideana ei olekaan se, että aina kun jonkun asian saa poissa silmistä, niin se olisi sitten fine. Ehkä vain kannattaisi tehdä -tossun- ehdotuksen mukaan ja tarkistaa issetillä, onko taulukon indeksi olemassa. Ei ole kovinkaan haastava homma, varsinkin kun tuossa ylemmällä on jo valmis esimerkki.
Paratiisin poika kirjoitti:
Admin oikeuksilla videon poisto ei hyväksy sql lauseketta. Mikä vika?
En edes tiedä, mihin tuolla poistamiseen tarkoitetulla sql-lausekkeella pyrit. Itse en ainakaan näe tuossa järjen häivääkään, en sitten tiedä olenko ainoa...
Edit. Voisit kommentoida koodiasi, jos kerran, et viitsi edes sisentää sitä kunnolla. Miten voit luulla kenenkään pystyvän auttamaan, kun koodia on jumalattomasti ja sitten pyydetään etsimään virhe "jostakin" kohdasta. Samoin kun ei tunne koko tietokantarakennettasi, niin on paha edes yrittää keksiä sitä, että mitä yrität tehdä.
Triton kirjoitti:
Itse en ainakaan näe tuossa järjen häivääkään, en sitten tiedä olenko ainoa...
Minä en vaivaudu edes lukemaan, kun kaikki on kirjoitettu putkeen ilman sisennyksiä. Lukeminen rasittuu, kun kaikki on vain allekkain (tai sitten on sisennyksiä päin puuta).
Paratiisin poika kirjoitti:
Admin oikeuksilla videon poisto ei hyväksy sql lauseketta. Mikä vika?
SQL-lausekkeessa. Lue vaikka Ohjelmointiputkan SQL-oppaasta miten UPDATE toimii. https://www.ohjelmointiputka.net/oppaat/opas.
Edit: Voisit myös lukea miten PDO toimii, etenkin muuttujien välityksen osalta.
(Sama koodi kuin yllä, mod. poisti.)
-tossu- kirjoitti:
Lue vaikka Ohjelmointiputkan SQL-oppaasta miten UPDATE toimii. https://www.ohjelmointiputka.net/oppaat/opas.
php?tunnus=mysqlphp06#rivienmuutos
Luitko tuon? Siellä on hyvä esimerkki UPDATEn käytöstä.
Tuli kyllä jo aikaisemmin varsin selväksi, että missä kohtaa se virhe on. Edelleen ihmittelen, että mitä tuolla sql-lausekkeella edes yrität tehdä... Onko sinulla olemassa edes kannassasi tuollaista taulua, kuin 'deleted' ja mitä siellä oikeastaan edes on?
Jos oletetaan, että sinulla on videoiden tietoja varten olemassa kannassa taulu 'videos', niin silloin toteuttaisin poistamisen näin yksikertaisesti:
<?php $kysely = $yhteys->prepare("DELETE FROM videos WHERE id = ?"); $kysely->execute(array($id)); // Asetetaan video-id:n arvo lausekkeeseen ?>
Tai jos, et halua poistaa tietoja kokonaa, vaan tuolla 'videos'-taulussa
olisi sarake nimeltään esim. status, jolle voitaisiin antaa boolean-arvot true tai false sen mukaan onko video "olemassa". (Sitten vain haet select-kyselyllä ne videot jossa tuon sarakkeen arvo on true ja tulostat ne sivuille).
Tässä tapauksessa videon poistaminen voitaisiin hoitaa seuraavasti:
<?php $kysely = $yhteys->prepare("UPDATE videos SET status = ? WHERE id = ? LIMIT 1"); $kysely->execute(array(false, $id)); // Asetetaan muuttujat lausekkeeseen ?>
Jos kerran tiedät suunnilleen missä kohtaa koodia se vika on, niin silloin on aivan turha postata koko koodia. Tosin taitenee tämä kaikki mennä kuuroille korville, joten en edes tiedä, että miksi näen vaivaa...
kiitoksia tuosta. Tuolla saan koodin korjattua. Ei mennyt kuuroille korville.
Joo. Nyt toimii tuo videoiden poisto ja poiston poisto, sekä käyttäjien esto ja estojen poisto. Kiitos. Katson suraavan ongelman...
Ongelma on yksinkertainen ja uskon että se voidaan hoitaa css koodilla. Ongelma on videosivuilla, ja nämä kuvat kertovat ongelman:
Ongelma johtuu todennäköisesti siitä, että olet tehnyt sivun taulukkotaitolla. Taulukon viereiset soluthan ovat aina samankorkuisia.
Ongelman voi varmasti korjata CSS:llä, eri asia on tukeeko vanhemmat selaimet sitä. Toinen vaihtoehto on laitta solun sisälle div ja määritellä border sille, eikä td:lle.
Suositeltavinta olisi kuitenkin, että luopuisit taulukkotaitosta kokonaan.
En osaa diviä oikein käyttää kunnolleen tuossa, koska jos nyt vaikka esimerkkinä MediaWikin ohjelmisto. On erittäin erittäin erittäin vaikeaa saada sivun otsikkoa "Väärennetyksi" niin, että se olisi samanlainen joka selaimella. Erittäin vaikeaa.
Testaan laittaa tuon div tagin td tagin sisään. Kiitos.
Edit: Korjattu. Sivuilla oleva videonkatsomislaskuri on nyt näin:
Kirjoita sivulle "$katsomis_määrä"; Muokkaa tietokantaa { aseta katsomismäärään 1 lisää.
Kannattaisiko se mielummin tehdä näin päin:
Muokkaa tietokantaa { aseta katsomismäärään 1 lisää. Kirjoita sivulle "$katsomis_määrä";
Haluaisin mielipiteenne...
Paratiisin poika kirjoitti:
Kannattaisiko se mielummin tehdä näin päin:
Eihän sillä ole mitään väliä miten päin tuon tekee.
No on sillä hieman. Jos sen tekee ekalla tavalla, niin sitten tietokanta sanoo esim 5 mutta sivu 4. Jos tekee toisinpäin niin tietokanta sanoo esim 5 ja sivu sanoo MYÖS 5.
Siinä tulee tuollaisenaan se yhden katselijan ero. Loogisin lienee jälkimmäinen, joskin muuttujia ei tarvitse turhaan ympäröidä aina hipsuilla, ei se sisältö ilman niitä minään hattivatteina tulostu. Tietoa ei sitten tarvitse hakea uudestaan tietokannasta, vaan se sama +1-operaatio ohjelmassa kuin, mikä suoritetaan sinne tietokantaan, on ns. riittävän tarkka.
Paratiisin poika kirjoitti:
Jos sen tekee ekalla tavalla, niin sitten tietokanta sanoo esim 5 mutta sivu 4
Mikäli tuo häiritsee voihan siihen muuttujaan lisätä yhden tulostuksessa.
Kiitos. Tahtoisin uploadin toimivammaksi. Nyt se ei ota yleisesti ottaen oikeita videoita. Miten saan noilla ini_set() functioilla sallittua suuremman tieodonmäärän vastaanottamisen ja suurempien tiedostojen tallennuksen ilman ftp:tä? En löytänyt ymmärrettävää vastausta php.net:in sivuilta.
Paratiisin poika kirjoitti:
Miten saan noilla ini_set() functioilla sallittua suuremman tieodonmäärän vastaanottamisen ja suurempien tiedostojen tallennuksen ilman ftp:tä?
Et mitenkään, suurin sallittu koko määritellään php.ini-tiedostossa.
Okei. Teen tuon sitten ftp:llä. Mutta nyt menin säheltämään. Oli tarkoitus laittaa tuo copyright palkki alas. sitten löysin koodin. Ehdin sitten soveltaa sitä jo pääsivulleni http://vjgo.arkku.net. Huonostihan siinä kävi. Osaako joku kertoa miten saan tuon nyt pysymään siellä alhaalla eikä seuraamaan sivua?
Paratiisin poika kirjoitti:
Osaako joku kertoa miten saan tuon nyt pysymään siellä alhaalla eikä seuraamaan sivua?
Olisikohan "position: fixed;" sitä, mitä haet?
Paratiisin poika kirjoitti:
Okei. Teen tuon sitten ftp:llä
Tarjoaako arkku.net tuollaista mahdollisuutta? Olen melko varma ettei tarjoa, ja vaikka tarjoaisikin sinullahan on vain 50Mt sivutilaa, sillä ei paljon videoita hostailla.
Siirrän tuon softan omalle palvelimelleni kunhan faija etsii eka ajurit ku ei netti toimi. Itse en ole kiinnostunut koneiden asennuksesta ja säätämisestä. Koneista pidän vain siksi, että niillä voi tehdä nettisivuja ja minä saan tyydytystä kun onnistun tekemään jotain toimivasti koneella.
Edit: Huomasin seuraavaa:
ID:
background: url('jee.png');
class:
backgraund-image: url('jee.png');
Edit: Ei ollu fixed se mitä etin:
Paratiisin poika kirjoitti:
Siirrän tuon softan omalle palvelimelleni kunhan faija etsii eka ajurit ku ei netti toimi.
No sittenhän voit muokata php.ini:ä. Kuinka nopea nettiyhteytesi muuten on ulospäin? Millään koti-ADSL:llä ei kannata edes yrittää hostia videoita.
Paratiisin poika kirjoitti:
Edit: Huomasin seuraavaa:
En kyllä tajunnut, mitä huomasit.
Edit:
Paratiisin poika kirjoitti:
Edit: Ei ollu fixed se mitä etin
Halusitko sitten tätä: http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page ?
Jos on sulla vaikka koodi <div class="jee">, ei tämä css toimi:
background: url('jee.png');
Paratiisin poika kirjoitti:
Jos on sulla vaikka koodi <div class="jee">, ei tämä css toimi:
background: url('jee.png');
Sitten selaimessa on kyllä joku ihme bugi, kyllä tuon pitäisi toimia class:illa, jos se toimii ID:lläkin.
No tää on tällainen Win 2000 ja selain Mozilla. Tosin olen potkinut konetta ku se ei oo toiminu. Tosin ei sen html koodiin pitäis vaikuttaa...
-tossu- kirjoitti:
Halusitko sitten tätä: http://matthewjamestaylor.com/blog/...g-footers-at-the-bottom-of-the-page ?
Kyllä.
Ei. Minulle suositeltiin olemaan tekemättä tuollaista. Kiitti kuitenkin. Kiitos kaikille tähän astisesta avusta. Pian julkaisen softan sivuillani, ja voitte olla varmoja että putka ja jotkut saavat nimensä softan copyright filuun!
http://vjgo.arkku.net/mediaplayer/copyright.txt:
Tätä tiedostoa ei saa muuttaa eikä poistaa ilman lupaa.
VJGO Tube software on tekijänoikeussuojattu ja se on lisenssoitu GNU General Public License:llä.
Eikös tuo copyrights.txt:n muokkaamis- ja poistamiskielto ole vastoin GPL:n ehtoja? En ole varma, mutta luulisin niin. Miten siinä tapauksessa, että joku muokkaa tuota sinun ohjelmaasi, toimitaan? Silloinhan nimenomaan pitää mainita, että on muokannut ohjelmaa.
Eiköhän tuohon omalla sivullasi julkaisuun riitä pelkkä lisenssifilun kopiointi siihen pakettiin ja tiedotus millä lisenssillä on julkaistu.
Tarkoitus tässä on se, että saan julkaista niiden nimet tuolla, jotka ovat auttaneet VJGO Tube video software version 1.1 ohjelman tekemisessä eniten.
Paratiisin poika kirjoitti:
Tarkoitus tässä on se, että saan julkaista niiden nimet tuolla, jotka ovat auttaneet VJGO Tube video software version 1.1 ohjelman tekemisessä eniten.
Ok.
Miksi muuten aiot sulkea VJGO Tuben?
Miten niin aijon sulkea VJGO Tuben? En ole missään sanonut aikovani sulkea sitä. Tai sitten joku mursi tietoturvan. Käyn katsomassa...
Edit: Ei tuolla missään ole tuollaista tekstiä. Ja Pertti, kuka oletkin. Plussaa sulle ku tuon teit. Nyt voin laittaa sinne elsellä e tulostaan sukupuoleksi - merkin :D
Paratiisin poika kirjoitti:
En ole missään sanonut aikovani sulkea sitä.
Käsitin sitten väärin.
Paratiisin poika kirjoitti:
Ei. Minulle suositeltiin olemaan tekemättä tuollaista.
Luulin sinun tarkoittavan, että joku kielsi sinua pystyttämästä omaa serveriä.
Tarkoitin että Raakaliha kertoi minulle että on huono idea laittaa Copyright palkki aina sivun alalaitaan. Antoi linkinkin. En muista sitä, mutta voin hakea koska muistan aiheen...
https://www.ohjelmointiputka.net/keskustelu/
Muutin video sivun niin, ettei se ole enään index.php?id=jotakin vaan watch.php?v=jotakin. Lisäksi tulen laittamaan jollain konstilla samankaltaisia videoita palkin tuonne sivulle kuten youtubessa.
Edti: En löydä mitään, mikä auttaisi nyt. Jos esimerkiksi joku kattoo videoo Mc Stepa - Lastenlaulu, niin sivulla pitäs ola linkkejä videoihin, joiden nimessä on 1 tai useampi näistä:
Mc, Stepa, Lastenlaulu
Ja ensimmäisinä jotkut videot tyyliin "Mc Stepa - Naiset" (videota ei ole mutta jos olisi...)
Millä lähtisin liikkeelle?
Edit: Lisään tuon kyseisen videon sivulle kohta.
Edit: Video lisätty.
Sulla on vissiin oikeudet ladata tuo Stepan biisi tuonne? Teostot kunnossa?
No mietin vaan et onko YouTubella oikeuksia sitten pitää siellä noita musiikkeja... Enpä usko sen keränneen kaikilta tyypeiltä llupaa niihin jokka noi biiiiiiiiiiiiiisit on jehny. lol.
Paratiisin poika kirjoitti:
No mietin vaan et onko YouTubella oikeuksia sitten pitää siellä noita musiikkeja...
Ei varmasti ole, mutta musiikin YouTubeen laittajallahan ne oikeudet pitää olla.
Ääh. Ihan sama. Miten mie saan tuon sivuvalikon toimimaan?
Edit: Toinenkin ongelma. Tein unhtml() function. Se ei toimi. Mikä vikana?
<?php function unhtml($unhtml) { $unhtml = str_replace("<", "<", $unhtml); $unhtml = str_replace(">", ">", $unhtml); $unhtml = str_replace('"', "″", $unhtml); $unhtml = str_replace("'", "′", $unhtml); $unhtml = stripslashes($unhtml); }
Käyttö:
<?php $sana = "<b>Lihavoitu</b> MOI!" unhtml("$sana");
Oletko kuullut htmlspecialchars-funktiosta?
Funktion ongelma. Se ei palauta mitään.
Olen kuulllut htmlspecialchars() functiosta, mutta en tahdo sitä. Katson saanko 1 taval ton toimiin, ja jos en saa, tuun kertoon siitä. Miten saan sen sivuvalikon toimimaan. Mistä lähteä liikkeelle?
Edit: Ei toimi. :( Miten korjata?
Tyhmä koodari kirjoitti:
Tiedän kyllä oikean tavan, mutta haluan silti tehdä oman purkkaviritelmän, jotta saisin sivuilleni pari uutta tietoturva-aukkoa ja muuta bugia (ja jotta koodi olisi vielä hitaampikin).
Järkeäkin saa käyttää.
...
<?php function unhtml($unhtml) { $unhtml = str_replace("<", "<", $unhtml); $unhtml = str_replace(">", ">", $unhtml); $unhtml = str_replace('"', "″", $unhtml); $unhtml = str_replace("'", "′", $unhtml); $unhtml = stripslashes($unhtml); return $unhtml; } $sana = "<b>Lihavoitu</b> MOI!"; echo unhtml("$sana");
Keywords- ja artistihaku:
<?php # Sivulle liitettäessä poista tämä osio, muuttujat haetaan muualta include("toppart.php"); $name = "Mc Stepa - Lastenlaulu"; //nykyisen videon nimi $curid = 666; //nykyisen videon id # Alku $maxvideos = 10; //maksimimäärä videoita luettelossa $maxvideosartist = 5; //maksimimäärä videoita tietyltä artistilta $results = array(); //tulokset $formerids = array($curid); //tarkistus, ettei samaa videota tule kahdesti, saman tien nykyisen videon id if(strstr($name, '-')) { //jos nimessä on viivamerkki $parts = explode('-', $name, 2); //jaetaan viivan kohdalta kahteen osaan if(preg_match('/[A-Za-zÅÄÖåäö]/', $parts[1])) { //jos jälkiosa sisältää kirjainmerkkejä //haetaan ensimmäisellä osalla alkavia videoita $q = $yhteys->prepare("SELECT * FROM videos WHERE name LIKE ?"); $parts[0] = str_replace('%','',$parts[0]); //turhat prosenttimerkit pois $q->execute(array($parts[0].'%')); //liitetään max 5 videota $i = 1; while($row = $q->fetch()) { if(!in_array($row['id'],$formerids)) { //tarkistetaan, ettei video ole jo luettelossa $results[] = $row; $formerids[] = $row['id']; //estää 1. luettelon videoiden esiintymisen 2. luettelossa $i++; if($i > $maxvideosartist) break; //tulosten määrän rajoitus } } } } //pilkotaan nimi välilyöntien kohdalta, mutta hyväksytään ainoastaan kirjainmerkkejä sisältävät $keywords = array_values(preg_grep('/[A-Za-zÅÄÖåäö]/', explode(' ', $name))); //poistetaan turhia merkkejä $keywords = str_replace('%','',$keywords); //muodostetaan sql-kysely $i = 0; $querytext = 'SELECT * FROM videos'; while($i < count($keywords)) { if($i == 0) $querytext = $querytext." WHERE name LIKE ?"; else $querytext = $querytext." OR name LIKE ?"; $i++; } for($i = 0; $i < count($keywords); $i++) { $keywords[$i] = '%'.$keywords[$i].'%'; } //haetaan videot $q = $yhteys->prepare($querytext); $q->execute($keywords); //liitetään tulostaulukkoon $i = 1; while($row = $q->fetch()) { if(!in_array($row['id'],$formerids)) { //tarkistetaan, ettei video ole jo luettelossa $results[] = $row; $i++; if($i > $maxvideos) break; //tulosten määrän rajoitus } } # Listausesimerkki echo '<ul>'; foreach($results as $row) { echo '<li><a href="watch.php?id='.$row['id'].'">'.htmlspecialchars($row['name']).'</a></li>'; } echo '</ul>';
Jos tuo on jostain kohti lyhennettävissä, olisin mielellänikin tietoinen.
Kiitos. Olet taitava. :D
Edit: Ei toimi nyt tää...
http://vjgo.arkku.net/mediaplayer/test.php on php filu
http://vjgo.arkku.net/mediaplayer/testi.txt on lähekoodi filu
Yksi mieleeni tuleva ratkaisumalli hakuun olisi tällainen:
<?php $nimi = "xyz"; // Poimitaan tekstistä kirjaimia sisältävät osat. preg_match_all("/[A-Za-zÅÄÖåäö]+/", $nimi, $sanat); $sanat = $sanat[0]; // Muodostetaan jokaista sanaa varten IF, joka palauttaa // osuman kohdalla pituuden ja muuten nollan. $haku = array(); foreach ($sanat as $sana) { $pituus = strlen($sana); $haku[] = "IF(xyz LIKE '%$sana%', $pituus, 0)"; } // Kootaan osumien summa. $haku = implode(" + ", $haku); // Varmistetaan, että on edes jokin hakuehto. if (empty($haku)) { $haku = 0; } // Muodostetaan kysely, järjestetään osuma-arvon mukaan. $kysely = "SELECT xyz, ($haku) AS arvo FROM taulu ORDER BY arvo DESC";
(En testannut, mutta eihän tuo suoraa kopiointia varten olekaan.)
Paratiisin poika kirjoitti:
Edit: Ei toimi nyt tää...
http://vjgo.arkku.net/mediaplayer/test.php on php filu
http://vjgo.arkku.net/mediaplayer/testi.txt on lähekoodi filu
Olit tunkenut {$dbtable}-kohdan hipsujen (') väliin, korjaantuu lainausmerkeillä ("). Korjasin suoraan test.php:een.
Kiitos. Olen jo muokkaamassa tuota kuvalliseksi ;)
Edit: Toimii todella hyvin. Vielä pientä viilausta vaan :D Kiitos.
Edit: Toimiiko mun palvlein enään ollenkaa? Tais mennä tukkoon...
Edit: Nyt toimii taas. huh huh
Koska tämä aihe on sellainen, että jos joku on kiinnostunut mitä kirjoitin tänne, niin tulee tähän aiheeseen, niin kerron tässä erään jutun:
Olin tänään koulussa atk luokan koneella. Olin putkassa ja kirjautuneena sisään. Asetuksissani määritellään ettei istunto lopun selainta suljettaessa. Ja koulussa ollessani koneella se jäi jumiin eikä enään sammutuksen jälkeen käynnistynyt. Tällä ajan takaa sitä, että tunnukseni jäi sinne päälle. Eli jos minulta alkaa tulla tyhmää kommenttia, se ei ole minulta oikeasti. Hyvin epätodennäköistä mutta sanoimpa vaan.
Sitten. Tuo vjgo Tuben video sivu alkoi ärsyttämään minua kun siellä oli kaikki missä sattuu, joiten poistin monta table tagia sieltä. Nyt se näyttää suorastaan kammottavalta. Mutta millä hitolla minä sen nyt saan korjattua oikein? Videosoitin on oikealla paikalla samoin kuin h1 tagilla määritetty otsikko ja videonpoistoformi (only admins see). Kaikki muu onkin sitten missä sattuu (bottompart.php mukaanlukien). Miten korjaan tuon?
Paratiisin poika kirjoitti:
Tällä ajan takaa sitä, että tunnukseni jäi sinne päälle.
Eikö sitten kannattaisi yksinkertaisesti vaihtaa salasana? Tuollaiset selitykset eivät varmasti pelasta tilannetta, kun on tunnettu tosiasia, että sinulta tulee välillä tyhmää kommenttia ihan itseltäsikin.
Paratiisin poika kirjoitti:
Miten korjaan tuon [ulkoasun]?
Jospa nyt ihan ensiksi opettelisit käyttämään tavallisia HTML-elementtejä (p, div, dl, dt, dd) ja CSS-tyylejä (margin, padding, float). Suunnittele ulkoasu pala kerrallaan: sijoittele ensin pelkät tyhjät laatikot sivun eri osille (erityisesti videolle ja sen tiedoille) ja lisää sitten laatikoihin yksitellen sisältöä.
http://vjgo.arkku.net/mediaplayer/
Huoh. Tiedän että teen kaiken tyhmässä järkässä, mutta ongelma on se, että en jaksa olla kauaa kiinnostunut samasta asiasta...
Paratiisin poika kirjoitti:
Huoh. Tiedän että teen kaiken tyhmässä järkässä, mutta ongelma on se, että en jaksa olla kauaa kiinnostunut samasta asiasta...
Ehkä sitten kannattaisi jättää nämä hommat väliin tai tehdä pienemmissä erissä?
No ainoa mistä tykkään on Ohjelmointi.
Osaako joku kertoa miten saan tuon näyttään fikkulta ilman että joka selaimelle ja näytöölle pitää tehdä oma tyyli?
(Mod. huom: Pidä nuo ala-arvoiset alapääjuttusi poissa tältä sivustolta.)
YouTuben ulkoasua kloonattaessa voi ottaa mallia YouTubesta.. siivottuna näyttää suurin piirtein tältä:
<html> <head> <style type="text/css"> #page { #page{margin:0 auto} } #baseDiv { position:relative; width:970px; margin-left:auto; margin-right:auto; padding:0 5px 25px 5px } #homepage-main-content { float:left; clear:left; width:625px; margin-top:5px } #homepage-side-content { float:right; clear:right; width:300px; margin-top:5px; white-space:normal } </style> </head> <body> <div id="page"> Yläosa </div> <div id="baseDiv"> <div id="homepage-main-content"> Vasen </div> <div id="homepage-side-content"> Oikea </div> </div> </body> </html>
Nyt olen melkein jo saanut ongelman korjattua videosivulta. Enään pitäisi saada alaosaan tuo copyrightpalkki ja sitten tuo samankaltaisia juttu alkamaan vasta info laatikon jäläkehen...
Edit: Voisitteko auttaa?
Edit: Enään alapalkki korjattavana...
JEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!!!!!!!
Korjattu! JEEEEEEEEEEEEEEEEEEE!!!!
Millä teen jonkun tällaisen systeeman?
$kirjainten_maara = laskekirjaimet($videonselite); while($kirjainten_maara = 30) { echo "$videonselite"; }else { echo "$videonselite<br>"; } if($kirjainten_maara = <30) { ää ei jaksa }
Eli selvennettynä: Miten saan tehtyä tuonne koodiin niin, että kun videon selitteessä on yli 30 kirjainta, niin aino 30 kirjainta ja sitten <br> tagi. taas 30 kirjainta ja <br> tagi...
Käytä str_splittiä ja sen jälkeen implodea. Imploden käytöstä voit ottaa mallia Metabolixin koodista.
Löysin ärsyttävän bugin tuosta samankaltaisia videojutusta.
http://vjgo.arkku.net/mediaplayer/watch.php?v=36
Tuon videon nimi on Lord Est - Keho on mun temppeli.
Samankaltaisia videoita ovat seuraavat:
Lentokoneen rakenne
Kellon rakenne
Playstation 3 -konsolin rakenne
Tummenuksista huomaa mikä on vikana. Köh köh...
Jos et muuta keksi, niin laita vaikka hakusanan ympärille välilyönnit (-> silloin haetaan kokonaisia on-sanoja).
Tahdoin vain kertoa tästä teille. Tuo koodi on minusta helppo muokata (ainakin se näytti siltä. En ole testannut mitään suurempaa...)
Edit: WOOOOOOOOOOOT! Tää meni jo viidennelle sivulle :P
Putkan pisin aihe sisältää 13 sivua. :)
Tekstin katkaisuun ratkaisu: https://www.php.net/manual/en/function.wordwrap.
Tod offtopic:
13 sivua!?
Saanko linkin tuohon kyseiseen keskusteluun
Back to ontopic:
Kiitoksia Metabolix.
Vautsi. Tuolle suoritukselle nostan hattua. Tämän aiheen elinaikana (kuukadenhan nää elää täydellisesti) ei onnistuta tuota tekemään ilman spammimista. Vautsi!
Nyt olisi tarkoitus tehdä AJAX koodilla kommentointiformi. Kunnolla haastetta nyt...
Ei sillä AJAXilla sitä formia tehdä. HTML:llä se muotoillaan sinne, AJAXilla voi tehdä kaikenlaisia tarkistuksia.
Taroitin että kommentointi. Koska videota kuunnellessa halutaan postata kommentti, olisi kiva ettei videon pylriminen ala alusta, joten jos AJAXilla on mahdollista tehdä samaan aikaan kommentin tarkistus ja sen tietokantaan tunkeminen niin olisi mahtia...
Laiskana voit käyttää iframe. Ps älä. Ajax käytetään yleensä vain vaihtoehtoisena ratkaisuna, koska esim käyttäjällä voi olla js pois päältä. Minua ainakin ärsyttää sivut jotka ei toimi ilman js, koska se on hyvistäkin syistä joskus pois päältä. Ps troll
Muttaku juutube käyttää ajaxia vissiin siinä kommenttijutussa. Sitäpaitti esim mun videoplayeri ei toimi ilman js.
VJGO Tube Version 1.1 (BETA) julkaistu! Toivoisin kommentteja.
Ääkköset säännöllisissä lausekkeissa not wörk.
Eli missä eivät toimi? Kommentoinnista tiedän joo...
VJGO Tuben BETA kirjoitti:
VJGO Tuben BETA version on tarkoitus kopioida YouTube.
Paljonko tarvitaan tallennustilaa?
öhöm. En tiedä. Yksi kaverini sanoi että YouTubessa on 37 tai 38 videota että mitäs pirua...
Paratiisin poika kirjoitti:
Yksi kaverini sanoi että YouTubessa on 37 tai 38 videota että mitäs pirua...
Taitaa siellä jokunen enemmän olla :D Joskus vuosi sitten taisi jo olla päälle 120 miljoonaa.
Niimpä...
Nyt on korjattu (omalta sivultani) kommenteista se äöå juttu.
Meikä tekee nyt ominaisuuksia versioon 1.2. Ekana on randomvideo.php sivu, joka arpoo randomiin videoon ja ohjaa sinne sitten. En pysty päässäni kuitenkaan hahmottamaan miten saisin sen toimimaan. Itseasiassa tekisi tässä mielentilassa kirjoittaa tähän parikymmentä kirjosanaa ja sotkea vähän päälle, mutta koska aiemmista kokemuksista tiedän ettei se kannata, jätän sen tekemättä.
Täsä koodi:
<?php include("toppart.php"); $kysely = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE deleted = ? OR deleted = ?"); $kysely->execute(array("0", "")); $i = 0; while ($rivi = $kysely->fetch()) { $i++; $id = $rivi["id"]; $video = rand(1, $i); $kysely2 = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE id = ? AND deleted = ? OR deleted = ?"); $kysely2->execute(array("{$id}", "0", "")); echo "{$video} {$id}<br>"; } #header("Location: watch.php?v={$id}"); ?>
Kävisikös tällainen?
SELECT * FROM {$dbtable}videos ORDER BY RAND() LIMIT 1
Tuolla saat yhden satunnaisen videon tiedot, ja arvonta suoritetaan tietokannassa. Jos tarvitset jonkin where-lausekkeen (ilmeisesti jokin deleted-tsekkaus halutaan?), niin sen voi sijoittaa taulun nimen ja orderin väliin.
Kiitos.
Tuolla videosivulla on nyt tuo infolaatikko. Joissain videoissa hr tagillamtuotetut viivat eivät mene 100% pituudeltaan. Miten tuo hoituisi kuntoon?
Bodyssa taitaa olla marginaalit vielä käytössä? body-lohkoon margin: 0;
Tuolla tyylillä teki siitä vain hirveämmän näköisen.
http://vjgo.arkku.net/mediaplayer/watch.php?v=3
Tuossa esimerkissä tuossa laatikossa missä on lisääjä, aika yms, niin nuo hr viivat menee miten sattuu..
Hmm... Minulla ne viivat ovat kyllä niin kuin ennenkin.
Paratiisin poika kirjoitti:
Tuossa esimerkissä tuossa laatikossa missä on lisääjä, aika yms, niin nuo hr viivat menee miten sattuu..
Miksi ihmeessä siinä laatikossa on table, kun sisältö ei millään tavalla muistutakaan taulukkoa? Eikä tosiaan ole ainoa kohta: sivullasi ei pitäisi oikeasti olla yhtäkään table-elementtiä!
HTML-koodisi perustuu selvästi jonkinlaiseen epämääräiseen räpellykseen ja toinen toistaan pahempiin virheisiin ja purkkaviritelmiin. Nyt oikeasti joko opettele tekemään kunnolla tai lopeta koko projekti.
http://vjgo.arkku.net/mediaplayer/viivat.bmp
Soft Pop Nallehiljaa!!!!!! L0L
Metabolix: Okei. Mie teen siitä fiksun. Kunhan se vain näyttää hyvältä ilman tableja. ps... Joissain paikois TARVITAAN tableja... tosin yksi niistä on vain ylläpitäjille :D
Paratiisin poika kirjoitti:
Kunhan se vain näyttää hyvältä ilman tableja.
No sehän riippuu tasan tarkkaan omista taidoistasi.
Paratiisin poika kirjoitti:
Joissain paikois TARVITAAN tableja
Niin, nimittäin sellaisissa paikoissa, joissa on riveistä ja sarakkeista muodostuva ruudukko. Putkapostin tulostaulu on hyvä esimerkki järkevästä taulukosta. Taulukko ei ole sivun osien asettelua varten.
Eihän noilla diveillä saa ulostettakaan aikaan. Ei hemuli. Yhyy. En tykkää divistä noin. Miksi on näin vaikeaa taas?
Hienoa, yritit melkein kymmenen minuuttia. Siinä ajassa oletkin jo oppinut kaiken mahdollisen nettisivujen teosta ja voit perustellusti sanoa, että tekniikka on huono!
Voin myöntää, etä minun mielestäni table ei ole hyvä tapa asetella asioita, mutta se on helppo ja tästä syystä käytän sitä.
Edit: Entäs ne hr viivat?
Jos viitsisit vähän debugata asiaa, näkisit, että ne hr-viivat vastaavat leveydeltään niiden ympärillä olevaa taulukkoa. Jos siis sivu olisi tehty muuten kunnolla, myös hr-viivat menisivät oikein. Nytkään vika ei ole viivoissa vaan siinä huippuhelpossa taulukossasi – eli kannattaa varmaan tehdä siihen jokin huippuhelppo korjaus.
Firebug näyttää koodisi sisennettynä ja voit tarkastella divien käyttäytymistä yleisestikin. Jos käytät Firefoxia niin asenna.
Minullakin kesti (vuosi 2008 muistaakseni) kauan opetella taulukkotaitosta eroon, kuten monista muistakin pahoista tavoista.
Yhden videolinkin voisi tehdä seuraavalla mallilla (ei..suoraan..kopiointiin):
<div style="display:table;"> <div style="display:table-cell;"><img src="http://vjgo.arkku.net/mediaplayer/images/noimage.png" height="73px" width="90px"></div> <div style="display:table-cell; vertical-align:middle; padding:0.8em;"><a href="watch.php?v=2">Tulostimen rakenne</a></div> </div>
hr-viivan voi usein korvata border-bottom -ominaisuudella (erityisesti h1-h6 -tagit). padding- ja margin-ominaisuuksilla saat divit juuri sinne minne haluat. Absoluten liiallisesta käytöstä varoitan jo etukäteen. :)
raakaliha kirjoitti:
<div style="display:table;"> <div style="display:table-cell;"><img src="http://vjgo.arkku.net/mediaplayer/images/noimage.png" height="73px" width="90px"></div> <div style="display:table-cell; vertical-align:middle; padding:0.8em;"><a href="watch.php?v=2">Tulostimen rakenne</a></div> </div>
Kun nyt huonoista tavoista puhutaan, niin CSS:n upottaminen HTML:n sekaan style-attributilla on hyvin huono tapa. Ai niin, ja img-elementin width ja height-attributit ottaa pelkän paljaan numeron ilman yksikköä, lisäksi alt-attribuutti on pakollinen.
img-tagit ovat sammakkomiehen omasta koodista peräisin. Suoraan kopiointiinhan tuo ei ole. :)
Paratiisin poika kirjoitti:
Minusta md5 on ihan tyhmä pelle. Muunnan toiselta sivulta lähetetyn te4kstin md5 functiolla ja tulos on asdf. Teen saman toisella sivulla ja tulos on querty. Ihan samalla tavalla. yhyy.
Jos eräs tyhmä pelle viitsisi vähän debugata tietokantaansa, sieltä varmaan löytyisi eräs rivi, jolla lukee salasanana "md5(tyhmänpellensalasana)" eikä suinkaan sitä MD5-hashia.
Koodissasi on muuten hirveä määrä aivan turhia lainausmerkkejä, joista kannattaa hankkiutua heti eroon. Esimerkiksi kaikki muuttujat, jotka olet kirjoittanut muodossa "{$muuttuja}"
tai "$muuttuja"
, voisi ihan hyvin kirjoittaa suoraan (esim. $muuttuja
), tai jos string-tietotyyppi on välttämätön, voisi kirjoittaa selvemmin (string) $muuttuja
. Näin ehkä löytäisit itsekin virheitä helpommin.
(Edit: poistitkin sitten viestisi.)
Joo poistin kun löysin vian.... :D
Edit: Yleensä nuo on tyyliä echo "{$muuttuja}\n";, ja tuo \n vaatii "" merkit :D
Nyt taisi käydä niin hassusti etteivät tiedostot tahdo näkyä sivullani. YYYYYYYYYYYYYYYYYYYYY
Nyt lähti videita paljonki vegeeeeeeeeee
Ärsyttää
Paratiisin poika kirjoitti:
Joo poistin kun löysin vian.... :D
Edit: Yleensä nuo on tyyliä echo "{$muuttuja}\n";, ja tuo \n vaatii "" merkit :D
Nyt taisi käydä niin hassusti etteivät tiedostot tahdo näkyä sivullani. YYYYYYYYYYYYYYYYYYYYY
Nyt lähti videita paljonki vegeeeeeeeeee
Ärsyttää
senki voi laittaa vaikka
echo $muuttuja . "\n";
tuutti kirjoitti:
senki voi laittaa vaikka
echo $muuttuja . "\n";
Tai
<?php echo "$muuttuja\n";
jolloin säästetään pari merkkiä.
Muotoa {$muuttuja} käytetään yleensä, kun muuttujan kirjaimet sekoittuvat muuhun tekstiin:
<?php $grade = 7; echo "$gradeth grade";
...tuottaa:
grade
...kun taas:
<?php $grade = 7; echo "{$grade}th grade";
...tuottaa halutun tuloksen:
7th grade
raakaliha kirjoitti:
Muotoa {$muuttuja} käytetään yleensä, kun muuttujan kirjaimet sekoittuvat muuhun tekstiin:
<?php $grade = 7; echo "$gradeth grade";...tuottaa:
grade
ja virheen olemattomasta muuttujasta.
Vielä selvennykseksi: Huomautukseni ei suinkaan koskenut merkintää sinänsä vaan sen käyttöä:
<?php // Järkevä käyttötapa, tiedon lisääminen muuhun tekstiin: echo "Paljonko on {$x} + {$y}?"; // Hämäävä ja tarpeeton käyttötapa: $a = "{$b}"; // Paremmin tarkoitusta kuvaava vaihtoehto edelliselle: $a = (string) $b;
Koko huomautus sai alkunsa kysyjän koodin kohdasta, jossa luki seuraavaa:
<?php $kyselypassword->execute(array("md5($new)", "$session_id"));
Tästä luulisi tyhmemmänkin huomaavan virheen, mutta kaikista tyhmimmiltä se varmaan menee iloisesti ohi.
Onko muuten lainausmerkkisysteemi mielekäs tapa merkkijonojen yhdistämiseen:
<?php $x = "äks"; $y = "yy"; $z = "x plus y = $x$y"; // $z = "x plus y = {$x}{$y}";
vaiko
<?php //... $z = "x plus y = ".$x.$y;
Entä taulukoiden suhteen, onko sallittu upotus tuolla tapaa?
<?php echo "Solun 123 sisältö: {$taulukko[123]}"; $teksti = "...{$taulukko[123]}...";
Mielenkiinnosta lähinnä kysyn.
raakaliha kirjoitti:
Onko muuten lainausmerkkisysteemi mielekäs tapa merkkijonojen yhdistämiseen
Kyllä se ainakin selventää koodia tietyissä tapauksissa.
raakaliha kirjoitti:
Entä taulukoiden suhteen, onko sallittu upotus tuolla tapaa?
On sallittu. Tuonkin kokeilemiseen olisi mennyt korkeintaan 30s.
Tiedän että toimii, tarkoitin onko se hyvän tavan mukaista... voi voi... mitäs minä nyt tässä taas lörpöttelen, olen niin yksinäinen, siksi minä sitä koiraakin...
Kiitos näistä viesteistä. Pyrin korjaamaan tietoturvaa näiden viestien avulla. Kiitos.
Onko php:n avulla mahdollista tarkistaa että onko henkilöllä käytössä javascript tai onko tarvittava flash/java player asennettuna tai jotain sellaista? HTML koodein olen jo ilmoituksia laittanut IE ja IE 6 selaimelle :D
Videot eivät nimittäin toimi ainakaan koulun koneella mozillalla :(
Paratiisin poika kirjoitti:
Onko php:n avulla mahdollista tarkistaa että onko henkilöllä käytössä javascript tai onko tarvittava flash/java player asennettuna tai jotain sellaista?
Ei voi, selain ei kerro näitä tietoja pyytäessään sivua palvelimelta.
Javascriptillä voi tarkistella pluginien olemasasoloa.
Jos haluat tarkistaa onko flash käytössä, niin kannattaa tutustua tähän http://code.google.com/p/swfobject/ .
Entä JavaScript? Ei ole sitä joku $GET_BROWSER[] joku juttua käytössäni sitten.
Paratiisin poika kirjoitti:
Entä JavaScript? Ei ole sitä joku $GET_BROWSER[] joku juttua käytössäni sitten.
Se pitäisi onnistua noscriptillä (HTML). Elikkäs:
<noscript><p>Sivusto tarvitsee toimiakseen JavaScriptin tuen.</p></noscript>
En muista, onko noscriptin käyttäminen hyvä tapa mutta noin se kuitenkin pitäisi toimia.
Muttakun pitäisi tehdä niin, että jos js ei käytössä, php härkäsestä kärpäsen, mutta jos on käytössä, niin php tekee härkäsestä mummelin xD
Edit: Seuraava koodi tulostaa tekstin "PHP teki härkäsesä kärpäsen", oli js päällä tai ei
http://stackoverflow.com/questions/121203/how-to-detect-if-javascript-is-disabled
eka linkki googlella
Tuokin sinun pitäisi jo tietää, että miksi noin käy. PHP suoritetaan aina ihan ensiksi, josta tulee tuo sivu ja noscript-tagi. Siis tuon noscript-tagin kohdalla ei ole mitään PHP koodia olemassakaan. Siis ensin $js muutujassa on true, jonka jälkeen siinä on false ja tulostus on sen mukainen.
Tiedän sen. etsin googlella koulussa rataisua, ja tuollainen ohje tuli usemmaltakin sivustolta...
Katsos vain. eihän olisi tarvinnu ku laittaa table tagille widht arvoksi 100% ja viivaongelma onfolaatikossa katos. ohhoh. No... löysinpä ainaski vihdoi ratakisun...
Tietoa:
Kannattaako mielummin käyttää toista sivua liittäessä include(), recuire() vai recuire_once() functiota? Mitä eroa niillä edes on?
Riippuu käyttötarkoituksesta. *Once-komentorakenteet (includet ja requiret eivät siis ole funktioita, joten niitä ei voi käyttää muuttujien kautta) tuovat tiedoston ainoastaan kerran sen sijaan, että tiedosto tuotaisiin jokaisella kutsulla uudestaan. Require-komentorakenteet heittävät tiedoston tuonnissa epäonnistuessaan pahemman laatuisen poikkeuksen, joka keskeyttää ohjelman toiminnan. Includen heittää asiasta varoituksen, mutta ohjelman toiminta jatkuu. Ehkä yleisemmin käytetään requirea kun kuitenkin tiedetään, mitä tiedostoja oma ohjelma tarvitsee.
Okei. Mutta jos teen sivun niin, että joka sivulla on sama tiedosto tuotu, jotta yläosa näkyisi, kuten minun sivullani näin(,):
<?php include("toppart.php"); $pagename = "Sivun nimi"; include("head.php"); echo "Sivun sisältö"; include("bottompart.php"); ?>
niin kannattaako käyttää tuossa tilanteessa functio() vai functio_once() komentoa?
Paratiisin poika kirjoitti:
niin kannattaako käyttää tuossa tilanteessa functio() vai functio_once() komentoa?
functio ()
Functio_once liittää sen tiedoston vain kerran, eli jos sinulla on kaksi functio_once ():a, niin se jälkimmäinen ohitetaan. Sillä kannattaa littää esim. tietokantayhteyden avaamisen sisältävä tiedosto
okei. Kiitos.
-tossu-, selityksesi meni siinä mielessä metsään, että eihän tässä kai olla liittämässä samalle sivulle kahta samaa tiedostoa. Kumpi tahansa siis sopii.
Suosittelen kaikkien tiedostojen liittämistä funktiolla require_once. Lisäksi suosittelen, että myös sivun yläosan tulostaminen ym. tehdään funktiossa. Kokonaisuudesta tulee siis tällainen:
<?php require_once("kaikki.php"); tulosta_ylaosa("Otsikko"); echo "Jee jee."; tulosta_alaosa();
Jos useimmat sivut tarvitsevat suunnilleen kaikkia liitettäviä tiedostoja, voi tehdä yhden tiedoston kaikki.php, joka sitten liittää loput:
<?php # kaikki.php require_once("tietokanta.php"); require_once("tulosta_ylaosa.php"); require_once("tulosta_alaosa.php");
Toisaalta yksittäiset liitokset voi laittaa myös joka tiedostoon erikseen ja säätää jokaisessa tarpeiden mukaan. Tästä on kuitenkin jonkin verran ylimääräistä vaivaa, eikä nopeushyötykään ole merkittävä.
Löytyikö uusimmasta versiosta mitään bugeja/tietoturva-aukkoja?
Paratiisin poika kirjoitti:
Löytyikö uusimmasta versiosta mitään bugeja/tietoturva-aukkoja?
AINA on jokin ominaisuus/aukko
Jos löydätte, voitteko kortoa niistä minulle? Voisin korjata ne
Jokotai kirjoitti:
Paratiisin poika kirjoitti:
Löytyikö uusimmasta versiosta mitään bugeja/tietoturva-aukkoja?
AINA on jokin ominaisuus/aukko
Aikamoinen väite, jotain perusteluja kiitos?
RQ kirjoitti:
Jokotai kirjoitti:
Paratiisin poika kirjoitti:
Löytyikö uusimmasta versiosta mitään bugeja/tietoturva-aukkoja?
AINA on jokin ominaisuus/aukko
Aikamoinen väite, jotain perusteluja kiitos?
Jokotai tarkoitti varmaan Pratiisin pojan tapauksessa.
Macro kirjoitti:
Jokotai tarkoitti varmaan Pratiisin pojan tapauksessa.
En. Aina pystyy murtautumaan jotenkin. Ja oletteko muka nähneet ohjelmaa, joka toimii täysin käyttöjärjestelmän kanssa, koskaan tuottamatta virhettä.
Okei. Etippä tästä koodista joku bugi/aukko, jolla murrat sivuston, jolla se on.
<?php echo "Tätä koodia ei hevillä eikä millään muullakaan murreta :D"; ?>
Koodihan ei ole validia mutta sama se.
Paratiisin poika kirjoitti:
Okei. Etippä tästä koodista joku bugi/aukko, jolla murrat sivuston, jolla se on.
<?php echo "Tätä koodia ei hevillä eikä millään muullakaan murreta :D"; ?>Koodihan ei ole validia mutta sama se.
Tuo voi serverissä sekaantua ja tulos onkin.
Taas täällä putkassa viisastellaan.
Jokotai, itse tässä viisastelet. Jos väität, että kaikissa (mielekkään kokoisissa) sovelluksissa on bugeja, olet väärässä: myös täysin aukotonta koodia voi kirjoittaa. Jos taas tarkoitit, että aina voi sattua koodista riippumaton häiriö (laitteistossa tai muualla ajoympäristössä), olet nokkaviisas: kyseisiä ongelmia ei pidä laskea alkuperäisen koodin syyksi.
Metabolix kirjoitti:
Jokotai... ...olet nokkaviisas
totta
Metabolix kirjoitti:
nokkaviisas
Erinomaisesti vältetty svetisismejä :D
Grez kirjoitti:
Metabolix kirjoitti:
nokkaviisas
Erinomaisesti vältetty svetisismejä :D
No Metabolixhan on melkoinen kielipuristi ;)
:DDD Niitä bugeja ei näytä koodistani löytyvän... Tosin käyttäjäasetusksista en ole varma että toimivatko ne. omalla sivullani ei toimi... passunvaihto khyl toimii. En vain löydä mitään vikaa koodista :(
Paratiisin poika kirjoitti:
Niitä bugeja ei näytä koodistani löytyvän...
Tai sitten kukaan asiasta kunnolla ymmärtävä ei ole viitsinyt edes katsoa tarkemmin, kun koodisi on niin täydellisen rumaa ja sotkuista.
Väärin. Raakaliha on rivittänyt sitä. Voisiko joku pliis katsoa?
Ei pieni koodin kirjoitusasun siistiminen vaikuta siihen, että koko systeemi on rakennettu päin honkia. Jos koodi olisi hyvin suunniteltu ja ohjelmointitavaltaan proseduraalista tai oliopohjaista, olisi helppo tarkistaa pari avainkohtaa ja todeta, onko aukkoja vai ei. Nyt jokaisen sivun koodi on kirjoitettu putkeen ja esimerkiksi kyselyjä muodostetaan joka tiedostossa erikseen, minkä vuoksi tarkistaminenkin vaatisi jokaisen sivun tarkkaa tutkimista erikseen.
??? toppart.php tiedostossa on tärkeät muuttujat, kuten session_id, session_username, ip, browser, yhteys... sitten esim users.php tiedostossa listataan estämättömät käyttäjät hakemalla tiedot myslikannasta koodilla hae se se se ja se sieltä ja järjestä näin. Sitten jos blocked on totta, niin ohita. muuten kirjoita.
Metabolix kirjoitti:
Paratiisin poika kirjoitti:
Niitä bugeja ei näytä koodistani löytyvän...
Tai sitten kukaan asiasta kunnolla ymmärtävä ei ole viitsinyt edes katsoa tarkemmin, kun koodisi on niin täydellisen rumaa ja sotkuista.
Itse en viitsinyt edes alkaa selvittelemään mistä ne viimeisimmät koodin versiot löytyisi. Varmaan tämän ketjun jollain sivulla olisi linkki, mutta ei jaksa etsiä.
Mutta oli miten oli, niin bugien raportoimattomuus ei todista etteikö niitä olisi. Tietty jos bugien löytämisestä olisi tarjolla riittävän hyvä palkkio, niin todennäköisyys bugittomuuteen kasvaisi summan kasvaessa. Jos on joku alle 10000 rivin koodi josta luvataan vaikka miljoona euroa ekalle joka löytää bugin, eikä kukaan ilmoittaudu, niin voisin pitää jo todennäköisenä ettei bugeja ole.
http://vjgo.arkku.net/lataukset.php?id=2
Tuossa on linkki :)
Grez kirjoitti:
Tietty jos bugien löytämisestä olisi tarjolla riittävän hyvä palkkio, niin todennäköisyys bugittomuuteen kasvaisi summan kasvaessa. Jos on joku alle 10000 rivin koodi josta luvataan vaikka miljoona euroa ekalle joka löytää bugin, eikä kukaan ilmoittaudu, niin voisin pitää jo todennäköisenä ettei bugeja ole.
Palkkionmetsästäjät :D
Joo :D Mutta olisi kiva, jos niitä bugeja löytyisi nyt kuitenkin...
Paratiisin poika kirjoitti:
Joo :D Mutta olisi kiva, jos niitä bugeja löytyisi nyt kuitenkin...
Voin tsekkailla niitä tuossa illalla, vaikka viiskymppiä/tunti.
Hmm... Mites saan headereilla tehtyä php tieedostosta js tiedoston?
Lähettämällä headerin Content-Type: application/x-javascript
Tai jopa application/javascript, kuten RFC 4329 ehdottaa. IE vaatii versioon X asti text/javascript-tyypin.
Kiitos.
Kuinka suosittelisitte minun tekevän seuraavan:
Ajon laittaa asetuksiini niin, että voi sieltä valita onko sivun osoitteen perässä .php pääte vai. eli onko watch?v=xxxxx vai watch.php?v=xxxxx
Vai onko tuo mahdollista mahdollistaa kaikille palvelimille .htaccess tiedoston avulla?
Paratiisin poika kirjoitti:
Ajon laittaa asetuksiini niin, että voi sieltä valita onko sivun osoitteen perässä .php pääte vai. eli onko watch?v=xxxxx vai watch.php?v=xxxxx
Vai onko tuo mahdollista mahdollistaa kaikille palvelimille .htaccess tiedoston avulla?
Tuo on mahdollista .htaccess-tiedoston avulla, jos palvelimen ylläpitäjä on sen sallinnut. Tosin ainakin Debianin Apache ymmärtää tuon lyhyemmän muodon oletusasetuksillakin.
Servut.us ei ainaskaan tajua. Vissiin mod revitellä toimisi... Miten ton saa toimiin?
Paratiisin poika kirjoitti:
Vissiin mod revitellä toimisi... Miten ton saa toimiin?
Laittamalla .htaccess tiedostoon:
RewriteEngine on RewriteRule ^watch$ watch.php
Edit: muokkasin koodia hieman
aa. okei. Ainoo vaan et pitää laittaa kaikkiin tiedostoihin tuo juttu :D
Eikös tämä toimi?
RewriteEngine on Rewrite Rule ^$1 $1.php
En testannut, mutta muistaakseni $numero-muuttujilla voi korvata joitain kohtia...
Kiitos. Tuosta on paljon hyötyä.
Macro kirjoitti:
Eikös tämä toimi?
RewriteEngine on Rewrite Rule ^$1 $1.php
Ei.
RewriteRule kirjoitetaan yhteen ja sen ensimmäisen parametrin kuuluu olla säännöllinen lauseke.
RewriteEngine on RewriteRule ^([a-z]+)$ $1.php
"Rewrite Rule" oli kirjoiturvirhe, mutta seuraavaa kohtaa en tiennyt. Ehkä siksi omat viritelmät antaa virheitä.
Kiitos. Tuo toimii oikein hyvin. Nyt saan linkit kauniiksi :DDD
VJGO Tube Version 3.1 (BETA) julkaistu täällä! Kommentteja kaivataan
lainaus:
Lista kaikista videoista löytyy täältä
Mitäpä jos Youtuben kaikki videot listattaisiin yhdellä sivulla?
Macro kirjoitti:
lainaus:
Lista kaikista videoista löytyy täältä
Mitäpä jos Youtuben kaikki videot listattaisiin yhdellä sivulla?
Mitä väliä, kun niitä on toistaiseksi ainakin niin vähän...
ankzilla kirjoitti:
Mitä väliä, kun niitä on toistaiseksi ainakin niin vähän...
Toisaalta olen samaa mieltä, että kun realistisia edellytyksiä ei ole tulla suosituksi videosaitiksi, niin turha panostaa liikaa sen kehittämiseen.
Mutta näin muuten kyllä mielestäni ankea perustelu, että jotain ei kannattaisi tehdä, koska tällä hetkellä sille ei ole tarvetta.
Kun jaksan katsoa <s>ja kopioida</s> Raakalihan foorumisoftasta kuinka voi jaottaa niin, että vain tietty määrä hakutuloksia näkyy sivulla mutta toisella sivulla näkyy lisää, niin teen niin. Esim. http://vjgo.arkku.net/topic.php?id=4&page=1
Tuossa menee kivasti 2 sivulle. Lisäksi kuolema video on ladattu sivuston uploadia käyttäen. Testasin lyhyelläö videolla, joka on muuten itsetekemäni :DDDDDDDDDDDDDDDDDDDDDD Löytyy juubbbatuubasta mun tunnuksel ladattuna W8G7B ja videon nimi Kuolema.avi. Ps. tiedät etteivät html tagit toimi näiussä viesteissä...
Haluaisin kysyä että kun admineille on tuol sivul omia juttuja. Niihin olen jättänyt jotain niinku et formit voi hajoittaa jossain kirjoittamalla niihin ">lol esim niin kannattaisiko tämä estää? Ylläpitoonhan kannattaa iana luottaa vai? Onko se totta että ylläpito on aina oikeassa? Kertokaa minulle!
Kaikki data pitää suodattaa, joka tulee käyttäjältä. Ei kehenkään voi luottaa täysin.
Siis suojaan nuo kaikki... Ja kouluun pitäisi lähteä 09:20... En ehdi :( Yritän kuiteskin. :D Kiitos.
Edit:
Olen suojaamassa ipcheck.php tiedostoa. Se nyt näyttää tietoa VAIN jos haku sisältää pisteen (.) ja edes yhden numeron (0-9). Mutta se estää mikäli siinä on joku kirjain. En kuitenkaan teidä kuinka saisin estettyä erikoismerkit (esim. ,'*"#¤%&&/())==?(/%#&&"&""&%/&"% yms).
ipcheck.php
<?php require("toppart.php"); if($admin) { $ipget = $_GET["ip"]; if(isset($ipget)) { $ipvalid1 = 0; $ipvalid2 = 0; $ipvalid3 = 0; if(preg_match('/[0-9]/', $ipget)) $ipvalid1 = 1; if(preg_match('/[.]/', $ipget)) $ipvalid2 = 1; if(preg_match('/[A-Za-zÅÄÖåäö]/', $ipget)) $ipvalid3 = 1; if($ipvalid1 == 0) header("Location: ipcheck"); if($ipvalid2 == 0) header("Location: ipcheck"); if($ipvalid3 != 0) header("Location: ipcheck"); if($ipvalid1 == 0 && $ipvalid2 == 1) header("Location: ipcheck"); if($ipvalid2 == 0 && $ipvalid1 == 1) header("Location: ipcheck"); } } $pagename = $lang_IP_Check; require("head.php"); if($admin) { echo "<br>\n"; echo "<form action=\"ipcheck\" method=\"get\">\n"; echo " <input name=\"ip\" value=\"$ipget\">\n"; echo " <input type=\"submit\" value=\"IP\">\n</form>\n"; echo "<br>\n"; if(!isset($ipget)) { }else { $kysely1 = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE ip = ?"); $kysely2 = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE ip = ?"); $kysely3 = $yhteys->prepare("SELECT * FROM {$dbtable}videos_comments WHERE ip = ?"); $kysely1->execute(array($ipget)); $kysely2->execute(array($ipget)); $kysely3->execute(array($ipget)); echo "<b>$lang_Users</b>\n"; echo "<table border=1>\n <tr>\n"; echo " <th>$lang_Username</th><th>$lang_ip</th>\n"; echo " </tr>\n <tr>"; while($rivi1 = $kysely1->fetch()) { $ipusername = $rivi1["username"]; echo " <td>$ipusername</td><td>$ipget</td>\n"; echo " </tr>\n <tr>\n"; } echo " </tr>\n</table>\n<br>\n"; echo "<b>$lang_Videos</b>\n"; echo "<table border=1>\n <tr>\n"; echo " <th>$lang_Video</th><th>$lang_Adder</th><th>$lang_ip</th>\n"; echo " </tr>\n <tr>"; while($rivi2 = $kysely2->fetch()) { $ipvideo = $rivi2["name"]; $ipvideoadder = $rivi2["adder"]; $ipvideoid = $rivi2["id"]; $kyselyuser = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE id = ?"); $kyselyuser->execute(array($ipvideoadder)); $riviuser = $kyselyuser->fetch(); $ipvideoadderusername = $riviuser["username"]; echo " <td><a href=\"watch?v=$ipvideoid\">$ipvideo</a></td><td><a href=\"user/$ipvideoadderusername\">$ipvideoadderusername</a></td><td>$ipget</td>\n"; echo " </tr>\n <tr>\n"; } echo " </tr>\n</table>\n<br>\n"; echo "<b>$lang_Comments</b>\n"; echo "<table border=1>\n <tr>\n"; echo " <th>$lang_Video</th><th>Kommentti</th><th>$lang_Sender</th><th>$lang_Time</th><th>$lang_ip</th>\n"; echo " </tr>\n <tr>"; while($rivi3 = $kysely3->fetch()) { $ipcommentvideoid = $rivi3["id"]; $ipcommentadder = $rivi3["sender"]; $ipcomment = $rivi3["comment"]; $ipcommenttime = $rivi3["time"]; $kyselyvideo = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE id = ?"); $kyselyvideo->execute(array($ipcommentvideoid)); $rivivideo = $kyselyvideo->fetch(); $ipcommentvideoname = $rivivideo["name"]; echo " <td><a href=\"watch?v=$ipcommentvideoid\">$ipcommentvideoname</a></td><td>$ipcomment</td><td><a href=\"user/$ipcommentadder\">$ipcommentadder</a></td><td>$ipcommenttime</td><td>$ipget</td>\n"; echo " </tr>\n <tr>\n"; } echo " </tr>\n</table>\n"; } }else { echo $lang_ThisPageIsOnlyForAdmins; } require("bottompart.php"); ?>
Macro kirjoitti:
Kaikki data pitää suodattaa, joka tulee käyttäjältä. Ei kehenkään voi luottaa täysin.
Ja ennen muuta kaikki data pitää tulostaa niin, ettei se hajota mitään. Jos ei ole tarkoitus, että formilla pystyy lisäämään HTML:ää (ja yleensä sen ei pitäisi olla tarkoitus!), teksti pitää käsitellä tulostusvaiheessa niin, että se näkyy sivulla pelkkänä tekstinä.
Minä en käytä mitään erikoismerkkejä erottimina, koska minä käytän yleensä tietokantaa kun teen softia. Paitsi jos erottimiksi lasketaan ul ta td ja tr tagit niin sitten. Mutta miten estän kaikki muut merkit paitsi numerot ja pisteen?
Tee mieluummin siten, että sallit vain numerot ja pisteen ([0-9.]).
Paratiisin poika kirjoitti:
Se nyt näyttää tietoa VAIN jos haku sisältää pisteen (.) ja edes yhden numeron (0-9). Mutta se estää mikäli siinä on joku kirjain. En kuitenkaan teidä kuinka saisin estettyä erikoismerkit
Seuraava lauseke sallii vain numerot ja pisteen, muttei kylläkään vaadi yhtään numeroa.
^[0-9\.]+$
Sinuna käyttäisin vielä tarkempaa lauseketta, joka sallii vain neljä pistein erotettua numeroa.
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$
Entäs IPv6?
Miten tuon saa edes toimimaanmnn?
Minkä tuon? Tarkoitatko säännöllisiä lausekkeita? Tutki Putkan ohjeita, siellä on aika hyvä opas.
Okei... Yritän randomilla tuota.
Okei sain toimimaan. Kiitos :D
Onko kellään mielipiteitä softani nykyiusistä tyyleistä? Kaivataanko jotain? LKertokaa pliis. Tarvitsen mielipitetiä!
Ja kirjoitetun tarkistamista...
??
Pientä typotusta :D.
Missä?
Paratiisin poika kirjoitti:
Missä?
Paratiisin poika kirjoitti:
Onko kellään mielipiteitä softani nykyiusistä tyyleistä? Kaivataanko jotain? LKertokaa pliis. Tarvitsen mielipitetiä!
Höh. Tiedän kylklä. M;utta onko sivuustooni mitään liittyvää?
Paratiisin poika kirjoitti:
Höh. Tiedän kylklä. M;utta onko sivuustooni mitään liittyvää?
Oikeesti, onkse niin vaikeeta lukee viesti ennen lähetä-napin painamista?
Noh, heitän pari rakentavaa ehdotusta: hävitä se kahen megan rajotus (jota muuten ei edes lue missään, eikä liian ison videon upattuaan saa minkäänlaista viestiä). Siihen ei saa edes musiikkibiisiä, saati sitten videota. Toisekseen: laita kaikki videot pyörimään siinä flässisoittimessas (oletan, että sun tarvii serveripäässä transkoodata ne sopivaan muotoon). Tykkään kyl kovasti download-linkeistä, mut en sillon ku ne näyttää play-napeilta.
Blaze kirjoitti:
Paratiisin poika kirjoitti:
Höh. Tiedän kylklä. M;utta onko sivuustooni mitään liittyvää?
Oikeesti, onkse niin vaikeeta lukee viesti ennen lähetä-napin painamista?
Niipmä on se ärsytväää kun ei eddes viestäi vaivaidu likemaam :D
Se koon rajoitus ei ole minun vikani. En ole sitä määritellyt missään. Se on palvelimen vika. En jaksa osata korjata. Enkä myöskään tiedä miten juubbatuubba muuntaa videot swf tiedostoihin? Ihan skifii...
Paratiisin poika kirjoitti:
Enkä myöskään tiedä miten juubbatuubba muuntaa videot swf tiedostoihin? Ihan skifii...
Ei YouTube muunna videota swf-muotoon. Videot ovat FLV, MP4, WebM tai 3GP -tiedostoissa.
aijaa. No en teidä miten ne niihinkään muutetaan...
Et vieläkään oppinut, foorumi ei ole IRC :)
Joo ei ole, muttakun en osaa :(
miten se tapahtuu?
Paratiisin poika kirjoitti:
miten se tapahtuu?
Vaikka FFmpeg-ohjelmalla, mutta ennen kuin alat tehdä mitään videon enkoodausta sivuillesi, varmista että webhotellissasi voi suorittaa ohjelmia ja että sinne on asennettu FFmpeg tai muu vastaava sovellus. En usko, että kovin moni maksullinenkaan webhotelli tukee tuollaista, saati sitten ilmainen.
:( Tivottavasti saan toimimaan kuiteski ton tai jotnai. Eiköä se oonniasstu ophp:llä? vaikka headereiden content typellä tai jollaki?
Paratiisin poika kirjoitti:
:( Tivottavasti saan toimimaan kuiteski ton tai jotnai. Eiköä se oonniasstu ophp:llä? vaikka headereiden content typellä tai jollaki?
Opettelisit kirjoittamaan.
Okei...
Asensin viuhkan palvelimelle tuon version 3.1 sellaisenaan jotta voin tarkasetella vikoja. Samalla tahdon tietää miten paljon uploadi vetää. Jos joku viitii niin voi testata latausta isoilla videoilla. Miten iso menee?
Userpagella linkivalikon logout ja login on sit rasittavia ku ne ei toimi :(
http://vjgo.viuhka.fi/vjgotube/
Edit:
VJGO Tube Version 4.1 (BETA) julkaistu!
Kommentteja kaivataan!
2,7 meganen menee läpi, 8,2 meganen ei. Ei oikeen taho löytyä noin pieniä videoita testattavaks :P
Viedoeditoreja on olemassa... en ite voi lkäyttää käyttiksen takii
Mitä tekee palvelulla, johon pystyy lähettämään vain alle 3 megaisia videoita?
en tiedä
se on kesekn. Muutan sen jotenkin ottamaan vastaan 4 h pitusiiv videoita sori typo asdf
Lebe80 kirjoitti:
Mitä tekee palvelulla, johon pystyy lähettämään vain alle 3 megaisia videoita?
Ei mitään.
Ei teekään. Laitan tiedoston check_working.php ja liitän sen toppart.php tiedostoon. Tuo kyseinen itiedosto tarkistaa mitkä tarvittavat funktiot toimivat ja ilmoittaa jos sovellus ei voi palvelimella pyöriä. Se myös tarkastaa jotenkin että kuinka suuria tiedostoja voidaan maksimissaan ladata palvelimelle. Jos alle jonkun tietyn määrän, kertoo tästä virheellä. Esimerkkinä :D
Millä saisin haettua muuttujaan $usercountry tiedon siitä, missä maassa sivustolla oleva henkilö on? YouTube laittaa kielen automaattisesti. Lisäksi awlyx onnistui täyttämään typerän tietokantani typerillä tunnuksilla. Niitä on varmaan jotain 6000. Mutta nyt se hemmetin lista kaikista käyttäjistä on perhana soikoon täynnä ja tukossa :(
Mieleiset kielet voi säätää selaimen asetuksista, ja ne lähetetään Accept-Language-otsikossa. Kielet voi hakea suunnilleen seuraavalla koodilla:
$kielet = @$_SERVER["HTTP_ACCEPT_LANGUAGE"]; if (empty($kielet)) { // Tieto puuttuu, laitetaan pelkkä oletusvalinta. $kielet = array("fi"); } else { // Tunnistetaan kielivalinnat; teksti voi olla vaikka en-GB, en;q=0.8, fi;q=0.6 $lista = array(); foreach (explode(",", $kielet) as $kieli) { preg_match("/([-A-Za-z]+)(?:;q=([0-9.]+))?/", $kieli, $kieli); // Jos q-arvo puuttuu, se on 1. if (!strlen(@$kieli[2])) { $kieli[2] = 1; } // Lisätään kieli listalle. $lista[] = sprintf("%f|%s", $kieli[2], $kieli[1]); } // Järjestetään lista lukujen mukaan. rsort($lista, SORT_NUMERIC); // Otetaan listalta järjestyksessä kielet, joiden arvo on nollaa suurempi. $kielet = array(); foreach ($lista as $kieli) { list($arvo, $kieli) = explode("|", $kieli); if ($arvo > 0) { $kielet[] = $kieli; } } // Lisätään oletusvaihtoehto listan loppuun. $kielet[] = "fi"; } // var_dump($kielet);
Käyttäjän fyysistä sijaintia voi käyttää kielen arvaamiseen, jos mitään muuta asetusta ei ole. Muussa tapauksessa sitä ei kannata käyttää: vaikka jostain syystä olisin käymässä Venäjällä, haluaisin silti nettisivut ennemmin suomeksi kuin venäjäksi.
Aijoin laittaa niin, että käyttäjä voi asetuksistaan valita haluamansa kielen. Jos sitä ei kuitenkaan olla määritelty (se itseasiassa tullaan määrittämään sen perusteella, että missä maassa käyttäjä on kun tunnus luodaan), niin tuolla antamallasi koodilla se haetaan. Jos taas ei olla kirjautuneena, haetaan tuolla koodilla. :D Näin http://youtu.be/ varmaankin tekee...
Ehkä sinun pitäisi ensiksi jotenkin vähän tutkia, että miten hallitsisit niitä häiriköitä, ennen kuin teet yhtäkään uutta, keskinkertaisesti toimivaan ominaisuutta.
Eli alapas suunnittelemaan niitä ylläpitotyökaluja heti nyt!
Admintyökaluja löytyy. On ip tarkastimet on käyttäjienestot on videon poistot ja kaikki. Ip osoitteiden estoa en vain vielä ole ehtinyt tehdä. Tällähetkellä värkkään ajaxilla toimivaa sisäänkirjautumissysteemiä.
http://vjgo.viuhka.fi/txt_service/test/ajax.html
Tunnus: VJGO
Salasana: jee
Ihan itse kopioin w3 sivuilta ja muokkasin. Nuo kyselyboxit hain täältä ja tuon ajax homman hain täältä ja sitten sovelsin itse hieman :D
Mod. korjasi tagit. Opettele kirjoittamaan kunnolla.
Miten tagit saa tuollalailla pieleen? Ei sinäänsä mikään yllätys...
Aina voi viellä jälkeenpäin tarkistaa tuotoksensa.
Kun lähetin tuon viestin en ollut kirjautuneena sisään. Olen lapin ammattiopistolla, joten en kirjautunut tuolloin sisään enkä voinut korjata kommenttieni. Anteeksi
Osaako joku auttaa? Chromella vjgo tuben videosivun alaosan ja videon välillä on pitkä rako. IE:llä taas on vähän se infoboxi sivussa. Mikä avuksi? css koodilla en omnnistunut itse
Itseni mielestä todella hienot sivut! Tietysti tuskin menestyy, mutta olet jaksanut pusertaa niitten kanssa aika paljon. Jos vaikka joku päivä menee ohi yötuben :D
Rickken kirjoitti:
Itseni mielestä todella hienot sivut!
Tuli väkisinkin mieleen tämä sarjakuva.
Paratiisin poika kirjoitti:
Mikä avuksi? css koodilla en omnnistunut itse
Eikö olisi jo vähitellen aika opetella ne moneen kertaan mainitut alkeet kunnolla ja tehdä alusta asti kunnolla suunniteltu sivupohja?
Oletpas sinä kettuilevalla päällä :)
Mielestäni on naurettavaa, miten Metabolix samaan aikaan poistaa hieman vinoilevia viestejä ja itse haukkuu aloittelijoita pystyyn. Mutta kaipa hän aktiivisena keskustelijana ja moderaattorina tietää, mihin suuntaan haluaa foorumin identiteettiä kehittää.
Itseä ei ainakaan haittaa Metabolixin viestien sävy ja uskon, että viestit, jotka todella on poistettu, ovat olleet poistamisen arvoisia.
miiro: Älä sekoita viestien sävyä ja sisältöä. Eräiden herrojen "hieman vinoilevista viesteistä" ei löydy asiallista asiaa etsimälläkään, vai väitätkö, että esimerkiksi viesti "kun tämä lanka mitä tämä on minä en edes" on jollain tavalla asiallinen ja hyödyllinen?
Siltä varalta, että joku ei osannut lukea edellisen viestini asiasisältöä, kirjoitan alle vielä yksinkertaistetulla ja kirjaimellisesti tulkittavalla suomen kielellä, mitä siinä varsinaisesti luki:
Metabolix kirjoitti:
Rickken kirjoitti:
Itseni mielestä todella hienot sivut!
Paratiisin pojan sivuissa on yllin kyllin parantamisen varaa. Niitä tuskin voi pitää hienoina, jos vain itse tietää tarpeeksi nettisivujen tekemisestä.
Rickken: Kiitoksia kommentistasi. Nosti mielialaani joka oli maassa :D
Tuo ylempi kommentti on rickkenille. Sekoilin eilen vähän. Mutta siis sivujen ulkoinen toteutus on kesken mutta hieno. Sivusto toimii kyllä vaikkakin siinä on puutteita. Ja itseasiassa joka kerta kun julkaisen uuden version, siinä on aina jotain keskeneräistä jotta löydän intoa jatkaa softan tekemistä.
Metabolix kirjoitti:
Rickken kirjoitti:
Itseni mielestä todella hienot sivut!
Paratiisin pojan sivuissa on yllin kyllin parantamisen varaa. Niitä tuskin voi pitää hienoina, jos vain itse tietää tarpeeksi nettisivujen tekemisestä.
Mielestäni ei tarvitse tietää juuri mitään nettisivujen teosta, jotta voi sanoa, onko layout hieno vai kamala. Riittää, että on silmät päässä.
Juuri näin. Tuo on mielestäni oikeaa puhetta. Joku random tyyppi joka osaa käynnistä koneen ja näkee vaikkapa irc-gallerian ja pitää sen ulkoasusta. Sen mielestä se on hieno vaikka olisi juuri oppinut käynnistämään sen koneen. Että eipä sitten siitä sen enempää :D
Hmm... Tuolla on videosivulla se samankaltaisia laatikko. Mutta miten saan sen piiloon mikäli videoita ei löydy? Olen yrittänyt kaikenlaista.
Esimerkkivideo: http://vjgo.arkku.net/mediaplayer/watch?v=7378
video_result.php
<?php $maxvideos = 10; $maxvideosartist = 10; $results = array(); //Ps. Voisiko joku kertoa mulle et mikä tää oikein on? $formerids = array($id); //Pps. Sama tässä if(strstr($name, "-")) { $parts = explode("-", $name, 2); if(preg_match("/[A-Za-z������]/", $parts[1])) { $q = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE name LIKE ?"); $parts[0] = str_replace("%","",$parts[0]); $q->execute(array($parts[0]."%")); $i = 1; while($row = $q->fetch()) { if(!in_array($row["id"],$formerids)) { $results[] = $row; $formerids[] = $row["id"]; $i++; if($i > $maxvideosartist) break; } } } } $keywords = array_values(preg_grep("/[A-Za-z������]/", explode(" ", $name))); $keywords = str_replace("%","",$keywords); $i = 0; $querytext = "SELECT * FROM {$dbtable}videos"; while($i < count($keywords)) { if($i == 0) $querytext = $querytext." WHERE name LIKE ?"; else $querytext = $querytext." OR name LIKE ?"; $i++; } for($i = 0; $i < count($keywords); $i++) { $keywords[$i] = "%".$keywords[$i]."%"; } $q = $yhteys->prepare($querytext); $q->execute($keywords); $i = 1; while($row = $q->fetch()) { if(!in_array($row["id"],$formerids)) { if(!$videotrue) $videotrue = true; $results[] = $row; $i++; if($i > $maxvideos) break; } } echo "<center><small>$lang_SameKindVideos</small></center>\n"; echo "<table border=0>\n"; foreach($results as $row) { $videoidresult = $row["id"]; $videonameresult = $row["name"]; $poster = $row["image"]; $delete = $row["deleted"]; htmlspecialchars("$videonameresult"); if($delete != 1) { $folder = "posters"; if(empty($poster)) $folder = "images"; if(empty($poster)) $poster = "noimage.png"; echo " <tr>\n"; echo " <td colspan=\"2\"><hr></td>\n"; echo " </tr>\n"; echo " <tr>\n"; echo " <td><a href=\"watch?v=$videoidresult\"><img src=\"$folder/$poster\" height=\"73px\" width=\"90px\" class=\"click\"></a></td>\n"; echo " <td id=\"video_result\"><a href=\"watch?v=$videoidresult\">$videonameresult</a></td>\n"; echo " </tr>\n"; } } echo "</table>\n"; ?>
Älä yritä kaikenlaista, laita vain koko tulostusvaiheen ympärille if-lause, jossa tarkistat, että $results-taulukossa on jotain.
Eli...
if($result) { ... }
Edit: Ei toimi. Piilottaa kokonaan :( Jopa jos tuloksia on :(((((((((
Noniin. tein ehtolauseella et jos i on suurempi kuin 1. :D
Paratiisin poika kirjoitti:
if($result) { ... }
Ei tietenkään toimi, kun muuttuja on oikeasti $results eikä $result. Kannattaisi laittaa PHP:n asetuksista kaikki varoitukset käyttöön ja näkyville.
toppart.php:ssä on kommentoituna laajennettuihin varoituksiin vaaditut kohdat. Kyllästyin siihen, että esim login ei toimi kunnolla virheiden vuoksi jotka tulevat hmm................ mistä ne tulikaan... niin joo. coocieista. en muista suomenkielistä vastinetta. eiku keksit eli evästeet.
Paratiisin poika kirjoitti:
Kyllästyin siihen, että esim login ei toimi kunnolla virheiden vuoksi
Joten päätit piilottaa virheet sen sijaan, että korjaisit ne? Aika näppärää! Näinhän saadaan firmoissakin halvalla tehtyä täysin virheetöntä softaa!
ööööhhh.... Miten korjataan virhe, joka tulee siitä että tarkastetaan evästeiden olemassaoloa niin, että katsotaan onko niissä mitään ja jos ei ole niin sitten tulee virhe. Ja kirjautuneenahan ei tarvii kirjautuu enään. Toisin on kun ei ole kirjautuneena. Annan koodin vielä jos joku haluaa kertoa että sen voi korjata. Ps. Koodi on nyt niin kuin mitään ei virheilmoituksille olisi tehty. Ainoastaan kommentoitu jotain sörimisiä...
toppart.php
<?php # THIS IS HERE ONLY BECAUSE SOFTWARE IS NOT READY! #ini_set("display_errors", 1); #ini_set("error_reporting", E_ALL | E_STRICT); set_time_limit("360"); setlocale(LC_TIME, "fi_FI"); setlocale(LC_TIME, "fin"); if(file_exists("settings.php")) require("settings.php"); else die("<html>\n <head>\n <title>VJGO Tuben asennus!</title>\n </head>\n <body>\nEnnen kuin voit käyttää VJGO Tube softwarea, täytyy sinun <a href=\"install.php\"><b><i>asentaa</i></b></a> se!\n </body>\n</html>"); try { $yhteys = new PDO("mysql:host=$dbhost;dbname=$dbname", "$dbuser", "$dbpassword"); } catch (PDOException $e) { die("<span style=\"color:red;font-weight:bold;\">VIRHE:</span>:<br>\n" . $e->getMessage()); } $yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $kyselyvideot = $yhteys->prepare("SELECT COUNT(*) FROM {$dbtable}videos WHERE deleted = ?"); $kyselyvideot->execute(array(0)); $tulos = $kyselyvideot->fetch(); $ip = $_SERVER["REMOTE_ADDR"]; $browser = $_SERVER["HTTP_USER_AGENT"]; $LastVisitedPage = getenv("HTTP_REFERER"); $md5uniqueid = md5("uniqueid"); $videocount = $tulos["COUNT(*)"]; require("functions.php"); require("languange/en/languange.php"); if($DefaultLanguangeCode != "en") { require("languange/$DefaultLanguangeCode/languange.php"); } $loggeg = false; session_start(); $session_username = $_SESSION["username"]; $session_id = $_SESSION["id"]; $session_uniqueid = $_SESSION["uniqueid"]; if(isset($session_username)) $logged = true; if(!isset($session_username)) $session_username = "Vieras"; if(!isset($session_id)) $session_id = 0; if(!isset($session_uniqueid)) $session_uniqueid = $md5uniqueid; $kyselytype = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username = ?"); $kyselytype->execute(array($session_username)); $rivitype = $kyselytype->fetch(); $admincheck = $rivitype["admin"]; $blockedcheck = $rivitype["blocked"]; $admin = false; $blocked = false; if($admincheck == 1) $admin = true; if($blockedcheck == 1) $blocked = true; ?>
Oletko koskaan kuullut isset-funktiosta? Aika kätevä noihin asioihin iffin kanssa.
aaaaaaaaaaa. joo. voin testata tuotakin :D Teen eka läksyt.
Raakaliha... Jos luet tätä, niin vinkki: Laita omaan foorumiisi laajennetut virheilmoitukset päälle. Kato mitä tapahtuu :DDDDDDDD En usko et mitään hyvää, ellet ole korjannut kaikkia pikkuvikoja. Mutta... Pikkuvikoja on helppo korjata ;)
Edit: Nyt ei mikään toimi. Oi kun kivaa. Jee jee. Mikäs vikana? Joku kattois jooko? Auttais vähän :D pliis
Edit: Jaa jaa. Nyt sain sen toimimaan hyvin :S laajennetut errorilmoitukset on käytössä. Jee!
Edit: Eih. Siis hei. Jso on sivu ja siihen on mahdolista saada action juttu. jos ei ole, niin hmm....
Sivu.php:
Jee
Sivu.php?action=2
Epäjee
Siis tuollaisia sivuja on useita minun softassani. Onko siis ihan oikeasti jotenkin tarpeellista laittaa kaikki tuollaisetkin jutut toimimaan ilman virheilmoituksia laajennettujen virheilmoitusten tilassa?
Informoin hieman tylsyyttäni.
Laitoin watch.php filuun ominaisuuden, joka laittaa kantaan tauluun {$db_table}see uuden kohdan jos sieltä videon id:llä haettu tulos on tyhjä. Tämä sen takia että koska upload haisee niin lataan manuaalisesti ftp:llä videoita ja lisään manuaalisesti kantaan videon tietoja niin en jaksa/muista tehdä sinne katselukserrat taulukkoon niitä kolumneja. Kunhan saan uploadin tuoksumaan laitan upload ajat sinne see tauluun, muutan sen nimen ja sitten vielä... niin saan sen videon toimimaan niin, että... hmm... sen tietoja voi muuttaa. sori ajatuskatkokset :D
Edit: Haluaako joku kertoa mikä tässä on vikana? tämä on comment.php tiedosto. Laitoin sen etsimään tiedon, et onko videoo olemassa. Sitä ei ole. Vaikka se olisi niin sitä ei ole. Mikä on sotkettu tälläkertaa?
<?php require("toppart.php"); echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.php\">"; echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/button.php\">"; if(!isset($_GET["id"])) { echo "<span style=\"color:red;font-weight:bold;\">$lang_GiveID!</span>\n"; exit; }else { $id = intval($_GET["id"]); if($admin) { if(isset($_GET["d"])) { $d = intval($_GET["d"]); $querydelete = $yhteys->prepare("DELETE FROM {$dbtable}videos_comments WHERE commentid = ?"); $querydelete->execute(array($d)); } } $queryexist = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE id = ?"); $queryexist->execute(array($id)); $queryremoved = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE id = ?"); $queryremoved->execute(array($id)); $lineremoved = $queryremoved->fetch(); $removed = $lineremoved["deleted"]; if($removed == 1) { echo "Tämä video on poistettu, joten siihen ei voi lähettää kommentteja."; }else { if(!$blocked) { if(isset($_POST["send"])) { $id = $_POST["id"]; $send_comment = $_POST["send_comment"]; if($queryexist->fetch()) $existvideo = true; if(!null($send_comment)) { if($existvideo) { $querycomment = $yhteys->prepare("INSERT INTO {$dbtable}videos_comments (sender, comment, id, ip) VALUES (?, ?, ?, ?)"); $querycomment->execute(array($session_username, $send_comment, $id, $ip)); echo "<span style=\"color:green;font-weight:bold;\">Kommentti lisätty!</span>\n"; } }else { echo $lang_MessageCanNotBeEmpty; } } }else { echo $lang_YouAreBlockedSoYouCanNotSendComments; } } $query = $yhteys->prepare("SELECT * FROM {$dbtable}videos_comments WHERE id = ?"); $query->execute(array($id)); if($removed == 1) { echo "Tämä video on poistettu, joten siihen ei voi lähettää kommentteja."; }else { if($existvideo) { if($logged) { if(!$blocked) { echo "<form name=\"input\" action=\"comment?id=$id\" method=\"post\">\n"; echo " <textarea rows=\"4\" cols=\"25\" name=\"send_comment\"></textarea>\n"; echo " <input type=\"hidden\" value=\"$id\" name=\"id\"><br><br>\n"; echo " <input type=\"submit\" value=\"$lang_Send\" name=\"send\">\n"; echo "</form>\n"; } }else { echo $lang_LogInToSendComments; } }else { echo "Olemattomiin videoihin ei voi postata kommentteja."; } } while($line = $query->fetch()) { $sender = $line["sender"]; $comment = $line["comment"]; $time = $line["time"]; $commentid = $line["commentid"]; $queryuser = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username = ? ORDER BY id ASC"); $queryuser->execute(array($sender)); while($lineuser = $queryuser->fetch()) { $iduser = $lineuser["id"]; $comment = BBCode($comment); echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\">\n"; echo "<table class=\"comment\">\n"; echo " <tr>\n"; echo " <td style=\"border-bottom:1px solid black;\"><a href=\"user/$sender\" target=\"_blank\">$sender</a> [<time>$time</time>]</td>\n"; echo " </tr>\n"; echo " <tr>\n"; echo " <td>\n"; } if($admin) { echo "<span class=\"right\"><a href=\"comment?id=$id&d=$commentid\">$lang_Remove</a></span>\n"; } echo "$comment</td>\n"; echo " </tr>\n"; echo "</table>\n"; echo "<br>\n"; } } ?>
Oon purkkavirittelijä sit... Huomannette varmaan :D
Minulla ei mitään tuohon ylenpään, mutta voisiko joku kertoa hyvän php-editorin, jossa mielellään voisi "laukasta" sen mitä on väsertänyt koodi riveille niin kuin notepad++:ssa.
Kitos!
Miksei se notepad++ kelpaa enään?
Laitoin kivoja mainoksia tuonne hakusivulle. Tykkäättekö?
Kuka ihme tykkää mainoksista nettisivulla? O_o
Olitko tyytyväinen Valio A+-jugurttiin?
En ole maistanut kyseistä jugurttia. Hetken kuuluisuus telkassa ja pidempi feimeys maailmalla on kyllä tuntunut hyvältä.
No kuitenkin... Nuo mainoksethan voi valita ads.php tiedostoon. Tosin laitan sen käyttämään tietokantaa kun saan sen näyttämään hienolta. Sitäpaitsi poistan omalta sivultani nuo mainokset kunhan saan ne ensin toimimaan.
Niin... Osaako joku auttaa tuon comment.php tiedoston kanssA?
Edit: Uusi koodi:
<?php require("toppart.php"); echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.php\">"; echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/button.php\">"; if(!isset($_GET["id"])) { echo "<span style=\"color:red;font-weight:bold;\">$lang_GiveID!</span>\n"; exit; } $id = intval($_GET["id"]); /* THIS CODE IS FOR ADMINS TO REMOVE VIDEOS */ if($admin) { if(isset($_GET["d"])) { $d = intval($_GET["d"]); $querydelete = $yhteys->prepare("DELETE FROM {$dbtable}videos_comments WHERE commentid = ?"); $querydelete->execute(array($d)); } } /* THIS CODE IS FOR CHECKING THAT DOES VIDEO EXIST AND IS IT REMOVED */ $queryvideostate = $yhteys->prepare("SELECT * FROM {$dbtable}videos WHERE id = ?"); $queryvideostate->execute(array($id)); $linevideostate = $queryvideostate->fetch(); $removed = $linevideostate["deleted"]; $video_adder_id_test = $linevideostate["sender"]; if(null($video_adder_id_test)) { echo "Olemattomiin videoihin ei voi lähettää kommentteja."; } if($removed == '1') { echo "Tämä video on poistettu, joten siihen ei voi lähettää kommentteja."; exit; } /* THIS IS CODE FOR SAVING COMMENTS TO THE DATABASE */ if(isset($_POST["send"])) { if(!$blocked) { $id = $_POST["id"]; $send_comment = $_POST["send_comment"]; if(!null($send_comment)) { $querycomment = $yhteys->prepare("INSERT INTO {$dbtable}videos_comments (sender, comment, id, ip) VALUES (?, ?, ?, ?)"); $querycomment->execute(array($session_username, $send_comment, $id, $ip)); echo "<span style=\"color:green;font-weight:bold;\">Kommentti lisätty!</span>\n"; }else { echo $lang_MessageCanNotBeEmpty; } }else { echo "Oot estetty!"; } } if($logged) { if(!$blocked) { echo "<form name=\"input\" action=\"comment?id=$id\" method=\"post\">\n"; echo " <textarea rows=\"4\" cols=\"25\" name=\"send_comment\"></textarea>\n"; echo " <input type=\"hidden\" value=\"$id\" name=\"id\"><br><br>\n"; echo " <input type=\"submit\" value=\"$lang_Send\" name=\"send\">\n"; echo "</form>\n"; }else { echo "Oot estetty!"; } }else { echo $lang_LogInToSendComments; } /* WRITE SENDED COMMENTS TO PAGE WHIT THIS CODE */ $query = $yhteys->prepare("SELECT * FROM {$dbtable}videos_comments WHERE id = ?"); $query->execute(array($id)); while($line = $query->fetch()) { $sender = $line["sender"]; $comment = $line["comment"]; $time = $line["time"]; $commentid = $line["commentid"]; $queryuser = $yhteys->prepare("SELECT * FROM {$dbtable}users WHERE username = ? ORDER BY id ASC"); $queryuser->execute(array($sender)); while($lineuser = $queryuser->fetch()) { $iduser = $lineuser["id"]; $comment = BBCode($comment); echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\">\n"; echo "<table class=\"comment\">\n"; echo " <tr>\n"; echo " <td style=\"border-bottom:1px solid black;\"><a href=\"user/$sender\" target=\"_blank\">$sender</a> [<time>$time</time>]</td>\n"; echo " </tr>\n"; echo " <tr>\n"; echo " <td>\n"; } if($admin) { echo "<span class=\"right\"><a href=\"comment?id=$id&d=$commentid\">$lang_Remove</a></span>\n"; } echo "$comment</td>\n"; echo " </tr>\n"; echo "</table>\n"; echo "<br>\n"; } ?>
Noniin. Sain korjattua. Vika oli siinä, että olin ahkenut kannasta sender taulua jota ei ollut. Oikea taulu olisi olut asser. :D SOri
Hyvä on. Saat anteeksi.
*naurahdus*
yritin ladata samaa videota minkä laitoin jo youtubeen, mutta et hyväksy .wmv:tä. :(!
Hmm.. Se sallii tietääkseni vain videomuodot otka toimivat koska en ole vielä tehnyt muunto-ominaisuutta.
Pienimuotoinen ilmoitusasia:
Ohjelmoinnin saralla joudun nykyään hakemaan tukea ainoastaan teiltä putkalaiset. En tiedä enään ketään yksityistä kaveria joka vvoisi auttaa. Nimittäin pari päivää sitten sattui juttu, jonka vuoksi Raakaliha eli
Juhko Katkaisi minuun yhteydet. Syyn voin kyllä kertoa mikäli jollakin se kiinnostaa. Mutta hän on minulle todella vihainen eikä enään ole kaverini. Tämä ei jostainsyystä kuitenkaan edes harmita minua.
Pieniuotoinen ilmoitus loppui.
Kiinnostaa kiinnostaa, kerro ihmeessä! (ei ollut sarkasmia)
kerroppas mullekkin miks katkas yhteyden ;d
Juu miks katkas yhteyden???
No... Niin. En tiedä pahentaako sen kertominen asiaa, mutta... (Mod. poisti pyynnöstä noloa vuodatusta.) Tarkemmin voin kertoakin, mutta en tähän julkisesti.
8 täyttä sivua pelkkää viihdettä. *Hakee popcornia*
Huoh... Minusta ei ole mitenkään viihteellistä että Raakalihan kanssa kävi niinkuin kävi...
Joo, parempaa ku tosi-tv :)
Meneeköhän tämä teidän pikku kommentointi jo0 offtopiikkiin? Tosin sain kyllä tällä samalla jutulla FB:ssä aikaan sellaset kommenttirysät että huhuhuhuuhuuhu
Kuva liittyy. (Mod. piilotti linkin, selitys ylempänä.)
Repesin tolle ihan täysin. Mitä vaginaa?
Minusta kaikista hienointa on, että päätit kertoa julkisesti tämän asian, mikä on henkilökohtainen, johon kuuluu muita ihmisiä ja epäilen ettei toinen osapuoli arvosta varmasti tämän jälkeen sinua enää niiden rippeidenkään vertaa. Lyöt nauloja arkkuusi lisää ja samassa päätit nöyryyttää toista henkilöä. Olet kuin ohjelmointiputkan Tukiainen näin karusti sanottuna. Joskus on hyvä käyttää järkeä...
Tiedän. Mutta siis. Antaa olla. Unohtakaa. Ette tajuu
Tai sitten kaikki muut tajuavat, paitsi sinä.
Komppaan Lebeä.
Oletko muuten ulkoasun tehnyt itse, nimittäin se on kyllä aika hieno.
Olen joo. Logosta lähtien. Nappulatkin olen tehnyt. Suunnitlut ja kaikki. Tosin Raakaliha on poistanut hieman taulukkotaittoani mm. hakusivulla. Kuvat olen itse muistaakseni kaikki tehnyt, listojen kuvaa lukuunottamatta. Tosin se ei toimi juuri nyt jostain syystä. Myöskän pari kertaa nähtyjen mainosten kuvia en ole tehnyt itse kuin oman sivuni. Kuvat niihin on kopioitu jostain sieltä minne ne ovat linkittäneet.
Tota... Onko mitään järkeä laittaa ip osoitteet tietokantaan muunneltuina? Oli joku functio joka muuttaa ne pisteettömiksi ja jotaki kymmennumerojärjestelmällä muokkaa. Kannattaako nähdä vaivaa toteuttaakseen tämä juttu?
Yksi asiaan liittyvä funktio ainakin on INET_ATON. Sinun tapauksessasi kuitenkin olisi viisaampaa tallentaa ne yksinkertaisesti tekstinä, kun ongelmia on jo muutenkin tarpeeksi.
Patariisin poika: mitä haet takaa ip-muunnoksella? Itse en näkisi mitään järkeä lähteä muuntelemaan niinkin varmaa muotoa miksikään omaksi muodoksi.
Eihän tuolla sivulla ole edes aukkoja+ Puutteita kyllä on. Ehkä admineille on aukkoja mutta muuten ihan hyvä softa on jooo -.-
Mistä tuo nimi tulee VJGO? Tuolla tuo foorumi on vähän ehkä tylsän näköinen ja saisi olla sellainen yleisfoorumi mihin pääsee vain kirjautuneet.
sinnehän voi postata vaan kirjautuneet. VJGO tulee sanoista Ville Juhani GO (eng. suom. Mene (kannustus :D)). Sivuston alkuperäinen osoite oli http://villejuhanigo.jouluserver.com/. Piti vaan keksii nopeesti joku tunnus :DD
Ou Raiid! Kerroppas kuule vielä, että mitä aiot tulevaisuudessa tehdä VJGO:hon?
Rickken kirjoitti:
Ou Raiid! Kerroppas kuule vielä, että mitä aiot tulevaisuudessa tehdä VJGO:hon?
Eks tiiä vai? No sehän syrjäyttää koko youtuben ja muut!
Jaajaa pitää varmaan laitta youtubelle viestiä, että tällänen palvelu aikoo tulla ohi. Saan ison rahasumman :)
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▖░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄▄░░░░░░░░░░░░░░░░░░░░░░░░░▗▀░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▗▄███▄▟█████▙▄░░▗▄░░░░▖▀▝▀▀▀▀▀▀▀▀▀▀▀░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄▟████████████████████▙▖░░░░░░░░░░░░░░░░░░░░░░░░░░
▗▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄░▄█████████████████████████▄░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░▗▟███████████████████████████▙░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░▗▟███████████████████████████████▖░░░░░░░░░░░░░░░░░░░░░▄
▗▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▗▄██████████████████████████████████▙░░░░░░░░░░░░░░░░░▗▞▚▄
░░░░░░░░░░░░░░░░░░░░░▗▛▜█████████████████████████████████▛▟▙░░░░░░░░░░░░░░▄▝▗▟██
░░░░░░░░░░░░░░░░░░░░▗██▙▀▜████████████████████████████▀▀▚▌▜▄▌░░░░░░░░░░░▖▀▄▟██▛▀
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█▀▟██▄▄▖▝▀▜▀▀▜███████████████▛▀▜▄▞▀▙▄████░░░░░░░░▗▖▘▄███▛▘░░
████████████▜▐▌▀▛▀▀▜▗████████▙▄▄▄▄▄▖░░▀▘▝▖░░░░░░░▀▙▄▄████████▌░░░░░▗▝▚▄███▀▘░░░░
████████████▐▐▌▐██▛▟█████████████████████████████████████████▌░░░▄▀░▐███▘░░░░░░░
████████████▐▐▌█████████████████████████████████████████████▌▙░░▛░░░▐█▘░░░░░░░░░
████████████▐▐▌█████████████████████████████████████████████▙▐░░▘░░░▐█░░░░░░░░░░
████████████▐▐▌█████████████▘██████████▛████████████████████▛░▘░░░░░▐▛░░░░░░░░░▘
████████████▟▟▙▟██████████▛▘▗▐████▌█████▝▜██▌▜██████████████▌░░░░░░░▐▌░░░░░░░░░░
▗░▖▗▄▖░░░░░░░░░░░░░▐█▛████▘▗▗▛█████▝████▝░▀█▙░▝███████▛▀███▙▌░░░░░░░▐▌░░░░░░░░░▌
▙▄▖▖▖▄▄▄▄▟▙▙▄▗▟█▀▜▀░█▐███▘░▐▐▌▐▘███▗▖▀██▝▚▗▝▜░▝▝██████▗▗▐██▜▘░░░░░░░▐▌▝░░░░░░░░▌
██████████████▌▜███▌█▐██▛░░▖▟▌▖░▐██▝▄░▝▜▌▝▜▖▗▄▄░▜█████░▄▐██▐░░░░░░░░▐▌░░░░░░░░░▌
███████▜█████▌▘▜███▌▌▛██▙░░▌█▙▘░▌▜█░▜▝░░░░░░░░░░▝████▛▖▐▐█▌▝░░░░░░░░▐▌░░░░░░░░░▌
█████████████▌▀██████▌▜█▜░░▘▘▌░░▌░▜▖░░░░░░░░▄▄░░░█▜██▌▌▘▟█▘░░░░░░░░░▐▌░░░░░░░░░▌
█████████████▌▌██████░▛█▐▖░▐▐░░▙▀░░░░░░░▀▀▀▘░░░░░▐▝██▘░▟█▌░░░░░░░░░░▐▌░░░░░░░░░▌
█████████████▌▘█████▛▗▘▛░▌░▝▐░░▀▖▌░░░░░░░░░░░░░░░▝░█▙▗▟▛█▐░░░░░░░░░░▐▌░░░░░░░░░▌
█████████████▌░█████▌▐░░▜░░░▌▌░▐▚▚░░░░░░░░░░░░░░░░░█░▄▐▙▜░▜▙▖░░░░░░░▐▌░░░░░░░░░▌
█████████████▌▌██████░▘░▝░░░▐▘░▝▐▐░░░░░░░░░░░░░░░░▖▞░░░▛▐░▝▜██▙░░░░░▐▌░░░░░░░▄▝▘
█████████████▌▌██████▌░░░░░░░░░░▌▌░░░░░░░░░░░░░░░▖▙▗░░▗▗▘░░█████▄░░░▐▌░░░░░░░░░░
▛▀▀▀▘▀▀▀▀▀▀▀▀░▘▗▄▄▄▄▄▟░░░░░░░░░░▚▀▜░░░░░░░░░░░░░▞▞░░░▄▘▖░░▐███████▙▖▐▌▄░░░░░▖░░░
█████████████▌▙▐██████▙░░░░░░░░░▝▐░▚▝▙▟██▙▖░░░░▖▘░░░▗▘▘░░▗███████████▙▄░░░░░▖░░░
████████████▛▌█▐███████▖░░░░░░░░░░▖░▚░░▗▖░░░░▄▀░░░░▙▘▘░░░▟███████████████▙▄▖░░░░
█████████████▌░▐████████▖░░░░░░░░░▝▖░▙▖░░░░▄▀░░░░▐▀▗░░░░▐█████████████████████▙▄
████████████▛▘░▐█████████▖░░░░░░░░░▌▗▐░▘░▝▌░░░░▗▝░▗▘░░░░████████▟███████████████
████████████▙▖░▐███████▜▙▛▖░░░░░░░░▄░▝░░░░█▗▗░▛▘░░▟░░░░▟████████████████████████
████████████▙▌░▐████▛▚▟▀░▝▝░░░░░░░▗▌▗▚░▛░░▌░░▌▀▀▚░░▘▖░▗█████████████████████████
█████████████▌░▟████▟▛▚░▗▘░░░░░░░░▌▄▀▟▗░▐▗▘░▗▘░░██▖░░▘▟█████████████████████████
Rickken kirjoitti:
Jaajaa pitää varmaan laitta youtubelle viestiä, että tällänen palvelu aikoo tulla ohi. Saan ison rahasumman :)
Kuka sen maksaa?
Ja muutenkin VJGO:n dissaaminen on niin viime syksyä.
Vitsi osuikin nilkkaasi, pippeli.
Tarkoitukseni ei kyllä ollut pilkata VJGO:ta vaan heittää vain pientä huumoria.
ööö. Mitä ihmettä. Olen poissa koneelta abouttiarallaa 3-4 päivää ja täällä on tällästä tekstii... Huh huh...
Millä ohjelmalla saisin sen videoiden muodon automaattisen muunnon onnistumaan? Entä miten saan toimimaan kokorajoituksen ylittävät tiedostot palvelimelle? Entä kannattaako sille tehdä jotain, että sallitusta 100% levytilasta olen käyttänyt 1926.15%? xD
Riippuu käyttäjäehdoista. Todennäköisesti sinulle tullaan ilmoittamaan seurauksista ja ehdoista. Voit menettää käyttäjän, tiedostoja poistetaan yms.
Tuommoisessa tapauksessa kannattaa luultavasti ottaa itse yhteyttä palvelun ylläpitoon ja kertoa, että pääs käymään tämmönen pikku vahinko levytilan kanssa. Selviät varmaan huomattavasti helpommalla noin.
Montako videota siellä on, kun tuntuu vain, että sinne on tungettu roskaa.
Siellä on mm. Mobile Partner ohjelman huonosti suomennettu versio, videot, jotka näkyy sivulla + pari pornoclippiä (Eivät näy ku oon poistanu) ja yks koiravideo josta pidettiin mutta joka poistettiin videon kuvanneen henkilön pyynnöstä. Lisäksi VJGO Tubesta on 3 tai 4 eri versiota zip paketeissa ja zipattuna Security Threat joku virus. Nämä varmastikin vievät eniten tilaa. Tosin heti kun pääsen Jyväskylään omalle koneelleni niin kopioin tuon Mobile Partnerin omalle koneelleni ja poistan sen palvelimelta. Lisäksi alan miettimään ratkaisua että saisinko videot ja tiedostot lataukseet osiosta jollekin toiselle palvelimelle.
Niin joo. Siellä on mys Digikuvaustunnilla ottamiani kuvia ja sitten päälle 200 tai päälle 500 kuvaa kamerastani tallessa :D Pitäs varmaan poistella vähän...
Selevä. Mites saan tiedon että katsotaanko sivua puhelimella ja jos katsotaan niin mikä malli? Katsoin kosketusnäyttöpuhelimella ja töskeen näköinen oli. En googlella löytänyt mitään toimivaa. mediawikin mobileskin laajennuskaan ei auttanut minua.
Paratiisin poika kirjoitti:
Mites saan tiedon että katsotaanko sivua puhelimella ja jos katsotaan niin mikä malli?
Palvelinpuolella voit katsoa, mikä on selaimen user agent ja päättää sen mukaan onko kyseessä mobiiliselain vai ei. CSS:ssä on @media-sääntö, jolla voi asettaa eri tyylit kännykälle.
Paratiisin poika kirjoitti:
Katsoin kosketusnäyttöpuhelimella ja töskeen näköinen oli.
Ainakin Opera mobile näyttää lähes kaikki sivut, myös sellaiset joita ei ole erityisemmin suunniteltu puhelimelle, ihan hyvin. En tiedä, mistä sivusta on kyse, mutta luulen, että syy on sinun purkkakoodissasi.
Paratiisin poika kirjoitti:
mediawikin mobileskin laajennuskaan ei auttanut minua.
Koitatko nyt saada MediaWikiä vai jotain omaa sivuasi toimimaan puhelimella? Kyllä minun puhelimeni näyttää MediaWikit ihan hyvin.
yritin kopioida mediawikin puhelinlaajennoksen koodia. -.-
koko sivusto on puhelimella ihan hanurista. miten siis saan sen user agendin auttaan? en löytäny mitään ku katoin.
ja tuo ei ole purkkakoodia!!!
kerron vielä että putkaki näkyy huonosti. -.-
Moni sivu ei ole edes suunniteltu kännyköihin, vaan ihan tietokoneeseen. Jospa tämä auttaisi miksi Ohjelmointiputka näkyy huonosti.
Ja yleensä jos on mobiiliversio, sillä on erikseen osoite, esim. http://m.google.fi/
Paratiisin poika kirjoitti:
ja tuo ei ole purkkakoodia!!!
kerron vielä että putkaki näkyy huonosti. -.-
Kyllä mun puhelimella putka näkyy ihan hienosti. Ehkä kyse on sitten puhelimesi selaimessa olevasta purkkakoodista. Kokeilin vieläpä sekä iOS että Android puhelimella.
Myös toi VJGO tube näytti puhelimella ihan yhtä huonolta tai hyvältä kuin tietokoneen selaimella.
Selevä. Etusivu putkassa on rumasti aseteltu kun menin puhelimella. Samoin jotkut muutkin sivut, joita en tosin nyt muista. Minun sivuillani ei toimi m.vjgo.arkku.net/mediaplayer/. Millä koodilla saan selville että onko käytössä puhelin vaiko ei? Nimittäin koska en jaksa/osaa/jaksa pyytää mummia maksamaan lisää siirron vuoksi, niin saa domainiani arkku.net:in sivuille. Ja sitäpaitsi myöskin txt service oli aivan hirveen näkönen. Ja koska esim vaikka puhelimestani loppuisi saldo niin pääsen Wi-Fi verkkoon, joten voin sen avulla lähetellä viestejä. En nimittäin usko että kaikki palvelua tarvitsevat pääsevät koneelle juuri silloin kun olisi tarvetta. Ja koska pyrin tekemään käyttäjäystävällisiä sivuja, teen ne myös mobiililaitteille.
Paratiisin poika kirjoitti:
Etusivu putkassa on rumasti aseteltu kun menin puhelimella.
Ei minusta, ei se sun VJGO Tubekaan (Opera Mini 5/N95).
No, jos et aio noin tuhannelle erilaiselle mobiililaitteelle kullekin erikseen tehdä, niin yksinkertainen nyrkkisääntö on vaan tehdä standardien mukaista tavaraa. Jos jokin yksittäinen mobiililaite ei sitä osaa näyttää oikein, niin se on sen mobiililaitteen omistajan ongelma. Tietenkin jos on isosta ja kaupallisesti merkittävästä palvelusta merkitys, voi olla perusteltua pitää rikkinäistenkin kalujen omistajat tyytyväisinä ja optimoida kaikille vähänkin merkittäville erikseen.
Mielestäni toi vjgo-tube näyttää tietokoneella ihan yhtä huonolta kuin kosketusnäyttöpuhelimella
Sinänsä jos kuitenkin haluat säätää niin koodissa vaan tarkistat mitä $_SERVER['HTTP_USER_AGENT'] sisältää, ja toimit sen mukaan.
Tahdon että sivuni toimivat. Heti kun saan näyttämään sivuni puhelimillla fiksulta, niin keksin miten saan videot näkymään puhelimilla. Mitäs siellä HTTP $ user agent jutusssa tulee puhelimella? Täällä keskellä ei mitään ei ole oikein Wi-Fi yhteyspistteitä, joten en voi katsoa. :(
Ps. videonkatsomissivu näytti mun puhelimella samalta kuin XP näytti sen Explorerilla. Versio ei ollut IE 9.
Paratiisin poika kirjoitti:
Mitäs siellä HTTP $ user agent jutusssa tulee puhelimella?
No, mistäs me sen voisimme tietää miltä se sinun puhelimellasi näyttää, kun et mielestäni ole kertonut puhelimesi mallia.
Itselläni tulee seuraavaa:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; fi-fi) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
Ja ei se mikään ihme ole, jos sivusi näyttää huonolta IE 3:lla.
Paratiisin poika kirjoitti:
Heti kun saan näyttämään sivuni puhelimillla fiksulta, niin keksin miten saan videot näkymään puhelimilla.
Keksisit ensin, miten ne saa näkyviin tietokoneella. En laske lataamisen tarjoamista (joka kyllä on hyödyllinen ominaisuus sinänsä) näkymiseksi.
Blaze kirjoitti:
Keksisit ensin, miten ne saa näkyviin tietokoneella.
Tästä pieni vinkki:
Opera tarjoaa Mobile 10-nettiselaintaan myös PC-raudalle käännettynä. Ohjelmalla on helppoa testata sivujen sovittamista pienelle ruudulle, ja hieman suuntaa antavasti toimivuutta kosketusnäytön kanssa.
Hmm... Tuo ei tuo operan juttu toimi niinku pitäis. Sivut äkyy nimittäin kunnolla kaikilla säädöillä........... Pyh.
Tietääkö joku mitään videoplayeriä nettisivuille joka toimii puhelimella, vai onko joku osoitteen alku, joka käynnistää videosoittimessa videon, joka on määritelty jotain:// merkkien jälkeen url osoitteena. Esim videostart://vjgo.arkku.net/mediaplayer/videos/
Ps. Puhelimeni malli on Samsung S5620 ja siinä on selain nimeltä Samsung Dolfin Browser v1.5.
Paratiisin poika kirjoitti:
Hmm... Tuo ei tuo operan juttu toimi niinku pitäis. Sivut äkyy nimittäin kunnolla kaikilla säädöillä........... Pyh.
Eikös se juri silloin toimi niin kuin pitäisi. Olettaisin, että puhelimessasi ei ole Operan selain.
Paratiisin poika kirjoitti:
Tietääkö joku mitään videoplayeriä nettisivuille joka toimii puhelimella, vai onko joku osoitteen alku, joka käynnistää videosoittimessa videon, joka on määritelty jotain:// merkkien jälkeen url osoitteena. Esim videostart://vjgo.arkku.net/mediaplayer/videos/
joku.mp3. Onnistuuko tuo vai tarvitseeko hankkia joku sivulla toimiva soitin?
Ainakin minun puhelimeni eli Nokia C6, jossa on Opera Mobile, avaa videotiedostot automaattisesti RealPlayerillä ilmeisesti Content-Typen mukaan. Eihän tuota skeemaa voi mihinkään muuttaa http:stä. Eihän se puhelin voi muuten tietää, millä protokollalla tiedosto haetaan. Toki voi olla jokin skeema, joka tarkoittaa "hae tiedosto HTTP:llä ja avaa se mediasoittimella", mutta se lienisi sitten jonkin valmistajan oma viritys.
Puhelimen selaimen kerroin ylempänä. Mun puhelin ei toista flashia tuol. Asetukset on ok. YouTube avaa mobiililla johonki outoon rwz tyyppiseen osoitteeseen muistaakseni.
Paratiisin poika kirjoitti:
YouTube avaa mobiililla johonki outoon rwz tyyppiseen osoitteeseen muistaakseni.
Tarkistin juuri, että mobiili-YouTube (m.youtube.com) käyttää RTSP-protokollaa. Jos m.youtube.com toimii sinun puhelimellasi, niin voisit tietysti alkaa käyttää RTSP:tä VJGO Tubessa. RTSP-protokolla vaatii luonnollisesti RTSP-palvelimen, enkä usko, että ainakaan arkku.net:illä sellaista on.
Selevä. Pyytäisin kaikkia joilla on puhelimessa kuukausimaksullinen yms muu halpa netti niin katsomaan sivua http://vjgo.arkku.net/aa_machine_info ja kertomaan mitä tuloksia tulee. Ip osoitettta ei tarvitse antaa (en usko että kovin moni antaa vaikka pitäisi). https on aina off, koska palvelin ei salli sitä. Se mitä lähdekoodi jutulla löytyy niin se hakee ihan oikeasti sen tiedoston sillllä header get file funktio jutuilla. Tarvitsisin etupäässä tiedot kohdista Selaimen ja käyttöjärjestelmän tiedot ja Tämänhetkinen maakoodi. Kertokaa myös maa ja kaupunki jossa olitte kun latasitte tuon sivun, jotta saan tietää miten tuo maan/kielen hakujuttu toimii oikein. Tuon tiedoston käyttämät $_SERVER jutut on enimmäkseen kopioitu ulkomuistista php.net:in sivuilta. Tein tiedoston aluksi puhelimella. Muuten se oli samanlainen, mutta lähdekoodia eikä muitakaan if(isset($_GET[""])) jutuilla oltu laitettu. Myöskään nykyistä kellonaikaa ei ollut. Oli IP, HTTP_LANGUAGE_ACCEPT, tiedot selaimesta ja käyttiksestä ja onko https päällä. Tuo ei vain anna jostain syystä mitään tuloksia jos hakisin tuloksen suoraan muuttujasta $https (katso tiedoston lähdekoodista). Voisiko joku kertoa että kun ?serverinfo pätkä on osoitteen perässä niin onko siinä jotain tietoturvariskiä? Siis sillä että se tulostaa tietoa palvelimesta. Älkää haxiko pliis. En ees voi kopioida. Okei voin kopioida tiedostot itelle turvaan. Täällä se vain veisi pari päivää varmaan...
http://vjgo.arkku.net/aa_machine_info:
** Perustuu palveluntarjoajalta saatuihin sijaintitietoihin
Ei perustu. HTTP_ACCEPT_LANGUAGE
perustuu ihan siihen, mitä käyttäjä itse haluaa. Suomessa fyysisesti oleva käyttäjä voi käyttää vaikka venäjänkielistä selainta ja päättää, että haluaa sivut mandariinikiinaksi.
Paratiisin poika kirjoitti:
Pyytäisin kaikkia joilla on puhelimessa kuukausimaksullinen yms muu halpa netti niin katsomaan sivua http://vjgo.arkku.net/aa_machine_info ja kertomaan mitä tuloksia tulee.
Selaimen ja käyttöjärjestelmän tiedot: Opera/9.80 (S60; SymbOS; Opera Mobi/1178; U; fi) Presto/2.5.28 Version/10.1 IP-osoite: 91.153.55.123 Selaimen kieli: fi-FI,fi;q=0.9,en;q=0.8 Laitteella(si) toimivat tiedostotyypit tai tiedoston tyyppitiedot: ** text/html, application/xml;q=0.9, application/xhtml+xml, multipart/mixed, application/vnd.wap.multipart.mixed, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Selaimen ja käyttöjärjestelmän tiedot:
Mozilla/5.0 (Linux; U; Android 2.2.1; fi-fi; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Selaimen kieli: fi-FI, en-US
https: off
Laitteella(si) toimivat tiedostotyypit tai tiedoston tyyppitiedot: **
application/xml,application/xhtml+xml,text/
Mozilla/5.0 (Linux; Android 2.1-update1; fi-fi; ZTE-BLADE Build/ERE27) AppleWebKit/530.17(KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
http://vjgo.arkku.net/aa_machine_info:
* Aikavyöhykkeeksi on määritelty UTC. Emme ole varmoja että mistä aika on haettu.
** En tiedä kumpi.
1. Palvelimen kellosta.
2. Ei kumpikaan. Kuten php.net kertoo: $_SERVER["HTTP_ACCEPT"] palauttaa selaimen pyynnössä lähettämät sallittavat tiedostomuodot.
Kiitoksia kaikille. Erityisesti Mika9 joka kertoi totuudet noihin :D Mutta siis kun tuo lähettää sallitut muodot niin onko ne just nuo jotka hyväksytään? Ei muita. Esim jonku mobile selaimel ei toimi example. svg kuvat (katoin jonkun ensimmäisenä kohalle tulleen tiedot)?
Paratiisin poika kirjoitti:
Mutta siis kun tuo lähettää sallitut muodot niin onko ne just nuo jotka hyväksytään? Ei muita. Esim jonku mobile selaimel ei toimi example. svg kuvat (katoin jonkun ensimmäisenä kohalle tulleen tiedot)?
Minulla tuo Accept-haederi on tietokoneen Operalla:
text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Ei siinäkään näytä SVG:tä olevan, vaikka selain sitä tukeekin. Sen sijaan lopussa on */*, joka tarkoittaa, että kaikki käy, mutta sen yhteydessä on myös alhainen q-asetus, joka tarkoittaa, ettei selain mielellään ota kyseistä tyyppiä olevaa dataa.
Hmm.. Aika jännää. Mie ajattelin tehdä nuo sivuni sitten ihan kunnolla w3schools.org:in ohjeidsen mukaan wap kielellä. Heti kun saan edes purkkaviritelmällä selville että kuinka saan php:n kertomaan että onko laite puhelin vaiko ei.
Paratiisin poika kirjoitti:
Mie ajattelin tehdä nuo sivuni sitten ihan kunnolla w3schools.org:in ohjeidsen mukaan wap kielellä.
WAP on protokolla, mutta tarkoittanet WAP-kielellä WML-kieltä. Se on kuitenkin niin ikivanha tekniikka, etten tekisi sillä enään mitään uutta sivustoa. Kaikki uudet puhelimet varmasti tukevat ihan normaaleja XHTML-sivuja ja näyttävät ne hyvin, jos niitä edes hieman optimoi puhelimelle.
Paratiisin poika kirjoitti:
Heti kun saan edes purkkaviritelmällä selville että kuinka saan php:n kertomaan että onko laite puhelin vaiko ei.
Tee mobiiliversiolle oma osoite esim. m.sivunnimi.fi
tai tee tuo valinta edes manuaaliseksi. Ainakin minun puhelimeni näyttää tavalliset nettisivut ihan hyvin, enkä välttämättä halua mitään mobiiliversiota, josta puuttuu puolet sisällöstä.
testaa mennä suomi24 tai legon sivuille mobiililla. että sillain. enkä saa tuota domainiani ohjattua minnekään järkevästi niin m.vjgo.net ei toimi.
Paratiisin poika kirjoitti:
testaa mennä suomi24 tai legon sivuille mobiililla.
Noista nyt ei varmaan kannata kummastakaan ottaa mallia...
Paratiisin poika kirjoitti:
testaa mennä suomi24 tai legon sivuille mobiililla. että sillain.
Kyllä noita molepia sivuja pystyy käyttämään Opera Mobilella, mutta eivät ne siinä kovin hyvin toimi. Suomi24 ei kyllä näytä hyvältä selaimessakaan, jossa on AdBlock ja NoScript, puhumattakaan mobiiliselaimesta, johon en ole jaksanut virittää AdBlockia, ja johon ei saa NoScriptiä.
Paratiisin poika kirjoitti:
enkä saa tuota domainiani ohjattua minnekään järkevästi niin m.vjgo.net ei toimi.
Mitä jos laitat sen mobiiliversion vaikka osoitteeseen vjgo.net/m ?
Esimerkiksi laitoin textiviestipalveluuni linkin osoitteeseen ./mobile/. Siellä ei nyt juuri ole mitään. Voihan sen noinkin tehdä, vaikka rumaa onkin.
ps. touch.facebook.com pöytäkoneella/läppärillä ;)
Voisitteko pyrkiä etsimään tuolta tietoturva-aukkoja? Selostan hieman mitä erikoisuuksia olen värkännyt tuonne.
comment.php:n pitäisi estää viestien lähettäminen poistettuihin ja olemattomiin videoihin.
Siinä ne olivatkin... Yrittäkääs murtaa mutta pliis
lkää tuhotko sivua koska en pysty ottamaan kunnollisia varmuuskopioita -.-
Voi veljet :D
Tota eikös ole aika vähän, jos olet perustamassa videopalvelua niin vain 50mt tilaa saa arkku.netistä.
P.S Toivottavasti saat tekstiviesti hommelin valmiiksi.
Keskustelu osiossa vieläkin tämä ikivanha xss aukko, josta kerroin jo JJP :n aikoina.
Rickken kirjoitti:
Tota eikös ole aika vähän, jos olet perustamassa videopalvelua niin vain 50mt tilaa
No joku viisminuuttinen musiikkivideo Youtuben huonolla laadulla (360p) vie sen 20 megaa, et, ehkä niitä pari mahduttaa :)
Awly: Tiedän sen. Se minua onkin hieman huolestuttanut. Voitko laittaa tiedot miten tuo aukko murretaan sähköpostiini, koska en usko että täällä julkisena ollessaan se tietäisi mitään hyvää. JJP kaatui ja kun se oli vielä en onnistunut löytämään infoa kuinka mursit sen. E-mail on vjgo@vjgo.net
Rickken: Minulla on tällä nykyisellä koneella xampp. Vieläkun saisin sen näkymään kaiissa internetillisissä laitteissa joilla voi selata sitä nettiä niin varmaankin laitan tuon videopalvelun tälle koneelle. Vaikka onkin läppäri niin tällä tilaa rajoittaa vain se miten paljon sitä on koneen sisällä. Ja tälle voin määrittää kaikki sallitut functiot ja muuta mukavaa. Domainikin toimisi sitten VJGO Tubelle. Ja sitten tuosta TXT Servicestä. Sehän toimii ja on toiminut jo vaikka kuinka kauan. Siellä on tietääkseni ainoana ongelmana tällähetkellä huonosti suunniteltu TLS salauksen päälläolo varmistus ja määrittelyt. :D
Ja sitten huomasin muuten että tämän koneen tehot ovat parantuneet viimekertaisesta isosta kopiointikerrasta. Olen siis nyt kopsannut kaikki filut tälle koneelle.
Paratiisin poika kirjoitti:
Rickken: Minulla on tällä nykyisellä koneella xampp. Vieläkun saisin sen näkymään kaiissa internetillisissä laitteissa joilla voi selata sitä nettiä niin varmaankin laitan tuon videopalvelun tälle koneelle.
Oletko, öö, koittanut esimerkiksi avata portteja?
esalaka kirjoitti:
Oletko, öö, koittanut esimerkiksi avata portteja?
Paratiisin poika varmaan tarkoitti, että sivu pitäisi saada näkymään kunnolla kaikilla laitteilla kuten kännyköillä jne. Ainakin hän on kysellyt ohjeita siihen, miten VJGO Tuben saisi toimimaan kännykässä.
Aika tyhmää sinänsä tehdä joku sms_service, jos sitä ei mainosta ollenkaan pääsivulla. Kuinkakohan moni sinne on löytänyt.
Voisin mainostaa kaikkia noita VJGO:n ylläpitämiä sivustoja kyllä joo. Tai no mikäli siis (tää on mun oma veikkaus) joku putkalaisista ei olisi menny kertoon et mulla on viiruksii jaosa tuol servul. En ees tienny sen olevan kiellettyy. Mut ne poistaa eston tuolta mun sivulta mikäli lupaan välittömästi sen jälkeen poistaa ko. latauksen ja tiedoston sivulta. :D KKyllä se mulle käy muttaku ei toi näytä aukeavan jostainsyystä.
Ja siirrän siis tuon VJGO Tuben kun saan koodit arkku.net:in omasta osastani omalle palvelimelle. Ongelma on se, että nuo mun sivut ei näy. Huomatkaa tässä vaiheessa jo että url http://vjgo.net/ ohjaa osoitteeseen http://www.vjgo.net/ ja sitten vielä se että tuon www alku on määritelty ip osoitteeseen 127.0.0.1. :D
Mutta siis. Otin aamulla kuvia xampp siltä oletuskansiolta joka näkyy netis mm. localhost osoitteesta ihan tolleen. Ja sit otin kuvii dossista ku laitoin käskyjä siihen.
Kuvia
Ps. Kertokaa mielipiteenne VJGO:n ylläpitämän TXT Servicen vastuuvapauslausekkeesta!
Pps. Riccen... Se on TXT Service. Ei SMS Service. -.-
Tässäku vielä pystyn muokkaamaan tätä viestii niin kysyn että tiedättekö mitä fonttityyppejä kannattaa käyttää esim vaikka VJGO Tubessa tai TXT Servicessä ja mitä kannattaa käyttää heti kättelyssä kun aloittaa uuden softan tyylien tekemisen? tein TXT Service palveluun filun jolla voi testata fontteja. Tosin en jaksanut tehdä mitään speccuu nii et ton voi murtaa kirjoittamalla osoitteen perään ?style=</style>Tämä teksti näkyy nettisivulla HAHAHAHAjee oon prohacker!!!
Fontin testaus osoite: http://vjgo.viuhka.fi/txt_service/font_type.php?
Tää nyt on ihan turhaa edes vastata, kun et oikeasti edes lue näitä sulle kirjotettuja viestejä, mutta...
Vastuuvapauslausekkeissa on kohtia, jotka ei oikeasti tarkoita mitään, tai tarkoittavat juuri päinvastaista, mitä siinä pitäisi lukea. Miksi, esim. et ota vastuuta siitä, että palvelusi toimii tulevaisuudessa, kun mielestäni sinun nimenomaan pitäis olla ottamatta vastuuta, että se mahdollisesti EI toimi tulevilla selaimilla.
Samoin ilmoitat, että sinulla on oikeus poistaa viestejä palvelusta, mutta heti seuraavaksi ilmoitat että sinulla on oikeus olla poistamatta viestejä.
Et ota vastuuta vastata asiakaspalvelunumeroon (?) "virka-aikoina". Lisäksi ilmoitat, ettet vastaa siihen muutenkaan.
Eli eikö tossa vois ihan hyvin lukea: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
En myöskään luota tippaakaan sivustosi tietoturvaan, joten antamasi vastuuvapauslausekekaan tuskin auttaa asiaan.
Tiedän, että olet vasta nuori poika, mutta silti tuntuu, että oikeasti voit joutua pieneen liriinkin "palveluillasi". Olet sivustosi omistaja, ja jos oikeasti jaat viruksia/mahdollistat viruksien jaon siellä, niin saatat oikeasti joutua siitä vastuuseen, olit kirjoittanut "vastuuvapauslausekkeen" tai et. Sivustosi ei ole mikään YouTube, jossa taas oikeasti valvotaan palveluun ladattavaa materiaalia 24h/vrk.
Ja fonteista:
Jos joku haluaa testata "fontteja", tai tässä tapauksessa yleensäkin css-tyylejä, niin eiköhän silloin helpointa ole esim. testata sitä Firebugin kaltaisilla selainlaajennuksilla.
Paratiisin poika kirjoitti:
Tosin en jaksanut tehdä mitään speccuu nii et ton voi murtaa kirjoittamalla osoitteen perään ?style=</style>
Kannattaisi tosiaan opetella ohjelmoimaan ennen pienenkään sivuston julkaisua, ettei tarvitsisi jatkuvasti tehdä näitä XSS-aukkoja. "En jaksanut" on aika huono perustelu sille, että tekee aukon, jonka kautta hakkeri voi kaivaa käyttäjien tunnistetietoja. Ei todellakaan ole suuri vaiva käyttää yhtä vaivaista htmlspecialchars-funktiota.
Hmm... Tuon vatuuvapauslausekkeen tarkoitus on se, että mikäli en ehdi tai on joku muu syy sille etten pysty laittamaan sivustoa tomimaan uusille selaimille, niin ei voida haastaa minua siitä oikeuteen.
Ja en oikeastaan jaka selittää muita koska en on tyyliin että saan tehdä mitä huvittaa tuolla. Noista huolimatta pyrin vastaamaan VJGO:n asiakaspalvelunumeroon ja ilmoitan kyllä muutoksista lähes aina (en esim. silloin ku korjaan vaikkapa ohjeista viestin lähetyksen neuvomiskohdasta jonkun typon). Ja voin kai mä tässä kello 4 korjata yhen pikku aukon kaiketi. Eipä oo muutakaan. Tai no pitäshän toi TeleWell.gateway optimoida fiksummin... :D Paljon hommaa paljon aikaa ja nälkä. -.-
Paratiisin poika: Miksi jenkkiläksi oikein luulet Suomea? Amerikassa on hieman erilainen lainsäädäntö (itse asiasssa siellä sisäisestikin se vaihtelee suuresti).
En tiedä. Olin ehkä vähän sekaisin taas tuossa yöllä. Älkää kysykö miks....
Paratiisin poika kirjoitti:
En tiedä. Olin ehkä vähän sekaisin taas tuossa yöllä. Älkää kysykö miks....
Miks?
Koska olin tuolloi väsynyt ja nukkunut liian vähän.
voisitteko kertoa niitä fonttien nimiä?
sans-serif on aina varma valinta.
Paratiisin poika kirjoitti:
Ps. Kertokaa mielipiteenne VJGO:n ylläpitämän TXT Servicen vastuuvapauslausekkeesta!
Pisteitä ("."), viivoja ("-") ja pilkkuja (",") puuttuu tekstistä aika paljon. Ja kuten Lebe80 sano, on se aika ristiriitaista tekstiä jossain määrin. Hirveästi toistoa sanalle "VJGO". Ne voi jättää joissain kohdin pois, eikä tarvitse toistaa kymmentä kertaa "VJGO ei ota vastuuta siitä ja siitä" tai "VJGO pidättää oikeuden siihen ja siihen".
Rivitystä ei tarvitse joka lauseen jälkeen tehdä itse, vaan se hoituu automaattisesti. Fontin voisi vaihtaa, aika epäselvää luettavaa.
Paratiisin poika kirjoitti:
mikäli en ehdi tai on joku muu syy sille etten pysty laittamaan sivustoa tomimaan uusille selaimille, niin ei voida haastaa minua siitä oikeuteen
joo'o...
Osaisiko joku pilkuttaa tekstin mulle? vihaan pilkkuja. ja vaihdan tekstin fontin huomenna. pääsen silloin taas koneelle. puhelimes ei oo sftp yhteyttä.
kiitos palautteesta.
Paratiisin poika kirjoitti:
Osaisiko joku pilkuttaa tekstin mulle? vihaan pilkkuja. ja vaihdan tekstin fontin huomenna. pääsen silloin taas koneelle. puhelimes ei oo sftp yhteyttä.
kiitos palautteesta.
Olisikohan tuo kannattanut opetella, ennen kuin aloit ohjelmoimaan?
Edit. Myös isot alkukirjaimet olisi syytä opetella.
Nyt on Vastuuvapauslauseketta fiksailtu. Samoin kuin fontti muutettu. Mutta joku ei fontissa mielestäni ole oikein nyt ihan...
Oikeasti. Poista koko vastuuvapauslauseke sivu, tai laita tekstiksi vaikka vaan, että "Minä Ville-Juhani Sinisalo, testaan eri palveluiden toimintoja tällä sivulla. Koska tämä on harrastussivusto, saattaa sivuston palvelut lakata toimimasta ennalta ilmoittamatta.".
Ja tää on kans hyvä:
"VJGO ei ole yhteistyössä viuhka.fi palvelun kanssa. VJGO:n ylläpitämä TXT Service vain sattuu olemaan viuhka.fi palvelun sivustolla."
Eli tuskin sivustosi kuitenkaan vain sattuu olemaan, eli etköhän itse sen kuitenkin ole sinne pistänyt...
Ja "Vastuuvapauslauseketta on muokattu viimeksi 15.01.2011 n. kello 13:24", kai tää teksti tulee oikeasti php-koodilla generoidusti, ettet käsin sitä päivitysaikaa muuttele?
selvä. vastuuvapauslauseke on ja pysyy. ajan määrittelen näpyttelemällä.
paluu vjgo tube palveluun. mikä tapa olisi viisain jos pitää selvittää tiedoston mime tyyppi? mieluusti sama funktio sekä videolle että kuvalle. mime funktioita löysin kun etsin niitä pientä kuva säiliötä varten. salasanan saa esim sähköpostilla kysymällä. http://voimax.cygnnet.jkl.fi/~vjgo/KuvaSave/ ja huomatkaa että tuo on kouluni palvelin eikä sieltä olla estetty yhtään funktiota. eli siis esim system() toimii. ja minulla on sinne tunnukset. löytääkö kukaan syytä miksi esim koulun nettiyhteys voisi katketa? hehe. mutta en tee sitä ilman syytä. ;^)
Paratiisin poika kirjoitti:
mikä tapa olisi viisain jos pitää selvittää tiedoston mime tyyppi?
https://www.php.net/manual/en/ref.fileinfo.php
Paratiisin poika kirjoitti:
salasanan saa esim sähköpostilla kysymällä.
Taidanpa vaan käyttää palveluita, mihin ei tarvi hankkia mitään salasanoja.
Paratiisin poika kirjoitti:
huomatkaa että tuo on kouluni palvelin eikä sieltä olla estetty yhtään funktiota. eli siis esim system() toimii. ja minulla on sinne tunnukset. löytääkö kukaan syytä miksi esim koulun nettiyhteys voisi katketa? hehe. mutta en tee sitä ilman syytä. ;^)
No voin minä keksiä vaikka kuinka monta syytä, miks nettiyhteys katkeaa, mut ei sulla oo mitään tekemistä niistä minkään kanssa. Olettaen, että serveri on hyvin konffattu, et hirveästi pääse tekemään mitään pahaa, vaikka yrittäisit.
Ja tunnarishan toki lähtee nopeammin ku vandaalin muokkaukset Wikipediasta, jos jäät kiinni jostain pahistelusta, eli kannattaa varmaan hetken aikaa miettiä, onko siinä sittenkään mitään järkeä.
Blaze kirjoitti:
Paratiisin poika kirjoitti:
huomatkaa että tuo on kouluni palvelin eikä sieltä olla estetty yhtään funktiota. eli siis esim system() toimii. ja minulla on sinne tunnukset. löytääkö kukaan syytä miksi esim koulun nettiyhteys voisi katketa? hehe. mutta en tee sitä ilman syytä. ;^)
Ja tunnarishan toki lähtee nopeammin ku vandaalin muokkaukset Wikipediasta, jos jäät kiinni jostain pahistelusta, eli kannattaa varmaan hetken aikaa miettiä, onko siinä sittenkään mitään järkeä.
Mä veikkaan, että siinä tunnarin menetys voi olla se vieläpä se pienin pelko. :)
Mielenkiintoinen kuvapalvelu.
Mitään merkittävän ihmeellisiä aukkoja ei löydy, tosin salasana oli liian helppo arvata.
lainaus:
Error! Try agen!
Salasanan oli ainoastaan tarkoitus estää kuvavyöry. Mutta eihän se mikään suoranainen passu ollu... Mut ihasama. Millaisia aukkoja sieltä löytyi?
lainaus:
http://voimax.cygnnet.jkl.fi/~vjgo/KuvaSave/
image.php?action=image&file=../../index.php
Kuvan pystyy lähettämään jos salasanakentän jättää tyhjäksi.
lainaus:
Warning: chmod(): Tiedostoa tai hakemistoa ei ole in /home/vjgo/public_html/KuvaSave/upload.php on line 25
Warning: Cannot modify header information - headers already sent by (output started at /home/vjgo/public_html/KuvaSave/upload.php:25) in /home/vjgo/public_html/KuvaSave/upload.php on line 27
Etusivu | UploadLataus valmis. Katso kuva.
"Kuva" linkkaa osotteeseen http://voimax.cygnnet.jkl.fi/~vjgo/KuvaSave/
Edit: Toi yheksänmeganen png oli kai vähän liian iso. Mikä tuolla on tiedostokoon raja?
Ja mitä noihin "erikoisiin" merkkeihin tulee, niin ei sun tarvi ku ajaa PHP:n urlencode()-funkkarin läpi nuo tiedostonimet, niin toimii hyvin. Ks. esim. http://voimax.cygnnet.jkl.fi/~vjgo/KuvaSave/
http://voimax.cygnnet.jkl.fi/~vjgo/KuvaSave/
Tuossakin kuvassa ihan mielenkiintoinen tilanne. :)
Paratiisin poika kirjoitti:
Tiedostokokoa ei rajoiteta.
Taitaa olla limitti sen kaks megaa (mikä taitaa muuten olla PHP:n defaultti-upload_max_filesize).
Mitä lie hassua koodissaas teetki, mut välilyönnin nimessään sisältävät kuvat on rikki.
noniin. Nyt palvelu haisee ku se ei toimi kunnollee -.-
Tein teille tiedoston aikani kuluksi. Olen aikaisemmin tehnyt toisen jännän tiedoston, jolla voi tarkistaa onko funkkari käytössä.
http://voimax.cygnnet.jkl.fi/~vjgo/KuvaSave/php.php
http://voimax.cygnnet.jkl.fi/~vjgo/KuvaSave/functio.php
Älkää pliis sotkeko tota serveriä. En tahdo vaikeuksiin. En edes käytä system functiota palvelimen sotkemiseen. Kerran reboottasin jotta weelani alkais toimiin ku varmaa vuoden ollu yhtämittaa päällä.
Tähän laitan koodeja jos jollakin kiinnostaa kertoa miten saan toimimaan kunnolla.
Huomasin juuri miksi meni läpi ilman passua. Sitä ei oltu määritelty settings.php filuun -.-
lang.php
<?php //Sivusto $TEXT["copyright_text"] = "Copyright © Ville-Juhani Sinisalo 2011"; $TEXT["nav_frontpage"] = "Etusivu"; $TEXT["nav_upload"] = "Upload"; $TEXT["title_frontpage"] = "Etusivu"; //Upload $TEXT["upload-button"] = "Lataa"; $TEXT["password"] = "Salasana"; $TEXT["upload_button"] = "Lataa!"; //Tiedoston sivu $TEXT["file_name"] = "Tiedoston nimi"; $TEXT["file_mime_type"] = "Tiedoston MIME-tyyppi"; $TEXT["download_file"] = "Lataa tiedosto"; $TEXT["try_show_in_browser"] = "Yritä näyttää selaimessa"; $TEXT["file_size"] = "Tiedoston koko"; ?>
upload.php
<?php require_once("topinclude.php"); if(isset($_POST["upload"])) { if(!$public_upload) { if(isset($_POST["password"]) && $_POST["password"] != $upload_password) { //En jaksa korjata tähän tätä ku huomasin tässä just äsken -.- :D require_once("topfile.php"); echo "Salasana väärin!"; require_once("bottomfile.php"); exit; } } $kuva = $_FILES["image"]["name"]; $allowed = array("jpg", "jpeg","png", "gif", "svg", "bmp", "pdf"); $jako = explode(".", $kuva, 2); if(in_array($jako[1], $allowed)) { if(is_file("$uploaded_files_dir/$kuva")) { require_once("topfile.php"); echo "Tiedostonimi on jo käytössä!"; require_once("bottomfile.php"); exit; } move_uploaded_file($_FILES["image"]["tmp_name"], "$uploaded_files_dir/$kuva"); chmod("$uploaded_files_dir/$kuva", 0644); header("Location: image.php?file=$kuva&action=image"); }else { $page_tite = "Virhe - Kielletty tiedostomuoto"; require_once("topfile.php"); echo "Tiedostomuoto ei ole sallittu!"; require_once("bottomfile.php"); } }else { $page_title = "Lataa tiedostoja"; require_once("topfile.php"); ?> <tt><b> Sallitut tiedostomuodot ovat "jpg", "jpeg", "png", "svg", "gif", "bmp" ja "pdf".<br> Kuvien nimissä ei saa olla erikoismerkkejä, sillä jos niissä on, ne eivät nä kunnolla. Sallitut merkit: a-z, A-Z 0-9, -_ ja välilyönti (space) </b></tt> <br><br> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="image"><br> <?php if(!$public_upload) { echo " <b>" . $TEXT["password"] . "</b><br>\n"; echo " <input type=\"password\" name=\"password\"><br>\n"; } ?> <input type="submit" name="upload" value="<?php echo $TEXT["upload_button"]; ?>"> </form> <?php require_once("bottomfile.php"); } ?>
topinclude.php
<?php if(!is_file("settings.php")) $error = true; if(!is_file("lang.php")) $error = true; if(!$error) { require_once("settings.php"); require_once("lang.php"); require_once("imageresize.php"); }else { echo "error!"; exit; } if(!is_dir($uploaded_files_dir)) { echo "Päivitä sivu."; mkdir($uploaded_files_dir, 0777); exit; } ?>
topfile.php
<?php require_once("topinclude.php"); ?> <html> <head> <link type="text/css" rel="stylesheet" href="style.css?<?php echo filemtime("style.css"); ?>"> <title><?php if(!isset($page_title)) { $page_title = "Nimetön sivu"; } echo $page_title; ?></title> </head> <body> <span class="nav_bar"> <a href="index.php"> <?php echo $TEXT["nav_frontpage"]; ?> </a> | <a href="upload.php"> <?php echo $TEXT["nav_upload"]; ?> </a> </span> <br><br>
bottomfile.php
<div class="copyright"><?php echo $TEXT["copyright_text"]; ?></div> </body> </html>
image.php
<?php require_once("topinclude.php"); if(isset($_GET["file"]) && isset($_GET["action"])) { $file = $_GET["file"]; $action = $_GET["action"]; $file_url = urlencode($file); $file_path = "$uploaded_files_dir/$file"; if($action == "image") { if(file_exists($file_path)) { $file_size = round(filesize($file_path)/1024); echo "<!--\nPURKKARATHAISU SILLE ETTÄ EN SAANUT MUUTEN NÄKYMÄÄN\n"; $file_mime_type = system("file -i -b $file_path"); $file_mime_type = explode(";", $file_mime_type); echo "-->"; $page_title = "Kuva - " . $file; require_once("topfile.php"); if(isset($_GET["rotate"])) { $angle = intval($_GET["rotate"]); echo "<style>\n"; echo "img#image {\n"; echo " rotation: {$angle}deg;\n"; echo " -webkit-transform: rotate({$angle}deg);\n"; echo " -moz-transform: rotate({$angle}deg);\n"; echo " filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n"; echo "}\n"; echo "</style>\n"; } echo "<a href=\"image.php?file=$file_url&action=download\">" . $TEXT["download_file"] . "</a> | <a href=\"$uploaded_files_dir/$file_url\">" . $TEXT["try_show_in_browser"] . "</a><br><br>\n"; echo "<center>\n <img src=\"$uploaded_files_dir/$file_url\" " . imageresize($file_path, 500) . " alt=\"Image\" id=\"image\">\n</center>\n<br><br>\n"; echo "<div class=\"image_info\">\n"; echo " <center><b>Kuvan tiedot</b></center><br>\n"; echo " Kuvan tiedostonimi: $file<br>\n"; echo " Kuvan MIME-tyyppi: " . $file_mime_type[0] . "<br>\n"; echo " Kuvan koko: $file_size Kb<br>\n"; echo " Kuva (tod. näk.) ladattu palvelimelle: " . date("d-m-Y H:i:s", filemtime($file_path)) . " (<a href=\"https://www.php.net/manual/en/function.date.php\">date(d-m-Y H:i:s)</a>)<br><br>\n"; echo "</div>\n"; }else { $error = "Kuvaa ei löydy! Tarkista kuvan nimi!"; } }elseif($action == "pdf") { echo "Kesken. Anteeksi tästä."; }elseif($action == "download") { if(file_exists($file_path)) { header("Content-type: application/force-download"); header("Content-Disposition: attachment; filename=\"$file_path\""); header("Content-Length: " . filesize($file_path)); }else { $error = "Tiedostoa ei löydy! Tarkista tiedoston nimi!"; } }else { header("Location: index.php"); } if(isset($error)) { $page_title = "Virhe"; require_once("topfile.php"); echo $error; } }else { header("Location: index.php"); } require_once("bottomfile.php"); ?>
settings.php
<?php $uploaded_files_dir = "images"; $upload_password = "******" $public_upload = false; $AdminEmail = "ville.juhani.sinisalo@gmail.com"; ?>
imageresize.php
<?php function imageresize($image, $max) { list($width_original, $height_original) = getimagesize($image); $ratioh = $max/$height_original; $ratiow = $max/$width_original; $ratio = min($ratioh, $ratiow); $width = intval($ratio*$width_original); $height = intval($ratio*$height_original); return "width=\"$width\" height=\"$height\""; } ?>
index.php
<?php require_once("topinclude.php"); $page_title = $TEXT["title_frontpage"]; require_once("topfile.php"); function ListFiles($dir) { $files = array(); $dir = opendir($dir); while(($file = readdir($dir)) !== false) { if($file != "." && $file != "..") array_push($files, $file); } sort($files); closedir($dir); return $files; } function putimagestolist($dir) { $files = ListFiles($dir); $col = 1; # echo "<table border=2 class=\"image_list\">\n <tr>\n"; echo "<ul>\n"; foreach($files as $file) { $file_path = $dir . "/" . $file; $pdf = array("pdf"=>true); $ext = explode(".", $file_path); if($pdf[strtolower($ext[count($ext)-1])]) { $mimetype = "application/pdf"; }else { $mimetype = "image"; } if($mimetype == "application/pdf") { # echo " <td name=\"$col\" class=\"td_pdf\"><a href=\"image.php?action=med_img&image=$file&mime=pdf\"><abbr title=\"$file\"><img src=\"pdf.gif\"></abbr></a></td>\n"; echo " <li><a href=\"image.php?action=pdf&file=$file\">$file</a></li>\n"; }else { # echo " <td name=\"$col\"><a href=\"image.php?image=$file&action=med_img\"><img src=\"$dir/$file\" alt=\"Image\" " . imageresize("$dir/$file", 130) . "></a></td>\n"; echo " <li><a href=\"image.php?action=image&file=$file\">$file</a></li>"; } /* $col++; if($col == 8) { echo " </tr>\n <tr>\n"; $col = 1; } } while($col != 8) { if($col != 8) { echo " <td name=\"$col\" class=\"td_empty\"></td>\n"; $col++; } */ } /* echo " </tr>\n"; echo "</table>\n"; */ echo "</ul>\n"; } echo "<big>Tiedostojen luettelo muutettu linkkilistaksi koska liian suurien kuvien lataaminen aiheutti suurta bugia.</big>\n"; putimagestolist($uploaded_files_dir); require_once("bottomfile.php"); ?>
EDIT: Pistin mimetyypin hakijan image.php:ssä kommentteihin, koska tajusin sen tietoturvan. Onneksi.
Paratiisin poika kirjoitti:
EDIT: Pistin mimetyypin hakijan image.php:ssä kommentteihin, koska tajusin sen tietoturvan. Onneksi.
Ethän laittanut, tai et ainakaan päivittänyt viestisi koodia. Onneksi koodissa kuitenkin on file_exists-tarkistus ennen system-funktiota varmistamassa, ettei käyttäjä saa suoritettua mitä tahansa.
Kyllähän tuo on itse palvelimella savessa. Ei tuossa koodissa. Ennen echo "<!--... riviä on /* koodi ja rivin echo "-->"; jälkeen koodi */. Mutta siis jos joku lataa tonne tiadoston, jonka nimi on pätkä system kohdassa suoritettavaa koodii niin o'ou.
Kertokaa (Älkää romuttako palvelinta) jos löydätte tietoturva-aukkoja tai jotain vikaa sivustolta. (Älkää vieläkään romuttako sivustoa).
Salasana on wiilan
Olkaa hyvät älkääkä testatko system tagin läpäisyä niin, että koodini tai palvelin häiriintyy. En voi sanoa varmalla, mutta domainin perusteella on mahdollista että tuolla voisi romuttaa jkl:än sivut. En usko mutta on se mahdollista. Ainakin weelanit sammuis. Ja olkaa hyvät älkääkä postatko hälyttäviä määriä turhia tiedostoja palvelimelle. Alan pian poistelemaan turhia tiedostoja ja uudelleennimeämään toimia ja fiksuja sekä hauskoja yms. kivoja tiedostoja. Ja kertokaa mulle miten vaihdan omalta tunnukseltani ftp salasanan. En itse osaa löytää infoo siihen. Älkääkä pliis edes yrittäkö sitä keksiä. En halua vaikeuksiin koulun kanssa. Mulla on nyt sen atk open luottamus (ja atk 10 :D) niin en haluu vaikeuksia. Pliis älkää ees yrittäkö. Pavleu on tuollla palvelimella koska siellä toimii tarvittavat functiot ja siellä ei ole erikseen rajoitettu tilankäyttöä. Ja olen itse lopettanut sotkemiset. Reboot juttu oli vain koska tahdoin sen wlan yhteyden toimimaan sisällä kun ulkona on kylmä ja tuulee ja sataa ja kaikkea.
Ps. Poistin yhden aiemman viestin kun en tätä voinut lähettää.
"Estettiin epäilyttävä verkkosivu
Yritit käyttää seuraavaa kohdetta:
http://voimax.cygnnet.jkl.fi/~vjgo/"
by Norton
Beuling kirjoitti:
"Estettiin epäilyttävä verkkosivu ...
Mistäköhän Norton on keksinyt, että tuo sivu olisi jotenkin epäilyttävä, eihän siellä ole kuin jokin reitittimen boottaus -lomake. Mitä tuohon sivuun tulee, niin ei välttämättä kannattaisi pitää tuollaista kaikille näkyvissä. En myöskään keksi mitää syytä siihen, miksi reitittimen boottaamiseen tarvitaan kaksi eri salasanaa.
Tekstissä on myös muutama virhe. Tästä taitaa puuttua sana "not":
http://voimax.cygnnet.jkl.fi/~vjgo/:
If WLAN is working in Viitaniemi's school, insert password of WLAN and password of boot ...
Sivulla on muitakin kirjoitusvirheitä kuten "responisble" ja "Error! Try agen!".
Huomasitko muuten, että lataustoimintosi ei toimi? Ei riitä, että laitat header-funktiolla otsikot, vaan lisäksi pitää lähettää se tiedosto. Lisää Content-Length-otsikon jälkeen seuraavaa:
Kannattaa myös lisätä pariin paikkaan tarkistuksia tiedostonimestä.
Kiitoksia tiedosta. Korjaan kun pääsen koneelle.
Aion ilmoittaa opettajille tt aukoista. esim minulla on tiedosto jonne voi syöttää komentoja. jostain kumman syystä en kerro teille osoitetta. suojaus salasanalla on kunnossa ja se kerää lokit. sen avulla mm. on saatu selville että käyttäjien lista on helposti saatavissa ja että minä osaan tehdä jotain hyvin. olkaa hyvät älkääkä edes etsikö tiedostoa. ps. se kerää lokit mun meiliin. väärät passut ja onnistuneet komennot. :D
Paratiisin poika kirjoitti:
...minä osaan tehdä jotain hyvin.... se kerää lokit mun meiliin. väärät passut ja onnistuneet komennot. :D
Eeeeeeiii! Miksi keräät "vääriä" salasanoja?! MIKSIII?!
Etkö jo tajua, että jossain vaiheessa "kikkareesi" korkataan, niin "väärät" salasanat vuotavat heti käyttäjien mahdollisia salasanoja. Sano edes, ettei se tallenna niitä mihinkään muualle.
Sanotaan vaikka että käyttäjä olisi vahingossa kirjoittanut kirjautuessaan salasanansa väärin, esim. capslock -pohjassa. Luuletko että tämän jälkeen salasanaa on keksiä.
ÄLÄ IKUNA TALLENTELE MITÄÄN SALASANOJA! EDES VÄÄRIÄ!!! Sen vuoksi salasanakentät on merkitty tähdillä/palloilla/yms., ettei ne näy vahingossakaan missään kenellekkään.
/me menee ottamaan buranaa!
... mulla on tiedosto x.php. se suorittaa komentoja vain kun salasana on syytetty ja se on y. mikäli tämä salasana joka on kaikille sama ei ole y vaan esim w, niin lähetetään mulle ip ja passuyritys jotta voin tarvittaessa estää hakkerin. eli siis en nyt tietenkään muitten tunnusten passuja ala tallentelemaan. huoh
Selevä. Kuka helvetin idiootti kävi lataamassa tuonne kuva paikkaan 1000 kuvaa joiden poisto rasittaisi liikaa puhelintani? Olen ilmoittanut opettajille aukoista. lopettakaa tuo. sain jo valitusta jatkuvasta tiedonsiirrosta.
anteeksi kielenkäyttöni
Paratiisin poika kirjoitti:
1000 kuvaa joiden poisto rasittaisi liikaa puhelintani?
Protip: noita ei mahdettu käsin lisätä tuonne, älä siis vaivaudu käsin poistamaankaan.
Paratiisin poika kirjoitti:
Olen ilmoittanut opettajille aukoista.
Opettajatko ne korjaa? Sun koodista? o_O
Paratiisin poika kirjoitti:
sain jo valitusta jatkuvasta tiedonsiirrosta.
WTF? Oon kohtalaisen varma, että käytän koti-ADSL:lläni moninkertasesti kaistaa sun palveluus verrattuna (paitsi jos joku tykkää tehä palvelunestohyökkäyksiä sun palveluus, mut kun siitä ei ollu puhetta, niin oletan, että kyse oli ihan normaalista liikenteestä).
VJGO Tube on vissiin hostattu koulun servulla, eikä siellä ylläpito taidata tykätä, että joku CS-teini syö kaiken kaistan.
The Alchemist kirjoitti:
VJGO Tube on vissiin hostattu koulun servulla
vjgo.arkku.net koulun palvelimella? Ei kai?
Jaa että semmosta. No sittenhän valitukset kaistan polttamisesta ovat vieläkin vähemmän yllätys. Kyllähän tommonen tuhannen kuvan uppaushyökkäyskin jonkin verran megabittejä imee.
Paratiisin poika kirjoitti:
Selevä. Kuka helvetin idiootti kävi lataamassa tuonne kuva paikkaan 1000 kuvaa
Katso sieltä logeistasi. Muistaakseen erikseen kehuit toiminnon erinomaisuutta.
Se ope valitti koska käytän satoja kertoja päivässä ftp yhteyttä. En pelaa cs. vjgo tube ei ole kosketuksissa millään tavalla koulun palvelimeen. koodeissani ei ole vikaa, vaan palvelimessa. mulla on tiedosto jolla voi käyttää komentoriviä. palvelimen tt huolehtii jkl:än kaupungissa joku tt ryhmä. ei vn:än koulu. ja lopettakaa minun ivaus. En jaksa kuunnella sitä. olen ajanut itseni siihen tilaan että pian lähtee järki ja sitten henki. anteeksi nyt vaan. lopettakaa mun tilan pahentaminen jookosta vaan..?
Minulla on selaimen kautta toimiva komentorivi tuolla. se kerää lokeja. kuvasave ei.
Sinun koodisi mahdollistaa sen, että palvelimelle / sinun kotisivutilaasi voi tunkea luvatta tuhatmäärin kuvia. Kiitä onneasi, ettei hän upannut sinne samalla jotain haitallista skriptiä, jonka seurauksena olisit todennäköisesti menettänyt tunnuksesi palvelimelle.
Tää ketju on niin täynnä randomia bullshittiä ja sekoilua, etten jaksa lähteä arpomaan, että mitä sinä siellä koulusi FTP:llä, jos VJGO Tube on hostattuna jossain muualla.
Enkä ymmärrä sittenkään, että miten sinä voit käyttää FTP-yhteyttä satoja kertoja päivässä. Kaikki devaaminen kannattaisi suorittaa kotipalvelimella ja sitten vain välillä synkata valmis koodi levitysversioon. Tommoseen FTP:n yli arpomiseen menee ihan liikaa aikaa hukkaan pikkunäpertämiseen, jolloin koodaamisesta ei tule mitään.
Tuollainen ylimielinen "se on palvelimen vika, ei minun koodini" -asenne ei johda kuin siihen, että jossain välissä tulee itku.
Paratiisin poika kirjoitti:
Se ope valitti koska käytän satoja kertoja päivässä ftp yhteyttä. En pelaa cs. vjgo tube ei ole kosketuksissa millään tavalla koulun palvelimeen. koodeissani ei ole vikaa, vaan palvelimessa. mulla on tiedosto jolla voi käyttää komentoriviä. palvelimen tt huolehtii jkl:än kaupungissa joku tt ryhmä. ei vn:än koulu. ja lopettakaa minun ivaus. En jaksa kuunnella sitä. olen ajanut itseni siihen tilaan että pian lähtee järki ja sitten henki. anteeksi nyt vaan. lopettakaa mun tilan pahentaminen jookosta vaan..?
Ivaaminen loppuu kun laitat tuollaiselle epämuodostuneelle riskille lopun. Asiat voi tehdä oikeaoppisesti ja väärin, ja olet valinnut väärän tien. Etkä kuuntele kaikkia ohjeita. Toivon, että joku korkkaisi tuon nopeasti niin päästään kärsimyksistä. Vaikkakin hyvä DWTF-tasoinen huumori jäisi sitten ;)
Olen pahoillani että olen postannut tänne henkilökohtaisesta paskastani aiheutuneen vitutuksen, stressi n ja masennuksen yhteydessä muodostunutta paskaa. Minä olen jotenkin saanut tuon silleen ettei sinne voi ladata edes kuvia tälhetkel. mKorjhaan sen nyt jotenkuten, suojaan poassulla ja korjaan aukot 18975109%%%%% varmuudella. Minun vitun lääkitys on paskana. Anteeksi siitä auiheuttuva pakollinen sotku, jonka pyrin pitämään vähäisen.ö asdf
Kertokaa minulle onko upload koodissa jotain sellaista vikaa, joka mahdollistaa e.g .php tai jotain tollaista suorittuksen?
Olisi kiva tietää upload koodisi ennen kuin alkaisi arpomaan. Tuossa vanhassa ei näyttäisi olevan, mutten voi mitenkään tietää nykyistä koodiasi.
ps. "Kannattaa myös lisätä pariin paikkaan tarkistuksia tiedostonimestä."
Sanoin jo aiemmin, että tiedostonimet kannattaisi tarkistaa. Et ole näköjään noudattanut neuvoa, kuten image.php:stä näkyy.
puhelimella vaikea muokata. mutta nyt. ei ole varmaa mutta saattaa olla että lahden joksikin aikaa pois. saatte olla rauhassa. älkää kysykö miksi tai minne. en edes vastaa niihin. mutta no. mikäli näin käy niin näkemisiin.
"Sarja jää tauolle."
Saikohan Paratiisin poika tietokonekiellon koodattuaan liikaa? :D
Olisi kuitenkin kannattanut tukkia tuo tietoturva-aukko ennen lähtöä. Ehkei siitä muuten olisi välitöntä vaaraa, mutta kun etusivulla lukee, että vaaralliset sivut on siirretty hakemistoon hack_risk, ja kun keskustelussa on kerrottu, että eräällä näistä sivuista voi ajaa komentoja (eli puhe lienee system-funktiosta), riskit ovat ihan todelliset.
No siis juttujen perusteella joita olen kuullut tästä projektista siihen kuitenkaan suuremmalti perehtymättä, voisin arvella, että hakkeroimiseen noille servereille riittää melkein mikä tahansa. Lainatakseni otan kohdan:
http://vjgo.arkku.net/wiki/index.php?title=Etusivu:
<div style="height:25%;"> <center><h1>Tervetuloa VJGO wikin etusivulle!</h1></center><br><br><div style="border:3px solid black;border-radius: 5px;width:25%;float:right;"> <center><h2>Ajankohtaista</h2></center> <ul> <li>VJGO wiki avattu </li> </ul> </div>LOL PYLLY HAISEE </div> </div> </div> <div id="mw-head" class="noprint"> <div id="p-personal"><ul> <li><a href='index.php?title=Toiminnot:Contributions/213.243.188.138'>213.243.188.138</a></li>
Siinä suoritetaan kaikkea rumalla tavalla. Sivuissa on paljon aukkoja. JA SIITÄ ON PALVELINPUOLEN KAIKKI KOODI KAIKKIEN SAATAVILLA! Nyt riittää, että joku joka osaa jotain vain viitsisi iskeä, yksi virhe ei tunnu siinä missään.
siis se system funktio on salasana suojattu kauan. pitäisi sulkea wiki. tehkää palvelus ja kertokaa aukot jotta voin poistaa ne. ja minulla on nyt jo tarpeeksi ongelmia. älkää tehkö niitä minulle lisää. kiitos.
teen muuten mail palvelua nyt
Jos sulla on ongelmia, hoida ne. Poista vaikka kaikki sun "palvelut" siksi aikaa käytöstä, kunnes saat ongelmasi hoidettua.
Oon ollut yli 10 vuotta aktiivisesti erilaisilla foorumeilla ja ongelmaisia (väkivaltaisia, burnoutteja, epätasapainoisia) nuoria ja vanhoja on ollut ihan tarpeeksi. Yrittäkää nyt perhana vain hoitaa ne omat ongelmanne ajoissa, älkääkä turhaan kehitelkö itsellenne niitä ylimääräisiä huolia ongelmienne lisäksi.
Varsinkin jos olet lähdössä jonnekin, niin tee joku zippipaketti tiedostoistasi, tee niistä varmuuskopio ja poista sivut (=kaikki tiedostot, kyllä, sanoin aivan kaikki tiedostot) käytöstä, kunnes olet taas kunnossa, ja kun näyttää taas siltä, että oikeasti jaksat ylläpitää "palvelujasi".
ongelma on mielenterveyteni ja idiootit koulussa.
Vjgon pääsivustolle tulee uutinen jos homma kusee. kertokaa kuka käytti luvatta komentorivi ohjelmaani. se nimittäin on pian tuomassa minulle syytteen tietomurrosta. tunnusta suosiolla ja kerro kuinka palautan kaiken ennalleen. mulla on ip tallessa samoten komennot.. -.-
ja kertokaa minulle jos kiinnostaa auttaa tekeen toi mail service toimintakuntoon. puhelimella rasittavaa koodata
En tiedä, kuka komentoriviäsi on käyttänyt, mutta minä ainakin lähetin palvelimen ylläpitäjälle sähköpostia, että kannattaisi tehdä sivuillesi jotain, ennen kuin aiheutat (tai joku muu aiheuttaa noiden aukkojen avulla) koko palvelimelle ongelmia. Täytyy vain toivoa, että ylläpitäjän osoite oli säädetty palvelimelle oikein.
Muista, että IP-osoite ei todista mitään maailmassa, jossa on ilmaisia välityspalvelimia ynnä muita tapoja pysyä anonyymina. Saatat päätyä raportoimaan ihan väärän osoitteen. Sitä paitsi koodissasi on jännä bugi myös virheraportin lähetyksessä – tai mistä minä tiedän, ehkä olet tehnyt tuon tarkoituksella noin.
"Kertokaa aukot", kehtaat käskeä, vaikka yksi vakava aukko on mainittu jo ainakin kolmessa viestissä, joista yhdessä on jopa linkki, joka demonstroi aukkoa käytännössä. Oma syysi, jos olet liian laiska lukemaan. Aukon ansiosta tuolla system-komennon salasanasuojauksella ei ole mitään virkaa.
Ketään koodaustaitoista ei varmasti kiinnosta "auttaa" tekemään "palveluitasi", koska sinulla ei takuulla olisi "yhteiselle" projektille mitään annettavaa – paitsi tietysti nimesi copyright-tietoihin. Sivusi ovat täyttä sontaa, palvelusi ovat täyttä sontaa, ja olisi sekä sinun että muiden kannalta varmasti parempi, jos et edes yrittäisi koodata (ainakaan sillä kännykällä, kun kerran on niin vaikeaa). Henkinen tilasikin varmaan tästä kohentuisi.
Luulen, että nuo sinun ongelmasi ovat enemmän omassa päässäsi kuin muiden. Mielenterveysasioissa kannattaa kääntyä psykologin tai vakavammassa tilanteessa psykiatrin puoleen. Edellisellä sivulla mainitsemastasi hengenlähdöstä on syytä muistaa, että tässä IRL-pelissä ei ole tallennusmahdollisuutta; tämä on kuulemma ihan oikeasti epäselvä juttu monille teineille.
Paratiisin poika kirjoitti:
ongelma on mielenterveyteni ja idiootit koulussa.
Tiedän sen kyllä. Mutta kuten sanoin, niin sinun kannattaa oikeasti miettiä ongelmiasi ja hankkia aikaa niiden hoitamiseen. Unohda mail servicet yms. vähäksi aikaa ja hoida nyt vain itsesi kuntoon.
olen Ihan tarpeeksi kunnossa.
okei en ole. taisin tyhmänä pilata parisuhteeni jo -.-
puhelin antaa laittaa muokkauskenttään kirjoitettaessa 1024 merkkiä. tämän vuoksi En kuvasaven image.php tiedostoa korjaamaan. ja älkää sitten oikeasti sotkeko tuolla nyt!
( ゚∀゚)
ikinä kuullut tietokoneesta?
Kyllä.
Oletko sinä koskaan kuullut sellaisista asioista kuin konekielto, nettiriippuvuus ja pakonomainen tarve tehdä jotain asiaa (tässä tapauksessa koodata).
haluaako joku olla kiltti ja katsoa tämän sivun html lähdekoodin ja laittaa sen viestinä tänne? teen koodin joka näyttää tämän sivun minun serveriltäni mutta ilman sivupalkka ja logoa yms. tietenkin laitan sinne linkin ja tiedot alkuperästä. alkaa aina tänne tullessa puhelin lagimaan
Paratiisin poika kirjoitti:
Oletko sinä koskaan kuullut sellaisista asioista kuin konekielto, nettiriippuvuus ja pakonomainen tarve tehdä jotain asiaa (tässä tapauksessa koodata).
Jos on noita asioita nähty tarpeelliseksi hoitaa konekiellolla, niin ei kuulosta kovin asiaa edistävältä tehdä samoja asioita puhelimella. Pitäisi varmaan olla myös älypuhelinkielto ja jos puhelinta tarvii niin lykätä käteen joku Nokia 2110 tai muu, missä ei ole edes nettiselainta.
ja äläkä laita sinne koodinpuolikkaita, joiden latausveppisivu on varustettu isolla punaisella varoituskolmiolla ja tekstillä "keskeneräinen eikä suositella käytettäväksi. projekti ei ole juuri nyt työn alla" tms...
Mitä käytät kännykällä ohjelmaa, jos ne vielä pitäisi siirtää nettiin. Vai käytätkö jotain arkun muokkaspaneelia?
Lumpio- kirjoitti:
( ゚∀゚)
キタ━━━(゚∀゚)━━━!!
(Naapurin ystävällinen moderaattori korjasi merkit. Tee postauksen jälkeen search&replace, jossa muutat et-merkin [[:ks ja puolipisteen ]]:ks, niin homma toimii.)
käytän ftp ohjelmana net2ftp sivustoa.
opettajani sulki sen mun tunnuksen. se sanoi että mun ip:llä on murtauduttu jonku toisen tilille -.- se ei edes näyttäny sitä ip osoitetta. ja mun koneet on pölyssä kun niitä ei olla käytetty. ja mulla ei edes ollut mitään mielenkiintoa murtautua sen tyypin tilille. -.-
ja mikäli puhelimeni ei vain raiskaa tyylejä niin tämä mobiiliulkoasu on aika hieno (Y)
Eli loppu hyvin, kaikki hyvin?
En tiedä... minun tunnukset on suljetut koulussa. sain ip osoitteen jolla sotkettiin.
Whois info:
Location Tokyo, Japan
Että osaako joku selittää? -.- en nyt kerro sitä osoitetta koska en halua kertoa. kertokaa sen sijaan että onko TXT Servicessä aukkoja. Älkää tuhotko sitä sivustoa pliiiiiiiiiiis. ja se etten korjaa aukkoja heti johtuu siitä etten tajua niitä tai olen laitteella joka hajottaa koodin täysin mikäli edes otan sen editoriin. ja kiitosta vaan tästä 0.33 viestiä päivässä jutusta (N)
1) Poista vanhat itse sivut, jottei tuhoa tule enempää
2) "Harjoittele" osaamista tekemällä jotain vähemmän kriittisiä "palveluita", esim. vieraskirjoja yms.
3) Lue palautetta "mainostamillasi" keskustelualueilla. Jos et ymmärrä kritiikkiä, et ole ehkä paras ihminen ohjelmoijaksi. Tärkeää on osata sisäistää palaute, jotta ymmärrät mitä olet tehnyt väärin, ja osaat korjata sen. Harva "palvelu" toimii netissä alkuperäisillä koodeilla, joten asennoidu siihen, että joudut aluksi silloin tällöin tekemään koodisi alusta asti uudelleen - paremmin.
Paratiisin poika kirjoitti:
sain ip osoitteen jolla sotkettiin.
Whois info:
Location Tokyo, Japan
Että osaako joku selittää? -.-
Tietääkö poika mikä on proxy? Nyt tuntuu vähän siltä että IP-lokeistasi ei sittenkään ollut mitään hyötyä.
tuolla ip osoitteella on löytöpaikka opettajan lukemista ftp lokeista. se ip on rekisteröity jollekin yhtiölle. =)
Siis oliko sivuillesi murtauduttu FTP:llä? Onneksi olkoon vain. :D Ehkä pidät jatkossa paremmin huolta salasanoistasi.
Lumpio- kirjoitti:
Tietääkö poika mikä on proxy?
Paratiisin poika kirjoitti:
tuolla ip osoitteella on löytöpaikka opettajan lukemista ftp lokeista. se ip on rekisteröity jollekin yhtiölle. =)
Paratiisin pojan vastaus lyhyesti: Ei tiedä.
Mitä tästä opittiin..? Kannattaa ensin opetella asiat ja vasta sitten tehdä suuria projekteja :p
Tai ehkä paremminkin se, että jos tehdään jokin asia väärin, ja joku kertoo miten se korjataan, niin oikeasti myös korjataan asia, eikä ruveta tekemään seuraavaa ominaisuutta.
Teknkik kirjoitti:
Mitä tästä opittiin..? Kannattaa ensin opetella asiat ja vasta sitten tehdä suuria projekteja :p
Tai sitten tehdä suuria projekteja sisäisessä testiympäristössä jossa ei ole vaaraa muille :P
Ja pitää varmuuskopioita :P
tiedän. mikä on proxy. puhelimella on vaikea ottaa v kopioita kun ei 1. tue t muotoa 2. ei ole tilaa.
virheiden korjaaminen puhelimella on vaikeaa. ja koska tämä on kaukana otsikosta niin palaan ontopickiin.
miten asennan sen mobiili video katselu jutun tai mistä saan puhelimella toimivan flash soittimen?
Mitä jos korjaisit tietoturva-aukot ennen kuin alat lisäämään uusia toimintoja|aukkoja.
Tämä keskustelu on ollut ebin.
Edit: Nyt vähän enemmän googlattuani niin herra Sinisalo tässä aikuisen neuvo; Opettele php:ta ja opettele ohjelmoimista huviksesi, vaikka näin aluksi. Olet kovin nuori ja sen takia en näe, että olisi mitenkään mielekästä, että syrjäytyisit ikäistesi "piireistä", joten on erittäin tärkeää, että ymmärrät, että vaikka koodaus ja muu luominen on kivaa puuhaa niin se ei saa olla elämän ainoa sisältö ja tarkoitus. Ei kannata istua monomaanisesti koneella tai netissä. Ulkona on maailma ja nuoruus.
Ja kun lopetat nyt tuon puhelimen kanssa pelleilyn, niin saat kenties joskus tietokoneesikin takaisin. Olisiko moraalisesti väärin antaa ihmiselle bannit henkisen terveyden palauttamiseksi?
palataan nyt alkuperäiseen aiheeseen.
Kuinka asennan videoprotokollan palvelimelleni?
Jos nyt olen ymmärtänyt oikein että alkuperäinen ideasi on ollut tehdä youtuben kaltainen sivusto johon käyttäjät voivat ladata videoitaan voisit tehdä yksinkertaisen tiedoston latauksen ja näyttää videot HTML 5:n video ominaisuutta hyödyntäen. Lisätietoa tuosta löydät esimerkiksi tuolta: http://www.w3schools.com/html5/html5_video.asp
Puhuin mobiililaitteiden videoprotokollaa..
Jonkun ehdottama harjoittelusofta, VierasKirja: http://vjgo.viuhka.fi/txt_service/vk/
toimiiko tarpeeksi hyvin?
tein puhelimella alle 2h
txt servicen mobiiliversio: http://vjgo.viuhka.fi/txt_service/mobile/
pääsivu ohjaa puhelimet automaattisesti tuonne. tämän voi estää laittamalla osoitteen perään ?nomobile
esim: http://vjgo.viuhka.fi/txt_service/index.php?
Paratiisin poika: eihän tommosen koodaukseen mene muutenkaan useampaa tuntia. Enemmän sun projekteissas toivoisin, että ymmärtäisit sen, että myöhemmin vieraskirjan ylläpitämiseen tarvitaan muutakin kuin sivu, johon viestit ilmestyvät. Eli suurin punnerrushan kaikissa webisovelluksissa on se, että saadaan nimenomaan ylläpitäjän työkalut sellaisiksi, että nopeasti voidaan moderoida viestejä, estää käyttäjiä tai vaikka sulkea seinä.
Paratiisin poika kirjoitti:
toimiiko tarpeeksi hyvin?
tein puhelimella alle 2h
Toimii hienosti, onneksi olkoon! Olet siis nyt niin taitava, että osaat tulostaa sivulle tavallista, muotoilematonta tekstiä – eikä edes kestä kuin pari tuntia. Todella mahtava saavutus, näillä eväillä onkin hyvä aloittaa uuden menestyssivuston koodaaminen!
(Toivottavasti ymmärrät ironiaa etkä käsitä tätä väärin.)
Eikös tuo ole enemmänkin sarkasmia?
E: No eipä sittenkään, kun katselin Wikipediasta vähän tarkempaa tekstiä aiheesta :D
Metabolix: ei ole moderaattorin käytöstä nyt. Yhtään mikään häiritsevän käyttäjän haitarin soittelua banaanilla. Jos se ei ymmärrä viestisi sanomaa lukematta, niin peli on selvä.
Provoamalla saatte aikaan lisää vastaavaa takaisin, joten miksiköhän pidätte yllä tätä nyt tässä?
raakaliha kirjoitti:
Metabolix: ei ole moderaattorin käytöstä nyt.
Kerro lisää. Mitä mielestäsi sanoin asiattomasti? Nähdäkseni totesin vain, että tuollaisen äärimmäisen karun tai suorastaan ruman vieraskirjan tekeminen ei ole minkäänlainen taidonnäyte, päinvastoin, kun aikaakin kului noin paljon.
raakaliha kirjoitti:
Jos se ei ymmärrä viestisi sanomaa lukematta, niin peli on selvä.
Mieti nyt itse vähän, mitä kirjoitat. Sanot, että viestin lukeminen ei auta ymmärtämistä. Oletko siis sitä mieltä, että Paratiisin poika ei osaa lukea, vai sitä, että Paratiisin poika ei ymmärrä lukemastaan mitään? Aika asiaton kommentti sinulta joka tapauksessa.
raakaliha kirjoitti:
Provoamalla saatte aikaan lisää vastaavaa takaisin, joten miksiköhän pidätte yllä tätä nyt tässä?
Paratiisin poika jatkaa keskustelua, joten vaikea sitä on muidenkaan lopettaa. Kun sinulla kerran on noin paljon varaa valittaa muiden toiminnasta, niin kerropa, miten sinusta saataisiin Paratiisin poika tajuamaan, että tässä projektissa ei ole mitään järkeä, kun taidot ja kärsivällisyys eivät riitä? Ei projektia voi tehdä niin, että kysyy kaikkea ja saa valmista koodia suuremman määrän, kuin lopulliseen tuotteeseen edes tarvitaan.
Tässä on kyse ehkä enemmän siitä, että onko järkeä ylipäätään välittää keskustelusta niin paljon, että ottaa siihen osaa ja käytännössä nolaa itsensä sillä, että yrittää "puhua järkeä" jollekulle, johon aiemmatkaan viestit eivät ole auttaneet.
Tarkoitin, että jos käyttäjä ei itse tajua em. tekeleen olevan korkeintaan yksityishiekkalaatikoksi kelpaava roska, niin selittäminen on turhaa, varsinkin "Onneksi olkoon vain :D" -tyylillä. Laittaisin: ketju lukkoon, viimeinen varoitus olla kommentoimatta VJGO Tube -projektia sanallakaan, yhtään valmiskoodiriviä ei saa pyytää, omien harjoitusten testauspyyntöjen kielto, ylipäätään testauspyyntöjä korkeintaan yksi kolmessa päivässä; muuten suora esto.
Mitä te mollaatte? Tuo TXT service on mainio.
raakaliha. lopeta dissaamiseni.
metabolix. tuon vk:n tarkoitus oli toimia. ei näyttää.
ilmari123. kiitos kommentista ja hyvä kun pidät
Paratiisin poika kirjoitti:
tuon vk:n tarkoitus oli toimia. ei näyttää.
Kuitenkin kirjoitit sinne, että se on tehty putkalaisten ehdotuksesta. Täällä ei ehdotettu, että väsäisit nopeasti epämääräisen vieraskirjan. Ehdotuksen idea oli, että tekisit jotain pientä mahdollisimman hyvin ja huolellisesti. Jos et ikinä tee asioita kunnolla, et ikinä opi ohjelmoimaan kunnolla. VJGO Tuben vääntämisestä opit ehkä vähän jotain, mutta oppisit sata kertaa enemmän tekemällä pienen vieraskirjan hallintatyökaluineen oikein viimeisen päälle, niin hyvin, että taitavatkin koodarit voisivat sitä rehellisin mielin kehua onnistuneeksi, toimivaksi ja tyylikkääksi.
voitteko te kertoa kuinka asennan sen mobilevideoprotokollan?
Ei, me ei tiedetä, mitä "mobiilivideoprotokollan asennus" tarkottaa.
siis se protokolla jota mm. youtube käyttää... =)
Useimmat Youtuben videot tulee HTTP:n yli.
(Edit: Joo, useimmat, joihinki käytetään näköjään rtmp:tä, mut ei se tarkota, ettetkö sää pärjäis http:llä)
Tein pussillisen popcornia ja luin tän threadin läpi. Melkoista menoa :)
kiva että tykkäät. kertokaa miten se onnistuu ku katsokaas puhelimellakin halutaan nykyään katsoa videoita. -.- ja olen muutenkin kiinnostunut siitä miten erilaisia asioita voi asentaa palvelimelle :D
Edelleenkään kukaan ei tiedä mitä oikeastaan haluat sinne palvelimelle asentaa, niin on vaikea neuvoa.
Eli avoimet kysymykset on oikeastaan:
1) Mikä protokolla on mielestäsi mobiilivideoprotokolla?
Youtube käyttää videoiden lähettämiseen mm. http-protokollaa, mutta se ei varsinaiseti ole mobiilivideoprotokolla.
2) Mitä tarkoitat protokollan asentamisella palvelimelle?
a) ko. protokollaa tukevan palvelinohjelmiston asentamista
b) ko. protokollaa tukevan asiakasohjelmiston asentamista
c) ko. protokollan lisäämistä protokollien oletusporttien listalle
d) jotain muuta, mitä?
Jos haluat tasan saman palvelinohjelman kuin youtubessa, niin joudut pyytämään Googlelta. Näyttäisi olevan gvs 1.0, eli veikkaan tarkoittavan "Google Video Server"
Tai Googlelta pyytämisen sijaan tosiaankin voit käyttää vapaasti aiemmin ehdotettua YouTube APIa, jolloin voit lähettää videoita sivuiltasi suoraan YouTubeen.
YouTube on kuitenkin sen verran iso palvelu, että se toimii lähes kaikilla mobiililaitteilla suoraan, ja voit listata videoita omille sivuillesi ilman ongelmia.
sain sen rtps protokollan toimimaan. tai no se sanoo että yhdistetään, mutta sitten antaa virheen. mikä vikana?
ps. noi youtube apit on maukkaita :P
Antaa minkä virheen?
Yhdistäminen ei onnistunut. Menin vain osoitteeseen rtsp(sejoku)://vjgo.arkku.net/mediaplayer/
Onko se vai eikö ole toimiva video? Yritäpä selvittää se ensitöiksesi.
blaze@nanoha ~ $ nmap -PN -p 554,1935 vjgo.arkku.net Starting Nmap 5.21 ( http://nmap.org ) at 2011-03-29 15:32 EEST Nmap scan report for vjgo.arkku.net (85.14.201.130) Host is up. rDNS record for 85.14.201.130: http.arkku.net PORT STATE SERVICE 554/tcp filtered rtsp 1935/tcp filtered rtmp Nmap done: 1 IP address (1 host up) scanned in 3.04 seconds
...miksi en ole yllättynyt.
Toisin sanoen et ole asentanut yhtään mitään etkä saanut yhtään mitään toimimaan. Arkku.netin palvelimella ei ole RTSP-palvelinohjelmaa.
Eikö ole jo tullut selväksi, että RTSP:n käyttöä varten sinun pitää asentaa palvelimelle (omalle palvelimellesi, webhotelliin et voi) RTSP-palvelinohjelma ja avata palomuurista sen käyttämä portti (ilmeisesti 554)?
no väitinkö asettaneeni jotain? kertokaa nyt siis että miten asennan omalle palvelimelle sen rtps ohjelman
Paratiisin poika kirjoitti:
no väitinkö asettaneeni jotain? kertokaa nyt siis että miten asennan omalle palvelimelle sen rtps ohjelman
No et suoraan väittänyt, mutta oletimme tietenkin että et olisi niin pöljä, että yrität käyttää jotain sellaista mitä et ole asentanut.
Paratiisin poika kirjoitti:
Yhdistäminen ei onnistunut. Menin vain osoitteeseen rtsp(sejoku)://vjgo.arkku.net/mediaplayer/
videos/test.3gp puhelimellani. Tuo on ihan toimiva video tietääkseni. :D
Ilmeisesti siis olimme väärässä.
Väitit, että sait RTSP:n toimimaan, jolloin on järkevää olettaa, että olisit ensin edes asentanut sen. Ei tullut mieleen, että olisit noin tohelo.
Testasinpa. Ei ollut vaikeaa. Voisit opetella itsekin selvittämään asioita.
Asenna VLC, jossa on sellainen RTSP-kykyinen osa kuin VLM. Käynnistä se komentoriviltä esimerkiksi näin:
vlc --intf telnet --telnet-port 4212 --telnet-password kissa2 --rtsp-host 0.0.0.0:5540
Komennot voi lähettää telnetillä porttiin 4212, telnetin salasana on kissa2, ja streamit tulevat portista 5540. Komentoja voi lähettää vaikka seuraavalla koodilla. Tiedostonimet ovat suhteessa VLC:n ajohakemistoon, ja välilyönnit ym. erikoismerkit luultavasti vaatisivat jotain erikoiskäsittelyä, joten älä käytä niitä.
<?php class VML { private $sock; private function komenna($komento) { fwrite($this->sock, $komento."\r\n"); } public function __construct() { $this->sock = @fsockopen("127.0.0.1", 4212, $errno, $errstr, 5); if (!$this->sock) { throw new Exception("fsockopen: $errno: $errstr"); } $this->komenna("kissa2"); } public function __destruct() { $this->komenna("quit"); fclose($this->sock); } public function lisaa($tiedosto) { $this->komenna("new {$tiedosto} vod enabled input {$tiedosto}"); } public function poista($tiedosto) { $this->komenna("del {$tiedosto}"); } } $vml = new VML(); $vml->lisaa("kappale.mp3"); // rtsp://palvelin:5540/kappale.mp3 sleep(10); $vml->poista("kappale.mp3");
Tarvitset ehkä lisäksi jotain mux- ja output-asetuksia, jos tiedostosi eivät ole valmiiksi kunnollisessa muodossa.
Kiitoksia tästä selvästä avusta. heti kun saan Linuxin toimimaan palvelimena niin asennan nuo. kiitoksia paljon oikeasti
Eh. Luin ensin sivut 1-3, aluksi ihan huumorilla, mutta sitten alkoi hieman harmittaa. Sitten hyppäsin sivulle 12 ja sama meno näköjään jatkuu edelleen.
Sanoisin, ettei tämän kyseisen koodarin auttamisessa ole mitään järkeä. Ohjelmoinnin perusteet pitää hommata jostain muualta, ja niitä kannattaisi olla sen verran ettei tarvitse jokaista perusasiaa kysyä erikseen. Jos tyyppi ei tajua eikä kuuntele, ja porukka vaan kirjoittaa tälle kaiken koodin valmiiksi, tilanne voi mennä pian tähän suuntaan: http://thedailywtf.com/Articles/The-Speed-of-Code.aspx
Olen itsekin nähnyt kun porukka on valmistunut periaatteessa päteväksi koodariksi erittäin huonoilla ohjelmointitaidoilla. Jos he saavat töitä, kuka ne työt tekee? Ei ehkä millään tavalla todennäköistä tässä tapauksessa, mutta kuitenkin.
Eikä pahalla kys. koodaria kohtaan. Et vaan kovinkaan hyvin opi jos yrität sokkona väsätä turhan monimutkaista systeemiä.
suurimpia ongelmiani ovat pystyä hahmottamaan esim että miten saan jonku vaikean jutun tehtyä. ei koodi. sitten toinen suurista ongelmista on se, että jos pitää tehdä jotain käyttäen funktioita, joista ei ole koskaan kuullutkaan. tosin sekin liittyy usein hahmotus ongelmaan. :D
Paratiisin poika kirjoitti:
sitten toinen suurista ongelmista on se, että jos pitää tehdä jotain käyttäen funktioita, joista ei ole koskaan kuullutkaan.
Joku voisi väittää, että se johtuu siitä, ettet omatoimisesti tutki mitään, etkä viitsi perehtyä ohjeilmointikieleen, vaan odotat vaan foorumeilla, koska joku vastaa kysymykseesi/pulmaasi.
Mielestäni ohjelmoijan tärkein ominaisuus on ongelmanratkaisukyky, eli juurikin tuo että hahmottaa miten joku juttu saadaan tehtyä. Sen jälkee kun tietää mitä haluaa käskeä tietokoneen tekemään, varsinaisen koodin pystyy kyllä kirjoittamaan suunnilleen kuka vaan - ilman kokemusta toki kestää kauemmin ja joutuu lukemaan dokumentaatiota enemmän.
Itselläni on vähän päinvastainen ongelma. Minua kiinnostaa selvittää, miten jutut toimii, hahmottaa kokonaisuudet ja ratkaista ongelmat. Sitten siinä vaiheessa kun tiedän jo miten homma kannattaa tehdä niin ei oikein nappaisi kirjoittaa sitä varsinaista koodia. Sinänsähän se on tietysti helppoa, riittää kun saa motivoitua itsensä.
Kyllä minä osaan hahmottaa että miten joku asia tehdään. Ongelmana on joskus (tai no yleensä) se, että en ole koskaan kuullutkaan mistään tyylistä tehdä jotain juttua, tai tiedä functioita joilla tehdä joku juttu. Esim jos en tietäisi funktiota explode, niin en todellakaan osaisi pilkkoa tekstinpätkää. Hyvä esimerkki siitä, etten osannut jotain millään, on tuo samankaltaisia videoita laatikko. toinen vielä parempi esimerkki on se, että miten saan videon pyörimään puhelimella netin kautta streamilla, kun en edes koneella osaa ko. asiaa käyttää.
Jotenkin mielestäni ristiriitaisia väitteitä:
Paratiisin poika kirjoitti:
Kyllä minä osaan hahmottaa että miten joku asia tehdään.
Paratiisin poika kirjoitti:
Esim jos en tietäisi funktiota explode, niin en todellakaan osaisi pilkkoa tekstinpätkää.
Jos en voisi käyttää explode, split tms, valmista funktiota, niin 10 sekunnin miettimisellä tulisi mieleen kaksikin erilaista tapaa tehdä asia.
Ei nuo valmiit funktiotkaa mitään taikuutta ole, vaan ne on ihan samalla tavalla koodattu kuin kaikki muutkin ohjelmat. Merkkijonon jakaminen on kyllä sen sortin ongelma, ettei jos siihen ei pysty keksimään muuta ratkaisua kuin valmiin funktion käyttämisen, niin jotain on pahasti hukassa.
Osaan joissain tapauksis ja tiedän et funktiot on tehty kuten kaikki muukin koodaus.
empty()
<?php function empty($text) { if($text == "") { return true; exit; } if($text == "0"){ return true; exit; } return false; }
Äkkiä tehtynä. Saattaa olla virheellinen mut no joo kuitenki.
Paratiisin poika kirjoitti:
Osaan joissain tapauksis ja tiedän et funktiot on tehty kuten kaikki muukin koodaus.
output = first "str|foo".each do |letter| output = second if letter == "|" output << letter end
Mod. lisäsi kooditagit.
Paratiisin poika kirjoitti:
Osaan joissain tapauksis ja tiedän et funktiot on tehty kuten kaikki muukin koodaus.
empty()
<?php function empty($text) { if($text == "") { return true; exit; } if($text == "0"){ return true; exit; } return false; }Äkkiä tehtynä. Saattaa olla virheellinen mut no joo kuitenki.
Onneksi ei ole bloatti :3
Asiantuntijavinkki: PHP:ssä empty()
ei ole funktio. Jos se olisi funktio niin empty($an_undefined_variable)
tuottaisi virheen, mutta emptyn kanssa ei tuotakaan.
Lähelle pääset tekemällä funktiosi parametristä referenssin mutta en ole ihan varma pystytkö emuloimaan emptyä täysin.
Voitko selittää sanat "referenssi" ja "emuloida"?
<?php function empty($variable == "0") { //...
Paratiisin poika kirjoitti:
Voitko selittää sanat "referenssi" ja "emuloida"?
referenssi = viittaus, lähde, vertailupohja. Tässä tapauksessa tuo ensimmäinen.
emuloida = matkia, jäljitellä.
vjgo.arkku.net ei toimi :(
Aihe on jo aika vanha, joten et voi enää vastata siihen.