Witam, jako ze pierwszy raz wrzucam swój kod na te forum, proszę o wyrozumiałość.
Ostatnio potrzebny był mi skrypt sondy, jednak wszystkie skrypty dostępne w internecie nie za bardzo mnie zadowoliły, wiec postanowiłem napisać sam coś swojego.
Więc tu moja prośba, o ocenę mojego skryptu (IMG:
style_emoticons/default/smile.gif)
<?php
//@autor: Dominik Gawenda
//@wersja: 1.0 | 2010-07-20
//@skrypt sondy
if($mod_sonda !=0) {
if(isset($_POST['glosuj'])) { $sonda_id = $_POST['sonda_id'];
$pozycja_sondy = $_POST['sonda'];
$sSql = mysql_query("SELECT id,ilosc_glosow FROM sonda WHERE id = '".$sonda_id."' "); $nowa_ilosc_glosow = $sDane['ilosc_glosow'] + 1;
$ssSql = mysql_query("SELECT id,ilosc_glosow FROM sonda_dane WHERE id = '".$pozycja_sondy."' "); $nowa_ilosc_glosow_pozycja = $ssDane['ilosc_glosow'] + 1;
setcookie('sonda'.$sDane['id'], $sDane['id'], time()+60
*60
*24
*365
);
$update1 = mysql_query("UPDATE sonda SET ilosc_glosow = '".$nowa_ilosc_glosow."' WHERE id=".$sDane['id']." "); $update2 = mysql_query("UPDATE sonda_dane SET ilosc_glosow = '".$nowa_ilosc_glosow_pozycja."' WHERE id = '".$ssDane['id']."' ");
header('Location: '.$config_url); }
$sSql = mysql_query("SELECT * FROM sonda WHERE aktywny = '1' "); if($sIle != 0) {
echo '<div class="box1">'; echo '<div style="text-align:center;padding-bottom:10px;"><b>'.$sDane['nazwa'].'</b><br />'.$sDane['opis'].'</div>'; $ssSql = mysql_query("SELECT * FROM sonda_dane WHERE id_sonda = '".$sDane['id']."' "); if(isset($_COOKIE['sonda'.$sDane['id']])) { $procent = @round(($ssDane['ilosc_glosow'] / $sDane['ilosc_glosow']) * 100
); echo '<div><b>'.$ssDane['pytanie'].'</b> ('.$procent.'%)<div style="background:#ff7e01;width:'.$procent.'%;height:10px;margin:5px 0px 5px 0px;"></div></div>'; }
} else {
echo '<form action="'.$SCRIPT_NAME.'" method="post" name="sonda">'; echo '<div style="padding:5px;"><input type="hidden" name="sonda_id" value="'.$sDane['id'].'" /><input type="radio" name="sonda" value="'.$ssDane['id'].'" /> <b>'.$ssDane['pytanie'].'</b></div>'; }
echo '<input type="submit" name="glosuj" value="GŁOSUJ" class="sz_buton"><br style="clear:both" /></form>'; }
echo '<div style="text-align:center;padding-top:10px;">Głos oddało: '.$sDane['ilosc_glosow'].' '.Osoby
($sDane['ilosc_glosow']).'</div></div>'; }
}
}
?>
Powyżej skrypt sondy, bez panelu administracyjnego, gdyż jeszcze nie zrobiłem go (IMG:
style_emoticons/default/biggrin.gif)
Poniżej prezentacja tabel bazy
Tabela SONDA
--
-- Struktura tabeli dla `sonda`
--
CREATE TABLE IF NOT EXISTS `sonda` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`nazwa` varchar(250) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`opis` text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`ilosc_glosow` int(11) NOT NULL,
`autor` varchar(250) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`data_od` date NOT NULL,
`data_do` date NOT NULL,
`aktywny` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
i dla tabeli SONDA_DANE
CREATE TABLE IF NOT EXISTS `sonda_dane` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`id_sonda` tinyint(4) NOT NULL,
`pytanie` varchar(250) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
`ilosc_glosow` int(11) NOT NULL,
`aktywny` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=9 ;
Ktoś zapyta dlaczego w dwóch tabelach? Dla tego gdyż skrypt przygotowany dla więcej niże 1 sondy, dlatego opis sondy jest trzymany w osobnej tabeli niż dane dla sondy.
Proszę o ocenę mojego skryptu i ewentualne uwagi co by poprawić. Zastanawiam się jeszcze jak by można mocniej zabezpieczyć sondę, gdyż aktualnie korzysta wyłącznie z ciasteczek. Myślałem jeszcze od zapisywaniu adresów IP w pliku (nie chce zaśmiecać tym bazy) i ewentualnie również sprawdzać czy z takiego IP już głosowano w przypadku ręcznego usunięcia ciastka (IMG:
style_emoticons/default/smile.gif)
Pozdrawiam