Linkkilista joka on toteutettu php:llä. Tarvitsee MySQL tietokannan.
Admin osoissa ei ole salasanasuojausta, sen saatte tehdä itse. Valikko on omassa tiedostossa, jotta alueiden poistaminen/lisääminen/muokkaaminen olisi helpompaa.
Ensin sinun pitää luoda taulu tietokantaan seuraavalla komennolla:
CREATE TABLE linkit ( osoite VARCHAR(100), linkkiteksti VARCHAR(100), kuvaus TEXT, ryhma INT(2) )
Tämän jälkeen kopioi tiedostot palvelimelle.
Kun lisäät linkkejä, muista laittaa http:// osoitteen alkuun.
valikko.php
<select name="ryhma"> <option value=0>Alue 1</option> <option value=1>Alue 2</option> <option value=2>Alue 3</option> <option value=3>jne.</option> </select>
linkit.php
<html><head><title>Linkit</title></head><body>
<h1>Linkit: </h1>
<?php
//Otetaan "sarja" muuttujaan tieto siitä mikä kategoria on kyseessä
$sarja = $_GET['sarja'];
//tulostetaan taulun aloitus sekä otsikkosolut
echo "<table>";
echo "<tr><td colspan=2>";
echo "<form method=post action=\"toimitus.php\">";
//luodaan tarvittava piilokenttä. Katso lisää listauksesta 3
echo "<input type=\"hidden\" name=\"tehtava\" value=3>";
//Liitetän valikko alueista ja lopetetaan lomake
include("../valikko.php");
echo " <input type=\"submit\" value=\"Siirry\"></form>";
echo "<hr width=218 align=left></td></tr>";
echo "<tr><th>Linkki</th><th>Kuvaus</th></tr>";
//Pistä asetukset oikein
$serveri = ""; //Palvelimen osoite
$tunnus = ""; //Tunnus tietokantaan
$ssana = ""; //Sakasana tietokantaan
$db = ""; //Tietokannan nimi
//Otetaan yhteys tietokantaan
$mysql = mysql_connect($serveri,$tunnus,$ssana) or die ("Tietokantaan ei saatu yhteyttä");
mysql_select_db($db, $mysql);
//Kysely tietokantaan
$kysely = mysql_query("SELECT * FROM linkit", $mysql);
//for-lause käy läpi kaikki rivit tietokannassa
for ($tietue = 0; $tietue < mysql_num_rows($kysely); $tietue++) {
$osoite = mysql_result($kysely, $tietue, "osoite");
$linkkiteksti = mysql_result($kysely, $tietue, "linkkiteksti");
$kuvaus = mysql_result($kysely, $tietue, "kuvaus");
$ryhma = mysql_result($kysely, $tietue, "ryhma");
//poistetaan ylimääräiset kenoviivat osoite ja kuvaus kentistä
$osoite = stripslashes($osoite);
$kuvaus = stripslashes($kuvaus);
//tee seuraavista riveistä kommentteja(// rivin alkun), jos haluat sallia html:än linkkitekstissä
$linkkiteksti = str_replace("<", "<", $linkkiteksti);
$linkkiteksti = str_replace(">", ">", $linkkiteksti);
//tee seuraavista riveistä kommentteja(// rivin alkun), jos haluat sallia html:än kuvauksssa
$kuvaus = str_replace("<", "<", $kuvaus);
$kuvaus = str_replace(">", ">", $kuvaus);
//jos ryhma on saman arvoinen kuin sarja, tulostetaan linkki
if($ryhma == $sarja)
{
echo "<tr><td width=200><a href=\"$osoite\">$linkkiteksti</a></td><td width=600>$kuvaus</td></tr>";
echo "<tr><td colspan=2><hr></td></tr>";
}
}
//suljetaan yhteys
mysql_close($mysql);
echo "</table>";
?>
</body></html>toimitus.php
<?php
//Ohjelmalle välitetään piilokmenttä "tehtava", josta tämä skripti katsoo mikä toimenpide suoritetaan.
//Otetaan tehtävä talteen, josta katsotaan mikä toimitus
//tehdään:
$tehtava = $_POST['tehtava'];
//Pistä asetukset oikein
$serveri = ""; //Palvelimen osoite
$tunnus = ""; //Tunnus tietokantaan
$ssana = ""; //Sakasana tietokantaan
$db = ""; //Tietokannan nimi
//Otetaan yhteys tietokantaan
$mysql = mysql_connect($serveri,$tunnus,$ssana) or die ("Tietokantaan ei saatu yhteyttä");
mysql_select_db($db, $mysql);
///////////////////////////////////
//jos tehtava on 0, tallennetaan, on kyseessä linkin tallennus tietokantaan
if($tehtava == 0) {
$posts = array('osoite','linkkiteksti','kuvaus'); // tarkistettavat lomakkeen kentät
$error == false;
foreach($posts as $post){
if(($$post = get_magic_quotes_gpc() ? $_POST["$post"] : mysql_escape_string($_POST["$post"])) == "")
$error .= "Et ole täyttänyt kenttää <b>\"$post\"</b>.<br >";
}
if($error){
die("<html><head><title>Error</title><body>$error</body></html>");
}else{
//SQL-lause
$sql = mysql_query("INSERT INTO linkit (osoite,linkkiteksti, kuvaus, ryhma)
VALUES ('$osoite','$linkkiteksti','$kuvaus','$ryhma')", $mysql);
//Jos linkinlisäys tietokantaan onnistui, tulostetaan käyttäjälle linkit adminiin ja itse listaan...
if(sql)
{
print "<a href=\"admin.php\">Admin</a><br>";
print "<a href=\"linkit.php\">Linkkilista</a><br>";
print "<a href=\"linkit.php?sarja=$ryhma\">kohtaan, johon linkki lisättiin</a><br>";
//...muuten tulostetaan virheilmoitus
} else {
print "Virhe tietoja tallentaessa!";
}
}
///////////////////////////////////
//jos tehtava on 1, poistetaan linkki
} else if($tehtava == 1) {
$osoite = $_POST['poistettava']; //poistettavan linkin osoite
// Jos käyttäjä ei ole täyttänyt kenttää, tulostetaan virheilmoitus
if($osoite == ""){
$error .= "Et kertonut mikä linkki poistetaan.<p>";
}
if($error){
die("<html><head><title>Error</title><body>$error</body></html>");
}else{
//SQL-komento
$sql = mysql_query("DELETE FROM linkit WHERE osoite = '$osoite'", $mysql);
//Jos linkinposto onnistui, tulostetaan käyttäjälle linkit adminiin ja itse listaan...
if(sql)
{
print "<a href=\"admin.php\">Admin</a><br>";
print "<a href=\"linkit.php\">Linkkilista</a><br>";
//...jos on tapahtunut virhe tulostetaan virheilmoitus
} else {
print "Virhe tietoja tallentaessa!";
}
}
///////////////////////////////////
//jos tehtävä on 2, päivitetään linkki:
} else if($tehtava == 2) {
$posts = array('vosoite', 'osoite','lt','kuvaus'); // tarkistettavat lomakkeen kentät
$error == false;
foreach($posts as $post){
if($$post == ""){
$error .= "Vaadittu kenttä <b>\"$post\"</b> puuttuu<br >";
}
}
// if(($$post = get_magic_quotes_gpc() ? $_POST["$post"] : mysql_escape_string($_POST["$post"])) == "")
if($error){
die("<html><head><title>Error</title><body>$error</body></html>");
}else{
//SQL-lause
$sql = mysql_query("UPDATE `linkit` SET `osoite` = '$osoite', `linkkiteksti` = '$lt', `kuvaus` = '$kuvaus', `ryhma` = '$ryhma' WHERE `osoite` = '$vosoite' LIMIT 1", $mysql);
if(sql)
{
print "<a href=\"admin.php\">Admin</a><br>";
print "<a href=\"linkit.php?\">Linkkilista</a><br>";
print "<a href=\"linkit.php?sarja=$ryhma\">kohtaan, johon linkki päivitettiin</a><br>";
//...muuten tulostetaan virheilmoitus
} else {
print "Virhe tietoja tallentaessa!";
}
}
///////////////////////////////////////////////////////////
//jos tehtävä on 3, siirretään käyttäjä sille sivulle jolle lomakkeen "ryhma" -kenttä osoittaa.
//Kuuluu "linkit.php" sivulla liikkumiseen
} else if($tehtava == 3) {
$ryhma = $_POST['ryhma'];
header("Location: linkit.php?sarja=$ryhma");
///////////////////////////////////
//jos tehtävä ei ole 0, 1 tai 2 on tapahtunut virhe
} else {
print" Virhe ohjelman toiminnassa.";
}
mysql_close($mysql);
?>admin.php
<html><head><title>Linkit: Admin</title></head><body> <table> <tr><td colspan=2> <h1>Linkit: admin: </h1> </td></tr> <?php //Jos mode on lisaa, näytetään lisäys lomake if($_GET['mode']==lisaa) {print " <tr><td colspan=2> <h3>Lisää linkki: </h3> </td></tr> <form action=\"toimitus.php\" method=\"post\"> <input type=\"hidden\" name=\"tehtava\" value=0> <tr><td>Osoite: </td><td><input type=\"text\" name=\"osoite\" size=23></td></tr> <tr><td>Linkkiteksti: </td><td><input type=\"text\" name=\"linkkiteksti\" size=23></td></tr> <tr><td>Kuvaus: </td><td><input type=\"text\" name=\"kuvaus\" size=23></td></tr> <tr><td>Kategoria: </td> <td>"; include("valikko.php"); print " </td></tr> <tr><td><input type=\"submit\" value=\"Lisää linkki!\"></td><td><input type=\"reset\" value=\"Tyhjennä\"></td></tr> </form> "; } //lopeteaan ehto //Jos mode on poista, näytetään poisto lomake else if($_GET['mode']==poista) {print " <tr><td colspan=2> <p><h3>Poista linkki: </h3> </td></tr> <form action=\"toimitus.php\" method=\"post\"> <input type=\"hidden\" name=\"tehtava\" value=1> <tr><td>Poistettavan linkin osoite: </td><td><input type=\"text\" name=\"poistettava\" size=23></td></tr> <tr><td><input type=\"submit\" value=\"poista linkki!\"></td><td><input type=\"reset\" value=\"Tyhjennä\"></td></tr> </form> "; } //lopeteaan toinen ehto //Jos mode on paivita, näytetään päivitys lomake else if($_GET['mode']==paivita) {print " <tr><td colspan=2> <p><h3>Päivitä linkki: </h3> </td></tr> <form method=\"post\" action=\"toimitus.php\"> <input type=\"hidden\" name=\"tehtava\" value=2> <tr><td>Vanha osoite: </td><td><input type=\"text\" name=\"vosoite\" size=23></td></tr> <tr><td>Uusi osoite: </td><td><input type=\"text\" name=\"osoite\" size=23></td></tr> <tr><td>Linkkiteksti: </td><td><input type=\"text\" name=\"lt\" size=23></td></tr> <tr><td>Kuvaus: </td><td><input type=\"text\" name=\"kuvaus\" size=23></td></tr> <tr><td>Kategoria: </td><td>"; include("valikko.php"); print " </td></tr> <tr><td><input type=\"submit\" value=\"Päivitä linkki!\"></td><td><input type=\"reset\" value=\"Tyhjennä\"></td></tr> </form> "; } //lopetetaan viimeinenkin ehto ?> <tr><td colspan=2><p> <a href="admin.php?mode=lisaa">Linkkien lisäys</a> <a href="admin.php?mode=poista">Linkkien poisto</a> <a href="admin.php?mode=paivita">Linkkien päivitys</a> <a href="linkit.php">Linkkilista</a> </td></tr> </table> </body> </html>
hienoo ;)
Käyttäjien syötteet olisi hyvä tarkistaa (+ muuntaa turvalliseen muotoon) ennen kannan käpelöintiä, oli tilanne sitten mikä tahansa.
Tässä pieni esimerkki, miten tuota arvojen tarkistusta (muuntamista turvalliseen muotoon) saa hieman automatisoitua:
<?php $posts = array('osoite','lt','kuvaus'); // tarkistettavat lomakkeen kentät $error = false; foreach($posts as $post){ if(($$post = get_magic_quotes_gpc() ? $_POST["'$post'"] : mysql_escape_string($_POST["'$post'"])) == "") $error .= "Vaadittu kenttä <b>\"$post\"</b> puuttuu<br >"; } if($error){ die("<html><head><title>Error</title><body>$error</body></html>"); }else{ // jatketaan ja suoritetaan kyselyt... // lomakkeen tarkistetut tiedot löytyvät sen kenttien nimisistä muuttujista ($osoite, $lt, $kuvaus) } ?>
Kiitos koodista ajv. Nyt ohjelman pitäisi estää tyhjien kenttien tallentaminen. Pari muutakin pikku parannusta olen tehnyt. Nyt koodi estää myös html:n, ellei toisin haluta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.