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.