...
Code Block |
---|
+-------------+--------------+------+-----+-------------------+----------------+ | 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 Tietueen yksilöllinen tunnus. Luodaan automaattisesti.
- message: käyttäjän Käyttäjän kirjoittama viesti.
- parent: määrittää onko viesti kommenttiMäärittää onko viestin aseman hierarkiassa. Jos arvo on muu kuin -1 , se on kommentti. Tietueen , jolloin arvo on samalla kommentoidun viestin id. Oletusarvona on -1, joka tarkoittaa kyseessä olevan ensimmäisen tason viestin.
- Rating: ylösYlös- ja alas-äänien kokonaisarvo.
- user_id: Sen seinän id, johon viesti kuuluu
- submit_time: Aika, jolloin viesti on tallennettu tietokantaan.
...
Palveluun liittyvä php voidaan jakaa kahteen kolmeen kategoriaan: Sivulle Järjestelmän ominaisuuksien alustaminen, sivulle lähetetyn tiedon käsittelevään osaan 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:
Code Block |
---|
//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):
Code Block |
---|
//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:
Code Block |
---|
<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 datan puuttuessa.
Code Block |
---|
// Check if there's post data
if (isset($_POST['action'])){
...
} |
Code Block |
---|
// 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 ;)
$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' ) ;
}
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' ) ;
}
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' ) ;
}
}
|