!

Dette materialet blir ikke lenger vedlikeholdt. Du vil finne oppdatert materiale på siden: http://borres.hiof.no/wep/

Veggavis
CGI
Børre Stenseth
Eksempler >Veggavis

Veggavis

Hva
En svært enkel demo av en gjestebok eller veggavis, CGI

Dette er en (alt for) enkel demonstrasjon av en slags gjestebok. Løsningen består av en HTML-fil og et enkelt Pythonscript. Navnet Veggavis er valgt for å indikere et lavt ambisjonsnivå.

Du kan teste og bearbeide dette ganske enkelt ved å kopiere de tre filene nedenfor til ditt CGI-områrde (cgi-bin), endre adressen i POST-setingen i HTML-fila, og åpne HTML-fila.

Merk at vi setter inn en ryddejobb når fila er blitt (for) stor.

HTML-fila

et snapshot

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8"/>    
    <title>Veggavis</title>
    <script src="check.js" type="text/javascript"> </script>
    <style>
    fieldset{padding:10px; background-color:#FCFDC3}
    td{vertical-align:top}
    .name{font-weight:600}
    .msg{color:blue; margin-left:50px;}
    </style>
</head>
<body>
<h2>Veggavisen</h2>
<form action="http://www.ia.hiof.no/~borres/cgi-bin/veggavis/veggavis.py" 
      method="POST">
   <fieldset>
   <legend class="name">Din melding:</legend>
   <table>
   <tr>
   <td>Hva er navnet ditt ? </td>
   <td><input type="text" name="name" value=""/></td>
   </tr>
   <tr>
   <td>Hva mener du ? </td>
   <td><textarea name="msg" value="1" cols="20" rows="5"></textarea></td>
   </tr>
   </table>
   
   <input type="submit" onclick="return checkAndSend(this.form);" 
          value="Send inn">
   </fieldset>
</form>
<hr/>
<!-- next --> 
<div class="name">hva</div>
      <div class="msg">i all verden</div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/> 
<div class="name">name</div>
      <div class="msg">Hola! </div><hr/>
<div class="name">Vaskehjelpen</div>
<div class="msg">Nå var det på tide å rydde opp</div><hr/>
</body>
</html>

Javascriptet

Javascriptet som er linket til er slik. Det sjekker at ikke de to feltene er tomme og det stiller et kontrollspørsmål for å sikre at det ikke er en automat som fyller inn data.

var filter = /^[\u0080-\u00FF]|[0-9]/;
function makeQ()
{
    var t1= Math.floor(Math.random()*15);
    var t2= Math.floor(Math.random()*15);
    var test=prompt('For å unngå automatutfylling:\n'+'Hva er summen av '+
                    t1+' + '+t2+' ?','??');
    if(test == ''+(t1+t2))
        return true;
    return false;
}
function controlText(S){
    if((S.indexOf('<a')!=-1)||
    (S.indexOf('href')!=-1)||
    (S.indexOf('www')!=-1)||
    (S.indexOf('http')!=-1)||
    (S.indexOf(':')!=-1)
    )
        return false;
    return true;
}
function checkAndSend(form)
{
    var name=form.name.value;
    var msg=form.msg.value;
    if((name=='')||(msg==''))
    {
        alert('Du må fylle ut både navn og mening');
        return false;
    }
    // no links
    if((!controlText(name))||(!controlText(msg)))
    {
        form.msg.value="";
        form.name.value="";
        alert(' Bare bokstaver, tall og .');
        return false;
    }
    if(!makeQ())
        return false
    return true;
}

PythonScriptet

#! /usr/bin/python
import cgi,string
import cgitb; cgitb.enable()
"""
 Receives a name and a message.
 1 opens a HTML-page, msg.html
 2 inserts name and message in the HTML
 3 writes the file back
 4 returns the content of the file
 5 restart with a minimum file if it grows to big
 HTML-file is: avis.html
 relative to this script
 -------------------------------------
  bs 2009
 -------------------------------------
 """

# running file
fileName='avis.html'
# when cleaning
basicfilename='startavis.html'
# logging
logfile='attempts.txt'
"""
 what will we allow
"""
def checkString(S):
   if S.find('<a')!=-1:
      return False
   if S.find('href=')!=-1:
      return False
   if S.find('www.')!=-1:
      return False
   return True
form=cgi.FieldStorage()
print 'Content-type: text/html; charset=utf-8\n'
# assume a name and a message
theName=''
theMsg=''
if form.has_key('name'):
   theName=form['name'].value
if form.has_key('msg'):
   theMsg=form['msg'].value
  
file=open(fileName,'r')
s=file.read()
file.close()
#log
file=open(logfile,'r')
t=file.read()
file.close()
file=open(logfile,'w')
t=t+theName +':'+theMsg+'\n'
if len(t) > 10000:
    t='restart\n'
file.write(t)
file.close()

# we clean it when it grows too large
if len(s) > 4000:
   file=open(basicfilename,'r')
   s=file.read()
   file.close()
   #log
   #file=open(logfile,'w')
   #file.write('restart\n')
   #file.close()

if len(theName) >0 and len(theMsg)>0:
   if checkString(theName)and checkString(theMsg):
      fragment="""<div class="name">%s</div>
      <div class="msg">%s</div><hr/>"""%(theName,theMsg)
      s=s.replace('<!-- next -->','<!-- next --> '+'\n'+fragment)
   file=open(fileName,'w')
   file.write(s)
   file.close()
print s

Den refererte basicfilename='startavis.html' er rett og slett en kort versjon av avis.html.

_startavis.html
Veggavis http://www.ia.hiof.no/~borres/cgi-bin/veggavis/avis.html
Referanser

De aktuelle filene i eksempelet er sitert i teksten.

Vedlikehold
Børre Stenseth, revidert sist mai 2011
( Velkommen ) Eksempler >Veggavis ( Vinkjeller )