Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Miten tehdä sivut kuten tyy.li?

Sivun loppuun

tiituus [07.02.2014 17:12:05]

#

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/

Macro [07.02.2014 17:46:45]

#

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.

makumaku [07.02.2014 23:57:02]

#

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 :)

Metabolix [08.02.2014 11:45:30]

#

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

Deffi [08.02.2014 12:54:35]

#

Sitten jos teet samanlaisen palvelun, kannattaa generoida linkit niin, ettei niitä jokainen pysty arvaamaan.

http://tyy.li/137
http://tyy.li/127

nsfw jne

The Alchemist [08.02.2014 14:51:16]

#

Ehkäpä sillä palvelulla ei enää tee mitään, jos "lyhytosoitteet" ovat kymmeniä merkkejä pitkiä vain hakukoneystävällisyyden takia.

tiituus [08.02.2014 16:32:34]

#

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ä?

Metabolix [08.02.2014 16:41:13]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta