Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: HTML-sivujen listaus ja UPLOADaus

Sivun loppuun

peran [23.03.2004 14:23:33]

#

Ohjelmalla voi lisätä (muokkaalistaa.php)UPLOADin avulla html-sivuja, ja ne näkyvät htmllista.php:n avulla. Vaihdasalasana.php:n avulla asetetaan pakollinen salasana sivustoille. Alla esitetyt php:t laitetaan omaan hakemistoon, johon annetaan php:lle luku-ja kirjoitusoikeudet.

Ensimmäiseksi sivulta tulee ajaa vaihdasalasana.php, joka luo tarpeellisen salasana.php:n. Kyseistä salasanaa käytetään muokkaalistaa.php:ssa, joten on hyvä muistaa salasanasi. Yleisölle tiedostoista tulee näyttää vain htmllista.php, joka tulostaa sivut näyttäen <TITLE></title>tagien sillä olevat tiedot linkkien niminä.

Esim jos olet uploadannut seuraavan sisältöisen tiedoston:

esimerkki.htm

<html><head>
<title>Esimerkki tehty 17.3.2004</title>
</head><body>
Tämä on esimerkki .HTML:n muodosta, joka tulee listaan
</body></html>

Tämä näkyy htmllista.php-tiedostossa:

<A HREF="2004/esimerkki.htm">Esimerkki tehty 17.3.2004</a>

Otsikkoon tulee laittaa myös päivämäärä, em. muodossa eli p.k.yyyy, jotta uusin html-sivu tulisi listan alkuun, muussa tapauksessa se listautuu tiedoston muokkauspäivämäärien mukaisessa järjestyksessä.

Vuosi valitaan:"muokkaalistaa.php?vuosi=2004"-http-pyynnöllä ja oletuksena on nykyinen vuosi. Ohjelma tekee 2004.php-tiedoston ja 2004-hakemiston. Jos käytät SAFE-moodia on sinun itse perustettava ko. hakemisto ja annettava PHP:lle luku-ja kirjoitusoikeudet.

Listan hallinta tapahtuu muokkaalistaa.php:n avulla. Salasanaksi tulee sama salasana, jonka oletkin jo aiemmin tehnyt vaihdasalasana.php:llä.
Valitsemalla suoritettavaksi toiminnoksi lisää, voidaan ko. vuoden kohdalla lisätä UPLOADin avulla lisätä tiedosto.

Valitsemalla suoritettavaksi toiminnoksi päivitä, päivitetään htmllista ko. vuodesta.

Valitsemalla suoritettavaksi toiminnoksi poista, voidaan listalta poistaa kyseinen rivi ko. vuodesta. Samalla serveriltä poistetaan ko. html-tiedosto.

vaihdasalasana.php

<HTML><HEAD><TITLE>Vaihda sivuston salasana</title></head><BODY>
<?php
if (is_file("salasana.php")) include "salasana.php";
if (!isset($_POST["upass"])) $virhe="Anna uusi salasana<br>";
   else if (isset($salasana))
           if (md5($_POST["vpass"])!=$salasana)
     $virhe="VANHA salasanasi on virheellinen <br>";
           else if ($_POST["upass"]!=$_POST["uupass"])
     $virhe=" Kirjoitit uuden salasanan toisella kerralla eri tavalla kuin ensimmäisellä kerralla<br>
             Kirjoita molemmilla kerroilla salasanat samalla tavalla";
if (isset($virhe))
{
print "$virhe";
?>
<form method="POST" action="<?php print $PHP_SELF; ?>">
Anna vanha salasana<INPUT type="password" name="vpass"><br>
Anna uusi salasana<INPUT type="password" name="upass"><br>
Uusi salasana uudestaan<INPUT type="password" name="uupass"><br>
<input type="submit" value="Lähetä" name="subbi">
</form>
<?php
} else {
  $f=fopen("salasana.php","w");
  fwrite($f,'<?php $salasana="'.md5($_POST['upass']).'"; ?>');
  fclose($f);
  Print "Salasanasi on nyt vaihdettu!!";
}
?></body></html>

muokkaalistaa.php

<HTML>
<HEAD>
  <TITLE>Muokkaa listaa</title>
</head>
<BODY>
<?php
include "salasana.php";
if (isset($_GET['vuosi'])) $ali=$_GET['vuosi'];
else $ali=date('Y');
if (strlen($ali)>4) $ali=date('Y');
if ($ali+0<1000) $ali=date('Y');
$v=0+date('Y');
while (is_file($v.'.php')) {
    if ($v!=0+$ali) print "<A HREF=\"$PHP_SELF?vuosi=$v\">Lista v.$v</a><br>\n";
    $v--;
}
print "<H1>Vuosi $ali</h1>";

function otsake($teksti) {
$alku=stristr($teksti,"<title>");
$alku=substr($alku,7);
return substr($alku,0,strpos($alku,"<"));
}

function etsiaika($teksti,$vara) {
$s=otsake($teksti);
$n=strpos($s,".");
if ($n>0) {
   if ($n>1) $s=substr($s,$n-2);
   $p=substr($s,0,strpos($s,"."));
   if (0+$p==0) $p=substr($p,1);
   $p=0+$p;
   $s=substr($s,strpos($s,".")+1);
   if (strpos($s,".")>0) {
      $k=0+substr($s,0,strpos($s,"."));
      $v=0+substr($s,strpos($s,".")+1);
   }
}
if (($v==0)||($k==0)||($p==0)) $r=$vara;
else {
    if (strlen("$k")<2) $k="0$k";
    if (strlen("$p")<2) $p="0$p";
    if (strlen("$v")<4) $v=substr("2000",0,4-strlen("$v"))."$v";
    $r="$v$k$p";
}
if (!isset($r)) $r=$vara;
if (strlen($r)<8) $r=$vara;
return $r;

}

$s="";
if (is_file("${ali}.php")) {
   $f=fopen("${ali}.php","r");
   $s=fread($f,50000);
   fclose($f);
}
$a=split('£',$s);

if (($_POST==NULL)||($_POST==""))
   $_POST=$HTTP_POST_VARS;
if (md5($_POST["sala"])==$salasana) {
    print "tuli salattuun<br>";
    if (!is_dir($ali)) {
       mkdir($ali,0770);
       print "Luotiin kansio $ali<br>";
    // HUOM mkdir on turvallinen, koska $ali:n muoto on 4 merkkiä pitkä numeroarvo
    // $ali:n muoto on varmistettu tiedoston alussa.
    }
    $teksti=$_POST["teksti"];
    $p=$_POST["aika"];
    if (strlen($p)==10)
       $p=substr($p,6,4).substr($p,3,2).substr($p,0,2);
    $nro=0+$_POST["rivi"];
    if ($nro>count($a))
        $nro=count($a);
    if ($nro<1) $nro=1;
    if($_POST["korvaa"]=='p') {;
      print "<br>poista<br>";
      $s=$a[$nro];
      if (($s!='')&&($s!=NULL)) {
         $s=substr($s,8);
         $s=substr($s,0,strpos($s,'*'));
         if (is_file("${ali}/$s"))
            {
            unlink("${ali}/$s");
            print "Tiedosto=\"$s\"-poistettiin kansiosta:\"$ali\"<br>";
         }
      }
      if(count($a)>0)
          for ($i=0+$nro;$i<count($a);$i++)
              $a[$i]=$a[$i+1];
    } else if (($_POST["korvaa"]=='l')||(($_POST["korvaa"]=='k')&&(($a[0+$nro]==NULL)||($a[0+$nro]=="")))) {
      print "<br>lisää<br>";
      move_uploaded_file($_FILES['filetta']['tmp_name'], "${ali}/".$_FILES['filetta']['name']);
    }

    $j=1;
    for($i=1;$i<count($a);$i++) {
       $a[$j]=$a[$i];
       $n=substr($a[$i],8,strpos($a[$i],"*")-8);
       if (is_file("./${ali}/$n")) $j++;
    }
    while ($j<count($a)) {
       $a[$j]="";
       $j++;
    }
    $a[0]='apina';  // ihan sama mitä on kunhan on suurempi kuin '9';

    $dir=opendir("./${ali}");
    if($dir) {
       while(($file=readdir($dir))!=false)
          if (strpos("$file",".htm")>0) {
            $i=1;
            while(($a[$i]!=NULL)&&($a[$i]!="")&&(strpos($a[$i],"$file*")==0)) $i++;
            if(($a[$i]==NULL)||($a[$i]=="")) {
                print"<br>uusi=$file<br>";
                $f=fopen("./${ali}/$file","r");
                $s=fread($f,10000);
                fclose($f);
                $otsikko=otsake($s);
                if ($otsikko=='') {
                   $otsikko=$file;
                   $lp=stristr($otsikko,'.htm');
                   if (strlen($lp)>0) $otsikko=substr($otsikko,0,strpos($otsikko,$lp));
                }
                $a[$i]=etsiaika($s,date("Ymd",filemtime("./$ali/$file")))."$file*$otsikko";
            }
       }
       closedir($dir);
    }

    rsort($a,SORT_STRING);
    $f=fopen("${ali}.php","w");
    fwrite($f,'<?php>');
    for ($i=1;($a[$i]!="")&&($a[$i]!=NULL);$i++) {
        fwrite($f,"£".$a[$i]);
    }
    fclose($f);
}


$loppu="</font><br><CENTER><FONT SIZE='-1' FACE='Arial'><B>***</b></center></font>";
$alku="<FONT SIZE='-1' FACE='Arial'>";
for($i=1;$i<count($a);$i++)
    if (($a[$i]!="")&&($a[$i]!=NULL))
       print "$i.$alku".$a[$i].$loppu;

?>
<HR>
<FORM NAME="hallitse" ACTION="<?php print $PHP_SELF;
if (0+$ali>0) print "?vuosi=$ali";
?>" METHOD="POST" ENCTYPE="multipart/form-data">
<P><FONT FACE="Arial">Tämän sivulla ylläpidetään
pääsivun uutiset palstaa.</font></p>


<P><FONT FACE="Arial">Kirjoita tähän salasana:<INPUT
NAME="sala" SIZE="16" TYPE="password"><BR>
Uutisen numero, johon toimenpiteet kohdistetaan:<INPUT NAME="rivi"
SIZE="5" VALUE="1" TYPE="text"><BR>
Valitse suoritettava toiminto<SELECT NAME="korvaa">
<OPTION VALUE="l" SELECTED>lisää
<OPTION VALUE="p">Poista
<OPTION VALUE="r">Päivitä
</select></font></p>

<P><FONT FACE="Arial">
Kirjoita uutisen sisältö allaolevaan ikkunaan:<BR>
<input NAME="filetta" type="file">
<BR>
</font></p>
 <P><FONT FACE="Arial">Kun kaikki on valmiina, paina lähetä-painiketta</font></p>

<FONT FACE="Arial"><INPUT TYPE="submit" NAME="subbi" VALUE="l&auml;het&auml;"></font>
</form>
<BR>
<A HREF="htmllista.php<?php
if ($ali+0>1000) print "?vuosi=$ali";
?>">Tässä tulos</a>
</body>
</html>

htmllista.php

<HTML>
<HEAD>
<TITLE>Lista</title>
</head>
<BODY>
<?php
if (isset($_GET['vuosi'])) $t=$_GET['vuosi'];
else $t=date('Y');
if (strlen($t)!=4) $t=date('Y');
if (0+$t<=1000) $t=date('Y');
$v=0+date('Y');
// Alla olevalla while-silmukka luo linkit toisten vuosien uutisille
while (is_file($v.'.php')) {
    if ($v!=0+$t)
       print "<A HREF=\"$PHP_SELF?vuosi=$v\">Vuosi $v</a><br>\n";
    $v--;
}
print "<hr><H1>Vuosi $t</h1>";

$f=fopen("$t.php","r");
$s=fread($f,50000);
$a=split('£',$s);
fclose($f);
// Alla olevalla for-silmukka luo linkit tämän vuoden uutisille.
for ($i=1;$i<count($a);$i++) {
   $p=substr($a[$i],8);
   if (($p!=NULL)&&($p!="")) {
      $f=substr($p,0,strpos($p,"*"));
      $k=substr($p,strpos($p,"*")+1);
      print"<A HREF=\"$t/$f\">$k</a><br>\n";
   }
}
?>
</body></html>

makeuu [24.03.2004 14:36:44]

#

Onpas pitkä koodivinkki :D

T.M. [24.03.2004 14:59:36]

#

Ei voi muuta sanoa kuin että: erittäin järkeviä kommentteja taas makeuulta.

Nomadic [24.03.2004 18:31:43]

#

Etkö sää T.M. osaa muuta kun valittaa?

ajv [24.03.2004 19:27:17]

#

Olisko esimerkkisivua? Vaikka selitykset luinkin ja koodiakin vähän vilkasin, niin en silti nää mitä hyötyä tästä on. Esimerkkisivu voisi hieman valaista asiaa.

peran [25.03.2004 16:39:32]

#

Uploadin takia pieni tieturha riski, mutta laitetaan kuitenkin linkki, jossa käytän ko. tiedostoja:
http://koti.mbnet.fi/sojanen/inssit/viini/2viini_inssit.php3
Tässä sivussa ei voi kokeilla toimintoja, mutta näiden toimintojen avulla ylläpidän ko. sivuston osaa.

peran [25.03.2004 16:48:14]

#

Kyseinen linkki vastaa htmllista.php:tä, tosin ulkoasua on hivenen kaunisteltu. Tavaraa vuosikansioihin voi siirtää myös ftp:llä, ja sen voi päivittää sitten muokkaalistaa.php:n päivitä toiminnolla.

Mv [28.03.2004 22:03:41]

#

"Kirjoitit uuden salasanan toisella kerralla eri tavalla kuin ensimmäisellä kerralla" on mielestäni melko pitkästi selitetty. Ehkäpä mieluummin "Salasanat eivät täsmää" ?

Thimon [11.09.2004 19:29:27]

#

lainaus:

Etkö sää T.M. osaa muuta kun valittaa?

Niimpä :D

Wiolet [11.10.2006 22:18:56]

#

lainaus:

lainaus:

Etkö sää T.M. osaa muuta kun valittaa?

Niimpä :D

Olen muuten samaa mieltä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta