gBók v1
Skrifað af Gaui þann 28. júlí 2008 - 19:58
6 athugasemdir skrifaðar - toppur / botn
Fjöldi lestra: 1185
Þetta er bara einföld gestabók sem ég gerði. Þetta er einungis frumgerð (v1), en ég mun eflaust reyna að betrumbæta þetta eitthvað í framtíðinni.

Sýnishorn
  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'@''&#064;'$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() > 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$domain25$errno$errstr30 ) )
            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 )
{
    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 )
    {
        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$foo0, -) . '</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 ) > )
        {
            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
            
redirectbasename__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'] < || $_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_makermysql_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 == )
            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_makermysql_num_rows$qry_total ), $faerslur_per_bls );
}
?>
</body>
</html>



28. júlí 2008 - 21:44
#1 - Jói Kulp
Af hverju að hafa bara eitt dæmi?
Ef spammarar finna útkomuna er frekar auðvelt að rústa þessu right?

Nota random og gera þetta soldið flókið og skrifa dæmið "Hvað er tólf bætt við einn?" í staðinn fyrir að nota "plús".

28. júlí 2008 - 23:26
#2 - Gaui
http://www.gaui.is
Jú jú, það er eflaust betra að hafa mörg reikningsdæmi. Ég er samt bara með eitt dæmi hérna hjá mér og það hefur aldrei verið neitt vesen. Mér fannst bara ekki þörf á því. Þetta verður eflaust bætt í v2.

10. ágúst 2008 - 20:49
#3 - serbi
Sæll hvernig er það ertu til í að skrifa annað sms sript hitt var að hætta virka

13. ágúst 2008 - 23:37
#4 - Gaui
serbi, ég er úti í útlöndum núna, en ég skal kíkja á það um leið og ég kem heim.

24. ágúst 2008 - 21:03
#5 - serbi
takk fyrir það gaui ætla minna þig á það aftur láttu endilega vita sem first

2. september 2008 - 01:44
#6 - Gaui
http://www.gaui.is
serbi, hérna.




Nafn:


Netfang:


Veffang:


Hvað er tólf plús einn?



Skilaboð: