--- db/prgsrc/db.cgi 2003/12/19 01:44:47 1.126 +++ db/prgsrc/db.cgi 2004/03/11 07:14:14 1.130 @@ -8,9 +8,16 @@ use POSIX qw(locale_h); use locale; use vars qw($opt_z); use Getopt::Std; +my ($dbuser,$dbname,$dbpass,$dbhost); +require "dbdefs.pl"; +$dbuser||="piataev"; +$dbname||="chgk"; +$dbpass||=""; +$dbhost||="localhost"; getopts('z'); $opt_z||=param("makehtml"); my $timestamp="_timestamp.tmp"; +my $usehash=0; my $paramtour; my $withanswers=param('answer')||param('answers'); open STDERR, ">/var/tmp/errors1"; @@ -33,28 +40,39 @@ if ($^O =~ /win/i) { { $realHTMLDIR="/home/piataev/public_html/dimrub/db/files/"; } +my $url=url||''; + my $usehtml=$opt_z||0; $usehtml=1; +$usehtml=0 if $url=~/zaba/; + my $usewas=0; my $cashednumber=500; my $outputnumber=10; my ($proxyptext,$proxysstr); my $printqueries=0; -my $url=url||''; my $qs=query_string; my $globaloutput; my %forbidden=(); my $debug=0; #added by R7 +my $metod=param('metod')||''; my $outputkvo=param('kvo') ||$outputnumber; $outputkvo=100 if $outputkvo>100; if (param('debug')) {$debug=1; $printqueries=1} *STDERR=*STDOUT if $debug; -if ($url !~ /db\.chgk\.info/ && $url !~ /localhost/ && $url !~ /bilbo/) { +if ($url !~ /db\.chgk\.info/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/) { my $u="http://db.chgk.info/cgi-bin/db.cgi?$qs"; Redirect ($u); exit; } + +if ($metod=~/proxy/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/) { + my $u="http://chgk.zaba.ru/cgi-bin/db.cgi?$qs"; + Redirect ($u); + exit; +} + #if (!param('sstr') && param('all')) { # my $destination='http://db.chgk.info/all.html'; # Redirect($destination); @@ -746,7 +764,7 @@ sub makewhere { $type .= ($_=$TypeName{$_}) foreach @type; my $where=' 0 '; foreach (@type) { - $where.= " OR (Type ='$_') OR (Type ='$_Д') "; + $where.= " OR (Type ='$_') OR (Type ='$_Д') OR (Type ='Д$_') "; } $where.= "OR (Type='ЧБ')" if ($type=~/Ч|Б/); return $where; @@ -974,9 +992,11 @@ sub PrintRandom { my %q; my $answer=$razd?0:1; my @answers; +#my $t=time; my (@Questions) = &Get12Random($dbh, $type, $num); - my ($output, $i) = ('', 0); + my ($output, $i) = ('', 0); +#$output.="time=".(time-$t).p; if ($text) { $output .= " $num случайных вопросов.\n\n"; } else { @@ -1062,7 +1082,7 @@ sub PrintTournament { my ($qnum1) = GetQNum($dbh,1); $output .= h2("База вопросов"). h3("$qnum запис".&Suffix2($qnum). - " (не повторяется $qnum1)"); + " (уникальных $qnum1)"); # h4("". # Tr(td("Из них:"), td("Вопросов ЧГК: ".countz($dbh,'Ч'))). @@ -1479,7 +1499,9 @@ sub Get12Random { srand; my $where=0; my $r=int (rand(10000)); - + my $w1=$r<5000? "QuestionId<50000 ":"QuestionId>=50000"; + $w1=1 if $url=~/zaba/; + $w1=1 if $type!~/Ч/; foreach (split '', $type) { $where.= " OR (Type ='$_') OR (Type ='$_Д') "; @@ -1489,7 +1511,7 @@ sub Get12Random { # $q="select QuestionId, QuestionId/$r-floor(QuestionId/$r) as val # from Questions where $where order by val limit $num"; # Когда на куличках появится mysql >=3.23 надо заменить на order by rand(); - $q="select QuestionId from Questions where $where order by rand() limit $num"; + $q="select QuestionId from Questions where ($w1) AND ($where) order by rand() limit $num"; $sth=$dbh->prepare($q); @@ -1906,9 +1928,11 @@ MAIN: $tour = (param('tour')) ? param('tour') : 0; my $texttour=$tour; my ($sth,$dbh); - $dbh = DBI->connect("DBI:mysql:chgk", "piataev", "") + my($dsn) = "DBI:mysql:database=$dbname;host=$dbhost"; + $dbh = DBI->connect($dsn, $dbuser, $dbpass) +# $dbh = DBI->connect("DBI:mysql:$dbname", $username, $dbpass) or do { - print h1("Временные проблемы") . "База вопросов временно не + print header.h1("Временные проблемы") . "База вопросов временно не работает. Заходите попозже."; print &Include_virtual("$reklama") if $url!~/localhost/; print end_html; @@ -1917,7 +1941,7 @@ MAIN: if (param('qid') && (param('qid')=~/^\d+$/) || $tour && $tour=~/^\d+$/) { - my $destination='http://db.chgk.info/search.html'; + my $destination='http://chgk.zaba.ru/search.html'; # print header (-'Content-Type' => 'text/html', # -'Location:'=> 'http:\\db.chgk.info'); Redirect($destination); @@ -1973,7 +1997,8 @@ print br.br.$d; if ($text && !param ('comp')) { print header('text/plain'); - } elsif (!param('comp')) {print header;} + } elsif (!param('comp')) { + print header(-charset =>'koi8-r')} my $sstr=param('sstr'); $opt_z||=param("makehtml"); if (param('qid')) { @@ -2040,7 +2065,7 @@ th {font-size: x-small; font-family : sa $globaloutput.=&Include_virtual("$reklama")||''; } - if (!$opt_z && length ($qs)<=255 && $qs !~ /(sstr)|(rand)|(comp)|(all=)/i) { + if ($usehash && !$opt_z && length ($qs)<=255 && $qs !~ /(sstr)|(rand)|(comp)|(all=)/i) { my $sth=$dbh->prepare("SELECT page,times,t from hash where query=".$dbh->quote($qs)); $sth->execute(); my ($p,$times,$t)=$sth->fetchrow(); @@ -2225,7 +2250,7 @@ my ($sth) = $dbh->prepare("SELECT t1.Id, } if (!$opt_z){ print $globaloutput; - if (($qs!~ /(rand)|(sstr)|(comp)/i) && (length $qs<=255)) { + if (($qs!~ /(rand)|(sstr)|(comp)/i) && (length $qs<=255) && $usehash) { $globaloutput= $dbh->quote($globaloutput); $dbh->do("insert into hash (query,page) values (". $dbh->quote($qs).