Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Yksinkertainen linkkilista

T.M. [18.07.2006 22:59:54]

#

<?php

// Älä tulosta tätä funktiota ennen yhtään mitään!
// Jopa yksi tulostettu merkki, vaikkapa välilyönti
// aiheuttaa scriptin toimimattomuuden.
// Myöskään <?php -tagia ennen ei saa laittaa
// mitään HTML-koodia tai tekstiä.
ob_start();


/////////////////////////////////////////////
// Yksinkertainen linkkilista by T.M. www.HC-Codes.net
// Saa muokata vapaasti, kunhan tämä tekstilaatikko säilyy.
/////////////////////////////////////////////


function karsi_url($url){
    $url = strtolower($url); // Kaikki merkit pieniksi
    $url = str_replace("www.", "", $url); // Poistetaan www.
    $url = str_replace("koti.", "", $url); // ...
    $url = str_replace("home.", "", $url); // ...
    // Poistetaan kaikki muut merkit paitsi aakkoset ja numerot:
    $url = preg_replace("/[^a-z0-9]/", "", $url);
    return $url;
}


// Muuttujat helpommin käsiteltävään muotoon:
$act = $_GET['act'];
$do = $_GET['do'];

$SELF = basename($_SERVER['SCRIPT_URI']); // Pelkkä tiedoston nimi

// Tiedosto taulukkoon, jossa on linkit ja muu data:
$linkit = file("linkkitiedosto.txt");
$max = count($linkit);


if($act == "addlink"){
    print"<A HREF=\"$SELF\">Takaisin</A>";

    // Muuttujat helpommin käsiteltävään muotoon:
    $k_nimi = $_POST['k_nimi'];
    $k_osoite = $_POST['k_osoite'];
    $k_kuvaus = $_POST['k_kuvaus'];

    // Lisätään http:// linkin alkuun, jos sitä ei löytynyt sieltä:
    if(substr($k_osoite, 0, 7) != "http://") $k_osoite = "http://$k_osoite";

    print"<FORM METHOD=\"POST\" ACTION=\"?act=addlink&do=add\">";
    print"Sivun nimi: <INPUT TYPE=\"text\" NAME=\"k_nimi\" value=\"$k_nimi\"><br>";
    print"Sivun osoite: <INPUT TYPE=\"text\" NAME=\"k_osoite\" value=\"$k_osoite\"><br>";
    print"Kuvaus sivustosta: <INPUT TYPE=\"text\" NAME=\"k_kuvaus\" value=\"$k_kuvaus\"><br>";
    print"<INPUT TYPE=\"submit\" value=\"Lähetä\">";
    print"</FORM>";

    if($do == "add"){
        // Virheet sisältävä taulukko tyhjäksi:
        $error = array();

        // Käydään linkkitiedosto läpi:
        foreach($linkit as $linkki){
            $osa = explode("<>", $linkki);
            // Verrataan kahta osoitetta toisiinsa karsi_url() funktion avulla:
            if(karsi_url($osa[0]) == karsi_url($k_osoite)){
                $error['osoite'] = "Antamasi sivusto on jo listalla, url: $osa[0]";
                break;
            }
        }

        $k_nimi = trim($k_nimi); // Poistaa välilyönnit ym tekstin alusta ja lopusta.
        $k_nimi = stripslashes($k_nimi); // Muuttaa \" ym muunnokset takaisin " muotoon.
        $k_nimi = htmlspecialchars($k_nimi); // Ei sallita HTML:ää.

        $k_osoite = trim($k_osoite);
        $k_osoite = stripslashes($k_osoite);
        $k_osoite = htmlspecialchars($k_osoite);

        $k_kuvaus = trim($k_kuvaus);
        $k_kuvaus = stripslashes($k_kuvaus);
        $k_kuvaus = htmlspecialchars($k_kuvaus);

        // Tarkistetaan onko annettu tyhjiä tekstikenttiä, jos on, ilmoitetaan virheestä:
        if($k_nimi == "") $error['nimi'] = "Kirjoita sivustosi nimi";
        if($k_osoite == "" || $k_osoite == "http://") $error['osoite'] = "Kirjoita sivustosi osoite";
        if($k_kuvaus == "") $error['k_kuvaus'] = "Kirjoita sivustosi kuvaus";

        if($error){
            // Jos error taulukko ei ollut tyhjä:

            $ers = count($error);
            print"<B>$ers</B> virhettä huomattiin:<br>";

            // Käydään kaikki virheet läpi:
            foreach($error as $rivi){
                print"<li>$rivi<br>";
            }

            print"Ole hyvä ja korjaa virheet.";
        }else{
            // Jos virheitä ei löytynyt, eli error taulukko oli tyhjä:

            $aika = time(); // tämänhetkinen UNIX aikaleima
            $data = "$k_osoite<>$k_nimi<>$k_kuvaus<>$aika<>";
            // Korvataan kaikki mahdolliset rivinvaihdot välilyönneiksi (ettei tiedosto mene sekaisin):
            $data = str_replace(array("\r\n", "\n", "\r"), " ", $data);

            // Avataan tiedosto siten, että sen loppuun lisätään tallennettava data (a=append):
            $save = fopen("linkkitiedosto.txt", "a");
            fwrite($save, $data."\n"); // Tallennetaan data tiedostoon, ja lisätään loppuun rivinvaihto
            fclose($save);

            header("Location: $SELF"); // Siirrytään takaisin linkkilista sivulle.
        }
    }
}


if($act == ""){
    print"<A HREF=\"?act=addlink\">Lisää linkki</A><br><hr>";

    if($max > 0){
        print"Yhteensä $max linkkiä, (uusin ensimmäisenä).";
    }else{
        print"Ei vielä yhtään linkkiä, <A HREF=\"?act=addlink\">lisää</A> omasi!";
    }

    print"<br><BR>";
    print"<TABLE border=\"1\" style=\"font:12px verdana\" width=\"600\">";

    // Käydään linkit läpi viimeisestä ($max-1) ensimmäiseen (0):
    for($u = $max-1; $u >= 0; $u--){
        $osa = explode("<>", $linkit[$u]);
        $paivays = date("j.n.Y - H:i:s", $osa[3]);
        print"<TR>";
        print"    <TD valign=\"top\"><A HREF=\"$osa[0]\">$osa[1]</A></TD>";
        print"    <TD valign=\"top\" width=\"400\">$osa[2]<p style=\"font:9px verdana; color:#888888; margin:0\" align=\"right\">Lisätty: $paivays</p></TD>";
        print"</TR>";
    }
    print"</TABLE>";
}

ob_end_flush();

?>

Vastaus

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

Tietoa sivustosta