Veggavis
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.