1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 |
|
<?php
/**
* gBók
* @author Guðjón Jónsson <gaui@gaui.is>
* @copyright 2008
* @sql
CREATE TABLE `gbok` (
`id` int(5) NOT NULL auto_increment,
`nafn` varchar(50) NOT NULL default '',
`netfang` varchar(50) NOT NULL default '',
`veffang` varchar(100) NOT NULL default '',
`skilabod` text NOT NULL,
`dagsetning` int(20) NOT NULL default '0',
`ip` varchar(15) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
**/
# Dæmið í reikningnum (SPAMVÖRN)
$reikningur_daemi = 'sjö plús sex';
# Svör við dæminu
$reikningur_svar = array( '13', 'þrettán' );
# Eftir að hafa skrifað í gestabókina, eftir hversu langan tíma í sekúndum á að flytja viðkomandi aftur í gestabókina
$flytja_eftir = 3;
# Hvað eru margar færslur á hverri síðu
$faerslur_per_bls = 10;
/*
Upplýsingarnar fyrir gagnagrunninn
*/
$db = 'database'; # Gagnagrunnurinn
$db_table = 'gbok'; # Taflan sem við notum
$db_host = 'localhost'; # Hvar gagnagrunnurinn er
$db_user = 'user'; # Notandanafnið inn á gagnagrunninn
$db_pass = 'pass'; # Lykilorðið inn á gagnagrunninn
/*
Tengjumst gagnagrunninum
*/
# Tengjumst þjóninum
@mysql_connect( $db_host, $db_user, $db_pass ) or die( 'Gat ekki tengst gagnagrunni:<br /><i>' . mysql_error() . '</i>' );
# Veljum gagnagrunninn
@mysql_select_db( $db ) or die( 'Gat ekki fundið gagnagrunn:<br /><i>' . mysql_error() . '</i>' );
/*
Fall sem kemur í veg fyrir XSS (Cross-site scripting)
Nánar um XSS: http://en.wikipedia.org/wiki/Cross-site_scripting
*/
function no_xss( $str )
{
$tags = array(
'script',
'object',
'iframe',
'image',
'applet',
'meta',
'form',
'onmouseover',
'onmouseout'
);
$str = strip_selected_tags( $str, $tags );
$str = str_replace( '@', '@', $str );
return $str;
}
/*
Fall sem no_xss() notar
*/
function strip_selected_tags( $text, $tags = array() )
{
$args = func_get_args();
$text = array_shift( $args );
$tags = func_num_args() > 2 ? array_diff( $args, array( $text ) ) : (array)$tags;
foreach( $tags as $tag )
{
while( preg_match( '/<' . $tag . '(|\W[^>]*)>(.*)<\/' . $tag . '>/iusU', $text, $found ) )
{
$text = str_replace( $found[0], $found[2], $text );
}
}
return preg_replace('/(<(' . join( '|', $tags ) . ')(|\W.*)\/>)/iusU', '', $text );
}
/*
Fall sem athugar hvort netfang sé gilt
*/
function checkEmail( $email )
{
if( !eregi( '^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$', $email ) )
return false;
if( !strstr( $email, '@' ) )
return false;
list( $username, $domain ) = explode( '@', $email );
if( getmxrr( $domain, $mxhost ) )
return true;
else
{
if( @fsockopen( $domain, 25, $errno, $errstr, 30 ) )
return true;
else
return false;
}
}
/*
Fall sem er þróuð útgáfa af mysql_query()
*/
function db_query( $sql )
{
#echo $sql;
$query = mysql_query( $sql );
if( $query )
return $query;
else
die( mysql_error() . '<br><font color="red"><b>SQL Villa:</b></font><br>' . $sql );
}
/*
Fall sem flytur mann á aðra síðu eftir ákveðinn tíma (notar META REFRESH)
*/
function redirect( $url = 'index.php', $sek = 0 )
{
echo '<meta http-equiv="REFRESH" content="' . $sek . '; URL=' . $url . '">';
}
/*
Fall sem býr til blaðsíðutölin
*/
function page_maker( $total, $perpage )
{
$pages = ceil( $total / $perpage );
if( $pages > 0 )
{
for( $i = 1; $i <= $pages; $i++ )
{
if( !$_GET['bls'] )
$_GET['bls'] = 1;
if( $_GET['bls'] != $i )
$foo .= '<a href="?adgerd=lesa&bls=' . $i . '">' . $i . '</a> | ';
else
$foo .= $i . ' | ';
}
return '<div><b>Síður: ' . substr( $foo, 0, -3 ) . '</b></div>';
}
}
# Array með öllum mánuðum ársins
$manudur = array( '', 'janúar', 'febrúar', 'mars', 'apríl', 'maí', 'júní', 'júlí', 'ágúst', 'september', 'október', 'nóvember', 'desember' );
# Array með öllum dögum vikunnar
$dagur = array( 'sunnud.', 'mánud.', 'þriðjud.', 'miðvikud.', 'fimmtud.', 'föstud.', 'laugard.' );
/*
Nú byrjar fjörið
*/
?>
<html>
<head>
<title>gBók</title>
</head>
<body>
<h1>gBók</h1><h4>Gestabók eftir <a href="http://www.gaui.is">Gaui.is</a></h4>
<a href="?adgerd=lesa">Lesa</a> | <a href="?adgerd=skrifa">Skrifa</a>
<hr />
<?php
# Þegar fólk smellir á "Skrifa" (gbok.php?adgerd=skrifa)
if( $_GET['adgerd'] == 'skrifa' )
{
# Ef formið hefur verið sent
if( isset( $_POST['submit'] ) )
{
# Búum til tóman array úr breytunni $error
$error = array();
# Ef nafnið er tómt
if( $_POST['nafn'] == '' )
$error[] = 'Nafnið má ekki vera tómt';
# Ef skilaboðin eru tóm
if( $_POST['skilabod'] == '' )
$error[] = 'Skilaboðin mega ekki vera tóm';
# Ef netfangið er ekki tómt en er vitlaust
if( $_POST['netfang'] != '' && !checkEmail( $_POST['netfang'] ) )
$error[] = 'Netfangið er ekki rétt';
# Ef reikningurinn er ekki réttur
if( !in_array( $_POST['reikningur'], $reikningur_svar ) )
$error[] = 'Reikningurinn er ekki réttur';
# Ef einhver error/villa kom upp stoppum við og prentum villuna
if( count( $error ) > 0 )
{
echo '<b>Upp kom villa!</b>';
echo '<ul>';
foreach( $error as $msg )
{
echo '<li>' . $msg;
}
echo '</ul>';
echo '<a href="javascript:history.back(1)">Smelltu hér til að fara til baka!</a>';
}
# Ef það kom enginn error/villa upp hendum við öllu inn í gagnagrunninn
else
{
# Dagsetningin (UNIX timestampinn)
$dagsetning = time();
# Skráum niður IP töluna hjá viðkomandi
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'] == '' ? $_SERVER['REMOTE_ADDR'] : $_SERVER['HTTP_X_FORWARDED_FOR'];
# Ef slóðin er bara http:// breytum við henni í ekki neitt, svo hún skráist sem tóm í gagnagrunninn
if( $_POST['veffang'] == 'http://' )
$_POST['veffang'] = '';
# Hendum þessu inn í gagnagrunninn
db_query( "INSERT INTO $db_table ( nafn, netfang, veffang, skilabod, dagsetning, ip ) VALUES ( '{$_POST['nafn']}', '{$_POST['netfang']}', '{$_POST['veffang']}', '{$_POST['skilabod']}', '$dagsetning', '$ip' )" );
# Prentum einhverja kveðju
echo '<b>Takk fyrir að skrifa í gestabókina mína!</b><br /><br />Þú verður flutt/ur aftur í gestabókina eftir örskamma stund.';
# Flytja aftur í gestabókina
redirect( basename( __FILE__ ), $flytja_eftir );
}
}
# Ef formið hefur ekki verið sent, birtum við formið...
else
{
?>
<b>Skrifaðu í gestabókina mína hér fyrir neðan:</b><br /><br />
<form action="" method="post">
<b>Nafn:</b><br />
<input type="text" name="nafn" value="" />
<br /><br />
<b>Netfang:</b><br />
<input type="text" name="netfang" value="" />
<br /><br />
<b>Veffang:</b><br />
<input type="text" name="veffang" value="http://" />
<br /><br />
<b>Skilaboð:</b><br />
<textarea name="skilabod"></textarea>
<br /><br />
<b>Hvað er <?=$reikningur_daemi?>:</b><br />
<input type="text" name="reikningur" value="" />
<br /><br />
<input type="submit" name="x" value="Skrifa" /><input type="hidden" name="submit" value="1" />
</form>
<?php
}
}
else
{
# Samtals færslur
$qry_total = db_query( "SELECT * FROM $db_table" );
# Ef blaðsíðutalið er ekki tómt EÐA er ekki tala EÐA er minna en 0 EÐA er hærra en fjöldi færslna, þá...
if( !$_GET['bls'] || !is_numeric( $_GET['bls'] ) || $_GET['bls'] < 0 || $_GET['bls'] > mysql_num_rows( $qry_total ) )
$bls = 1;
else
$bls = $_GET['bls'];
# Finnum offsetið, þ.e. hvaðan á að limita
$offset = $bls * $faerslur_per_bls - ( $faerslur_per_bls );
# Náum í færslurnar í gagnagrunninum, út frá því hvar offsetið er og hvað það eiga að vera margar blaðsíður á hverri síðu
$query = db_query( "SELECT * FROM $db_table ORDER BY id DESC LIMIT $offset, $faerslur_per_bls" );
# Birtum fjölda gesta sem hafa skrifað
echo '<b>Gestir sem hafa skrifað: <u>' . mysql_num_rows( $qry_total ) . '</u></b><br /><br />';
# Notum fallið okkar sem býr til blaðsíðutölin fyrir okkur
echo page_maker( mysql_num_rows( $qry_total ), $faerslur_per_bls );
$j = 1;
# Loopum/rennum í gegnum allar færslurnar og prentum þær út
while( $myrow = mysql_fetch_assoc( $query ) )
{
if( $j == 1 )
echo '<br />';
echo '<small>' . date( 'j', $myrow['dagsetning'] ) . '. ' . $manudur[date( 'n', $myrow['dagsetning'] )] . ' ' . date( 'Y - H:i', $myrow['dagsetning'] ) . '</small><br />';
echo '<b>' . $myrow['nafn'] . '</b><br />';
echo nl2br( $myrow['skilabod'] );
echo '<br /><br />';
$j++;
}
# Notum aftur fallið okkar sem býr til blaðsíðutölin fyrir okkur
echo page_maker( mysql_num_rows( $qry_total ), $faerslur_per_bls );
}
?>
</body>
</html>
|