webForumDet fria alternativet

gaboPHP, en flersidig gästbok utan databas

PHP

8 svar · 25 644 visningar · startad av nicclas

Medlem sedan feb. 20001 050 inlägg
Frågan#1

gaboPHP - ännu en gästbok

Gästboken är filbaserad och använder ingen databas. Inläggen sprids över flera sidor och det senaste inlägget läggs överst på första sidan.

Gästboken är uppbyggd av ett antal funktioner:

initiera();
Initierar gästboken, måste köras först.
visa_nav();
Visar en navigeringslist - klickbar lista med sidnummer.
visa_nav_framat();
Visar "nästa sida" bild.
visa_nav_bakat();
Visar "föregående sida" bild.
visa_antal_meddelanden();
Skriver ut antal inlägg i gästboken.
visa_antal_sidor();
Skriver ut antal sidor som gästboken har.
visa_sidnr();
Skriver ut numret på den sida som visas nu.
visa_meddelande(nummer);
Visar meddelande "nummer";

dessutom kan man bestämma hur många inlägg som skall visas på varje sida.

Gästboken tillåter inte HTML-kod i inläggen.

Koden kan kommenteras/diskuteras här:
Ideer för webb-baserad redigering osv. tas emot med öppna armar. Denna gästbok är inte gjord för att visa hur man SKA göra en gästbok utan för hur man KAN göra!

index.php3
HTML-koden inom ///////////// beskriver hur varje inlägg visas.

<! Baserad på gaboPHP från [url="http://www.nic-sys.se"]www.nic-sys.se[/url]  !>

<?
// ------ Editera dessa! --------------
$persida=4;             // Antal inlägg som skall visas per sida.
$noprev="noprev.gif";   // Sökväk till deaktiverad föregångar-knapp.
$nonext="nonext.gif";   // Sökväg till deaktiverad nästa-knapp.
$prev="prev.gif";       // Sökväg till föregångar-knapp.
$next="next.gif";       // Sökväg till nästa-knapp.
// ------------------------------------

$sidor=0;
$storlek=0;
$namn="";
$epost="";
$meddelande="";
$titel="";
$hemsida="";
$sidnr=1;

function initiera(){
  // Initiering av de komponenter som behövs. Körs alltid först!

  global $sidor, $persida, $namn, $epost, $meddelande, $hemsida, $titel, $storlek, $start, $sidnr;
  // Läs i fil antalet inlägg i gästboken
  if(!($fpread = fopen("inlagg.txt", 'r'))){
    $fpwrite = fopen("inlagg.txt", 'w');
    fputs($fpwrite,"0\n");
    fclose($fpwrite);
    $sidor=1;
    $storlek=0;
  }else{   
    $storlek=fgets($fpread,1024);
    $sidnr=floor($start/$persida)+1;
    // Beräkna hur många sidor dessa inlägg tar
    $sidor=ceil($storlek/$persida);
    if($sidor==0) $sidor=1;
    // Läser igenom dagboksfil en och lagrar inlägg som skall visas på denna sida
    $mess=0;
    $index=0;
    while(!feof($fpread)){
      $data1=fgets($fpread,200);
      $data2=fgets($fpread,200);
      $data3=fgets($fpread,200);
      $data4=fgets($fpread,200);
      $data5=fgets($fpread,2020);
      $tom=fgets($fpread,1024);
      $tom=fgets($fpread,1024);
      if($mess>=$start && $mess<$start+$persida){
        $namn[$index]=$data1;
        $epost[$index]=$data2;
        $hemsida[$index]=$data3;
        $titel[$index]=$data4;
        $meddelande[$index]=$data5;
        $index=$index+1;
      }
      $mess++;
    }
  }
}
function visa_nav(){
  global $start,$persida,$storlek,$sidor,$sidnr;

  echo "::: ";
  for($i=1;$i<=$sidor;$i++)
    if($i==$sidnr)
      echo "<a href=\"$PHP_SELF?start=".($i-1)*$persida."\"><b>$i</b></a> ::: ";
    else
      echo "<a href=\"$PHP_SELF?start=".($i-1)*$persida."\">$i</a> ::: ";
}
function visa_nav_framat(){
  // Visar navigeringsknapp för "nästa"
  global $start, $sidor, $persida, $storlek;
  global $next, $nonext;
  if($start+$persida<$storlek){
    $newpage=$start+$persida;
    echo "<a href=\"$PHP_SELF?start=$newpage\"><img src=\"".$next."\" border=\"0\"></a>";
  }else{
  echo "<img src=\"".$nonext."\">";
  }
}
function visa_nav_bakat(){
  // Visar navigeringsknapp för "föregående"
  global $start, $sidor, $persida, $storlek;
  global $prev, $noprev;

  if($start>=$persida){
    $newpage=$start-$persida;
    echo "<a href=\"$PHP_SELF?start=$newpage\"><img src=\"".$prev."\" border=\"0\"></a>";
  }else{
    echo "<img src=\"".$noprev."\">";
  }
}
function visa_antal_meddelanden(){
  global $storlek;
  echo $storlek;
}
function visa_antal_sidor(){
  global $sidor;
  echo $sidor;
}
function visa_sidnr(){
  global $sidnr; 
  echo $sidnr;
}
function visa_meddelande($index){
  global $namn, $epost, $meddelande, $hemsida, $titel, $start, $storlek, $persida, $sidor;
  $sidan=floor($start/$persida)+1;
  $limit=$persida;
  if(($sidan==$sidor) && ($storlek % $persida)>0)
    $limit=$storlek%$persida;
  if($index<$limit && $storlek>0){
//////////////////////////////////////////////////////////////
    echo "
    Namn: $namn[$index]<br>
    Epost: $epost[$index]<br>
    Hemsida: $hemsida[$index]<br>
    Titel: $titel[$index]<br>
    Meddelande: $meddelande[$index]<br><br><hr>
    ";
///////////////////////////////////////////////////////////////
  }
}
?>

<! ----------------------------------------------- !>

<html>
<head>
<title>gaboPHP demo</title>
</head>
<body bgcolor="#c0c0c0">

<! Utför initiera först !>
<?initiera();?>

<center>
En demo av gaboPHP från <a href="http://www.nic-sys.se/">www.nic-sys.se</a>!<br>
<?visa_nav_bakat();?><?visa_nav_framat();?><br>
<?visa_nav();?><br>
Det finns <?visa_antal_meddelanden();?> meddelanden på <?visa_antal_sidor();?> sidor. Detta är sida <?visa_sidnr();?>.
</center>
<br>

<hr>

<! Visa alla inläggen på sidan !>
<?
for($i=0;$i<=$persida;$i++)
  visa_meddelande($i);
?>

<tr>
<td>
<form method="post" action="lagra.php3">
<span class="text">  Titel:</span><br>
<input type="Text" name="titel"></input><br>
<span class="text">  Meddelande:</span><br>
<TextArea name="meddel" rows=5 cols=50></TextArea><br>
<span class="text">  Namn:</span><br>
<input type="Text" name="namn"></input><br>
<span class="text">  E-post:</span><br>
<input type="Text" name="epost"></input><br>
<span class="text">  Hemsida:</span><br>
<input type="Text" name="hemsida"></input><br>
<input type="Submit" name="submit" value="Skicka"></input>
</form>

</body>
</html>

lagra.php3

<?
$fpread = fopen("inlagg.txt", 'r');
$dsize=fgets($fpread,1024);
$buffer="";
while(!feof($fpread)){
  $buffer.=fgets($fpread,2048);
}
fclose($fpread);

$dsize=$dsize+1;
$lista=Array("meddel","namn","epost","titel","hemsida");
for($i=0;$i<sizeof($lista);$i++){
  $$lista[$i]=htmlspecialchars($$lista[$i]);
  $$lista[$i]=nl2br($$lista[$i]);
  $$lista[$i]=stripslashes($$lista[$i]);
  $$lista[$i]=str_replace("\n","",$$lista[$i]);
}
if(strlen($meddel)>0){
$fpwrite = fopen("inlagg.txt", 'w');
fputs($fpwrite,"$dsize\n");
fputs($fpwrite,"<!namn>$namn<!/namn>\n");
fputs($fpwrite,"<!epost>$epost<!/epost>\n");
fputs($fpwrite,"<!hemsida>$hemsida<!/hemsida>\n");
fputs($fpwrite,"<!titel>$titel<!/titel>\n");
fputs($fpwrite,"<!meddel>$meddel<!/meddel>\n");
fputs($fpwrite,"<!ip>$REMOTE_ADDR:".date("Y-n-d:G:i:s")."<!/ip>\n");
fputs($fpwrite,"\n");
fputs($fpwrite,$buffer);
fclose($fpwrite);
header("Location: index.php3");
}
?>

Den katalog som dessa filer ligger i måste vara skrivbar från PHP ("chmod 777 katalogen"). Första gången index.php3 visas syns en varning då filen "inlagg.txt" skapas, den visas inte nästa gång!
(Alternativt: ändra skrivrättigheter på filen inlagg.txt i efterhand.)

En demonstration av hur koden ovan fungerar finns på http://www.nic-sys.se/gaboPHP/index.php3 .

/nicclas

[Redigerat av nicclas den 08 jul 2000]

Medlem sedan okt. 20061 inlägg
#2

Funkar det att använda endast .php?
Jag testade att spara båda i .php eftersom mitt webbhotell inte stöder .php3 men någonstans (jag hittar inte var) så måste ju "index" hänvisa till "lagra" och där måste jag ändra till .php istället för .php3.
Så min fråga är, kan man använda .php och isåfall vart ändrar man lagra.php3 till lagra.php? (Är lite blind för tillfället)

Medlem sedan juni 200032 967 inlägg
#3

Filändelsen ska inte spela någon roll, så länge du går igenom exakt all kod och ändrar alla förekomster av .php3 till .php.

Kör alltså find & replace i någon texteditor, så får du med alla ställen.

mvh

Medlem sedan maj 20053 909 inlägg
#4

Är det ok att lägga upp denna på sin egen sida?
Äntligen en gästbok som är enkel att köra igång, bara att klippa och klistra ju! ;)
Alltså, får man ändra i koden och sedan använda den fritt?

/r
Jag har skickat ett meddelande till trådskaparen och frågat.

Medlem sedan feb. 2006511 inlägg
#5

Länken funkar inte för mig :(

Medlem sedan feb. 20001 050 inlägg
#6

wally_91 skrev:

Länken funkar inte för mig :(

Sex år senare, och scriptet är "online" igen :e

Medlem sedan maj 20053 909 inlägg
#7

Fasen, jag ska testa denna tänkte jag. (y)
Kan man ändra texten till Verdana på ett enkelt sätt?

Medlem sedan feb. 20001 050 inlägg
#8

Bäst är nog att komplettera med en CSS där du anger font. Det är bara att komplettera med "vanlig" HTML efter <head>-taggen i index.php-filen.

Medlem sedan feb. 2006511 inlägg
#9

nicclas skrev:

Sex år senare, och scriptet är "online" igen :e

Haha, var det så länge sedan? Jag kollade inte på datumet. Jag antog att denna tråd var nyskapad eftersom jag såg den på framsidan. Aja tack så mycket för att du la ut den igen! (y)

309 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
166 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)