Olisiko kellään linkata ohjetta tai antaa lyhyt mallikoodi, tarkoituksena olisi tehdä tyy.li:n kaltaiset sivut, mutta en tajua toteutusta tuohon siirtmiseen.
http://tyy.li/
Tallennat käyttäjän syöttämän osoitteen tietokantaan ja arvot jonkun merkkijonon sen kaveriksi tallennettavaksi. Kun mennään osoitteeseen domain.fi/arvottu-merkkijono, sitä verrataan tietokannassa oleviin ja ohjataan osoitteeseen, joka on liitetty tuohon merkkijonoon.
Tuolla sivullahan on looginen virhe.
Kun "lyhentää" esim osoitetta http://iki.fi
niin vastauksena antaa "Lyhennetty! http://tyy.li/144"
Minusta tuo on pidennetty eikä lyhenetty :)
Suunnilleen näin:
taulu:
CREATE TABLE linkki ( id INTEGER PRIMARY KEY AUTO_INCREMENT, hash BINARY(64) NOT NULL UNIQUE, url VARBINARY(2048) NOT NULL, lisatty TIMESTAMP DEFAULT CURRENT_TIMESTAMP, kaytetty TIMESTAMP, kertoja INTEGER NOT NULL DEFAULT 0 )
index.php:
<?php // TODO: toteuta itse nämä: sql_insert, sql_update, sql_select. function html_alku() { ?> <!DOCTYPE html> <meta charset="UTF-8" /> <title>Lyhentäjä</title> <h1>Lyhentäjä</h1> <?php } function etusivu() { html_alku(); ?> <form action="?post" method="post"> <input type="url" name="url" /> <button type="submit">Lyhennä!</button> </form> <?php } function lisaa($url) { $url = filter_var($url, FILTER_VALIDATE_URL); if (!$url || !preg_match('#(https?|ftp)://#', $url)) { http_response_code(403); die("URL ei kelpaa!"); } $hash = hash("sha512", $url, true); sql_insert("INSERT IGNORE INTO linkki (hash, url) VALUES (?, ?)", $hash, $url); $id = sql_select("SELECT id FROM linkki WHERE url = ?", $url); $uusi = "http://{$_SERVER["HTTP_HOST"]}/?{$id}"; // ilman .htaccessia $uusi = "http://{$_SERVER["HTTP_HOST"]}/{$id}"; // .htaccessin kanssa html_alku(); echo "<p>Osoite: <a href='$uusi'>$uusi</a></p>"; } function ohjaa($id) { $url = sql_select("SELECT url FROM linkki WHERE id = ?", $id); if (!$url) { http_response_code(404); die("Osoite ei ole käytössä!"); } sql_update("UPDATE linkki SET kaytetty = NOW() WHERE id = ?", $id); header("Location: $url"); } if (!empty($_POST["url"])) { lisaa($_POST["url"]); } elseif (preg_match('/^[0-9]+$/', @$_SERVER["REQUEST_URI"], $m)) { ohjaa($m[0]); } elseif (preg_match('/^[0-9]+$/', @$_SERVER["QUERY_STRING"], $m)) { ohjaa($m[0]); } else { etusivu(); }
.htaccess:
RewriteEngine On RewriteRule ^[0-9]+$ /index.php
Sitten jos teet samanlaisen palvelun, kannattaa generoida linkit niin, ettei niitä jokainen pysty arvaamaan.
http://tyy.li/137
http://tyy.li/127
nsfw jne
Ehkäpä sillä palvelulla ei enää tee mitään, jos "lyhytosoitteet" ovat kymmeniä merkkejä pitkiä vain hakukoneystävällisyyden takia.
Tuo oli jo tiedossa, miten toteuttaisin tuon, mutta tähän projektiin en sitä edes tarvitse. Asian kertominen oli aika huonosti sanottu, mutta miten Javascriptillä saa saman sivun sisällä piilotettua ja laitettua näkyviin DIVejä?
No oli kyllä aika epäselvästi kysytty. Käytä vaikka jQuery-kirjaston funktioita slideUp ja slideDown. Näkeehän sen tuolta sivun lähdekoodista. Jatketaan tästä oikeasta kysymyksestä uudessa aiheessasi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.