You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

1. Kuvaus

Palvelun lähtökohtana on palautteen antaminen ja vastaanottaminen avoimen keskustelun hengessä. Palautteen antaminen tapahtuu nimettömänä.

Käyttäjä voi rekisteröitymällä luoda itselleen seinän. Muut käyttäjät voivat jättää seinälle viestejä (palautetta). Jos viestin lähettäjän yksilöiminen ei muuten ole mahdollista, voidaan siihen liittää Facebook-kirjautuminen. Lähettäjän henkilöllisyys jää silloin ainoastaan ylläpidon tietoon, eikä sitä näytetä sivulla.

Viestejä voi kommentoida tai äänestää joko ylös tai alas. Äänestettäessä ylös viestin arvo nousee yhdellä. Äänestettäessä alas viestin arvo laskee yhdellä. Arvo esitetään kokonaislukuna viestin yhteydessä ja ne järjestetään sen mukaan. Käyttäjä voi äänestää vain kerran yksittäistä viestiä.

2. Tekninen toteutus

2.1 Tietokannat

Palvelun tietokanta on jaettu kahteen tauluun: Käyttäjiin ja viesteihin. Viestit-taulu sisältää kaikki palveluun lähetetyt viestit. Käyttäjät-taulu tallentaa tiedot rekisteröityneistä käyttäjistä ja luoduista seinistä.

2.1.1 Käyttäjät

Ei vielä toteutettu.

2.1.2 Viestit

Taulun tietueet:

+-------------+--------------+------+-----+-------------------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------------+--------------+------+-----+-------------------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| message | varchar(500) | YES | | NULL | |

| parent | int(11) | YES | | -1 | |

| rating | int(11) | YES | | 0 | |

| user_id | int(11) | YES | | NULL | |

| submit_time | timestamp | NO | | CURRENT_TIMESTAMP | |

+-------------+--------------+------+-----+-------------------+----------------+
  • id: Tietueen yksilöllinen tunnus. Luodaan automaattisesti.
  • message: Käyttäjän kirjoittama viesti.
  • parent: Määrittää onko viestin aseman hierarkiassa. Jos arvo on muu kuin -1 se on kommentti, jolloin arvo on kommentoidun viestin id. Oletusarvona on -1, joka tarkoittaa kyseessä olevan ensimmäisen tason viestin.
  • Rating: Ylös- ja alas-äänien kokonaisarvo.
  • user_id: Sen seinän id, johon viesti kuuluu
  • submit_time: Aika, jolloin viesti on tallennettu tietokantaan.

2.2 PHP

Palveluun liittyvä php voidaan jakaa kolmeen kategoriaan: Järjestelmän ominaisuuksien alustaminen, sivulle lähetetyn tiedon käsittely ja tietokannasta haetun tiedon perusteella sivun sisällön muodostavaan osaan.

2.2.1 Ominaisuuksien alustaminen

Yhdistäminen tietokantaan ja sen onnistuessa asetusten määrittely:

//connect to database
try
{
	$mysql_conn = new PDO ("mysql:host=localhost;dbname=koala", "vompatti", "opossumi");	
}catch (PDOException $e){
	die("Virhe: " . $e->getMessage());
}

// error handling
$mysql_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// merkistö
$mysql_conn->exec("SET NAMES utf8");

Jos sovelluksen vaatimaa taulua ei ole tietokannassa se luodaan (IF NOT EXISTS):

//create table if doesn't exist
try
{
$mysql_conn->exec("CREATE TABLE IF NOT EXISTS peukku_viestit (
	id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
	message VARCHAR(500), 
	parent INT DEFAULT -1, 
	rating INT DEFAULT 0, 
	user_id INT, 
	submit_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");
}catch (PDOException $e){
	die("Virhe: " . $e->getMessage());
}

2.2.2 Lähetetyn tiedon käsittely

Jokaisessa palvelun lomakkeessa on piilotettu kenttä, joka liitetään käyttäjän lähettämiin tietoihin. Se määrittää, minkä toiminnon lomake suorittaa:

<input name="action" type="hidden" value="new_message" />

Ensimmäiseksi tarkistamme onko käyttäjän lähettämää dataa olemassa. Se tehdään selvittämällä onko tietoihin liitetty aikaisemmin mainitsemani action-kenttä. Jos sitä ei suoriteta, tapahtuu virhe lähetetyn datan puuttuessa.

// Check if there's post data
if (isset($_POST['action'])){

   ...

}

Edellisen ehtolausekkeen sisältä löytyy varsinainen käyttäjän lähettämän tiedon käsittely.
Toiminto valitaan selvittämällä action-kentän arvo, jonka PHP on tallentanut post-datan sisältävään $_POST-muuttujaan.

Ensimmäiseksi käsittelemme tapauksen, jossa käyttäjä haluaa lisätä uuden viestin tietokantaan. Viestin erikoismerkit muunnetaan HTML-muotoon htmlspecialchars-funktiolla, jotta käyttäjän ei olisi mahdollista liittää omaa koodia sivuille viestien välityksellä.
PHP:n DBO-kirjaston prepare-metodi huolehtii siitä, ettei käyttäjän ole mahdollista syöttää palveluun omia SQL-komentoja.

	// Choose the correct action based on the value of the $_POST['action']
	if ($_POST['action'] == 'new_message')
	{
		// Add a message to the database
		// prepare query
		// save it with htmlspecialchars in order to stop clever javascripting and HTML-tags ;)
		$query = $mysql_conn->prepare("INSERT INTO peukku_viestit (message) VALUES ('" . htmlspecialchars($_POST['message']) . "')");
		// run query
		$query->execute();
		
		//remove post data by redirecting to ourselves
		header( 'Location: index.php' ) ;
		
	}

Peukku ylös:

	else if ($_POST['action'] == 'peukuta')
	{
		// Update +rating to the database
		// prepare query
		$query = $mysql_conn->prepare("UPDATE peukku_viestit SET rating = rating + 1 WHERE id = '" . $_POST['id'] . "'");
		// run query
		$query->execute();
		
		//remove post data by redirecting to ourselves
		header( 'Location: index.php' ) ;
	
	}

Peukku alas:

	else if ($_POST['action'] == 'peukuta_nega')
	{
		// Update -rating to the database
		// prepare query
		$query = $mysql_conn->prepare("UPDATE peukku_viestit SET rating = rating - 1 WHERE id = '" . $_POST['id'] . "'");
		// run query
		$query->execute();
		
		//remove post data by redirecting to ourselves
		header( 'Location: index.php' ) ;
	
	}
	
}
  • No labels
You must log in to comment.