Пользовательская часть

Index.pl

#!/usr/bin/perl

use lib 'mod';

use DBI();

use DBD::mysql;

use CGI qw/:standard/;

use CGI::Cookie;

use Time::Local;

use CGI::Carp 'fatalsToBrowser';

use HTML::Template;

 

require "setup.inf"; #переменные

 

#require "sub.pm"; #переменные

 

#подключеие БД

$dbh = DBI->connect("DBI:mysql:database=$db;host=$host","$user","$password");

$dbh->do("SET NAMES 'cp1251'");

 

$fid = param('id1');

$fid2 = param('id2');

$action = param('action');

 

 

$buffer2 = $ENV{'QUERY_STRING'};

 

#От SQL Иньекций

$fid =~ s/('|"|\||-|=|~|>|<|(|)|\$|#)//g;

$fid2 =~ s/('|"|\||-|=|~|>|<|(|)|\$|#)//g;

$action =~ s/('|"|\||-|=|~|>|<|(|)|\$|#)//g;

#/От SQL Иньекций

 

@pairs2 = split(/&/, $buffer2);

foreach $pair2 (@pairs2) {

   ($name2, $value2) = split(/=/, $pair2);

   $value2 =~ tr/+/ /;

   $value2 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

   $FORM{$name2} = $value2;

}

 

$form_fid = $FORM{"id1"}; $form_fid =~ s/('|"|\||-|=|~|>|<|(|)|\$|#)//g;

 

$viev = $FORM{"viev"};

$act = $FORM{"act"};

 

if ($act eq ''){ #если $act пусто. Возможно при нажатии на кнопку в форме

($xxx) = $ENV{'REQUEST_URI'} =~ m#([^\\/:]+)$#;

 ($act) = split (/\./,$xxx);

 ($act, $fid) = split (/-/,$act);

my $tmp = substr("$act", 0,1);

if ($tmp eq '?'){$act = '';}

 

#@pairs2 = split(/&/, $xxx);

#foreach $pair2 (@pairs2) {

#   ($name2, $value2) = split(/=/, $pair2);

#   $value2 =~ tr/+/ /;

#   $value2 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

#   $FORM{$name2} = $value2;

#}

$act = $FORM{'act'};

$fid = $FORM{'id1'};

$viev = $FORM{"viev"};

           }

else {$fid = $form_fid;}

 

#Оставляем только числа

if ($fid) {$fid =~ s/(\d+)/$1/;$fid = $1;}

if ($fid2){$fid2 =~ s/(\d+)/$1/;$fid2 = $1;}

#/Оставляем только числа

 

#------------------------------Время------------------------

$timeoffset = 0;

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time + (3600*$timeoffset));

$mon++;

$mday = "0$mday" if ($mday < 10);

$mon = "0$mon" if ($mon < 10);

$hour = "0$hour" if ($hour < 10);

$min = "0$min" if ($min < 10);

$year = 2000 + ($year - 100);

$data_form = "$mday.$mon.$year";

$reg_date = "$year-$mon-$mday";

$time_form = "$hour:$min:$sec";

#-----------------------------------------------------------

#############################################

####<<< SEREDINKA

if ($act eq '')          {require "ind.pl";}

elsif ($act eq 'basket')   {require "basket.pl";}

elsif ($act eq 'all_model')   {require "all_model.pl";}

elsif ($act eq 'model_find')  {require "model_find.pl";}

elsif ($act eq 'firms')  {require "firms.pl";}

else {print "Location: http://$ENV{'SERVER_NAME'}/\n\n"; exit;}

####>>>

 

#Информационные сообщения

if (@ok){$HTML_SITE{ok} = \@ok;}

if (@error){$HTML_SITE{error} = \@error;}

#/Информационные сообщения

 

print "Content-type: text/html\n\n";

 

my $template = HTML::Template->new(filename => 'html/index.html');

$template->param(%HTML_SITE);

my $HTML_SITE_out = $template->output;

 

print <<EOF;

$HTML_SITE_out

EOF

#отключение БД

$dbh->disconnect();

All_model.pl

1;

 

&blokviev;

################################################################################

sub blokviev {

 

my $sth = $dbh->prepare("SELECT Model.*,Firma.Name_Firma as Nfirma,Pol.name as Pname,Kreplen.name as Kname,Mechanism.name as Mname

FROM Model inner join Firma on Model.id_Firma = Firma.id

      inner join Pol on Model.id_Pol = Pol.id

      inner join Kreplen on Model.id_Kreplen = Kreplen.id

      inner join Mechanism on Model.id_Mechanism = Mechanism.id");

 

$sth->execute();

while (my $ref = $sth->fetchrow_hashref()) {

 

if (!($ref->{Name_Model})){$ref->{Name_Model} = "Не задано";}

my $hd; if ($ref->{ehide}){$hd="_h";}

 

$HTML_SITE{content}.=<<LINES;

<table border=1 cellpadding="3" cellspacing="3" align="center">

<td rowspan=8 align="center">

<img src="/admin/Photos/$ref->{Photo}" align="absmiddle">

</td>

<td align="center"><b><font color="#666666">Фирма</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Nfirma}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Модель</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Name_Model}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Пол</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Pname}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Ремешок</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Kname}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Механизм</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Mname}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Дата поставки</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Data_post}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Стоимость</font></b>

</td>

<td align="center"><b><font color="red">$ref->{Price}</font>&nbspр.</b>

</td>

<tr>

<td align="center"><b><font color="#666666">Добавить в корзину</font></b>

</td>

<td align="center"><a href="javascript:addbasket($ref->{id});"><img src="/admin/images/basket.jpg" height="40" align="absmiddle" alt="Добавить в корзину"></a>

</td>

</table>

<table align="center">

<td height="10">

</td>

</table>

LINES

                                      }

$sth->finish();

$HTML_SITE{title} = "Просмотр всех моделей часов";

             

        }

################################################################################

 

1;

Model_find.pl

1;

my $sth = $dbh->prepare("SELECT id,Name_Firma FROM Firma");

$sth->execute();

while (my $ref = $sth->fetchrow_hashref()) {

 

$sel.=qq[<option value="$ref->{'id'}">$ref->{'Name_Firma'}</option>];

                                      }

$sth->finish();

if ($action eq 'Подобрать'){&clocksfind;}

else{&viev;}

sub viev {

$HTML_SITE{title} = "Выбор часов по параметрам";

$HTML_SITE{content}.=<<LINES;

<form style="display: none" method="POST" action="" id="deletes" name="deletes"><input type="hidden" name="ids" value=""><input type="hidden" name="action" value="Удалить"></form>

<br>

<h2>Заполните поля для поиска</h2>

<form method="POST" action="">

<br>

<div align="center"><b>Фирма</b></div>

<br>

<div align="center"><select name="firm" size="1" style="width:30%">

$sel

<option value="0" selected></option>

</select></div>

<br>

<div align="center"><b>Цена</b></div>

<br>

<div align="center"> от <input name="otcen" value="" type="text" style="width:25%"> ---- до <input name="docen" value="" type="text" style="width:25%"></div>

<br>

<div align="center"><b>Дата поступления</b>(Вводить в формате гггг-мм-дд)</div>

<br>

<div align="center"> от <input name="otdata" value="" type="text" style="width:25%"> ---- до <input name="dodata" value="" type="text" style="width:25%"></div>

<br>

<div align="center"><input name="action" type="submit" value="Подобрать"></div>

</form>

 

LINES

}

#######################################

 

sub clocksfind {

my $firm = param('firm');

my $otcen = param('otcen');

my $docen = param('docen');

my $otdata = param('otdata');

my $dodata = param('dodata');

 

$firm = $dbh->quote($firm);

$otcen = $dbh->quote($otcen);

$docen = $dbh->quote($docen);

$otdata = $dbh->quote($otdata);

$dodata = $dbh->quote($dodata);

 

my $sth = $dbh->prepare("SELECT Model.*,Firma.Name_Firma as Nfirma,Pol.name as Pname,Kreplen.name as Kname,Mechanism.name as Mname

FROM Model inner join Firma on Model.id_Firma = Firma.id

      inner join Pol on Model.id_Pol = Pol.id

      inner join Kreplen on Model.id_Kreplen = Kreplen.id

      inner join Mechanism on Model.id_Mechanism = Mechanism.id where ((Model.id_Firma=$firm)or($firm=0))

         and ((Model.Price between $otcen and $docen) or ($otcen=0 and $docen=0))

         and ((Model.Data_post between $otdata and $dodata) or ($otdata=0 and $dodata=0))");

 

$HTML_SITE{title} = "Выбор часов по параметрам";

$sth->execute();

$sumstr=0;

while (my $ref = $sth->fetchrow_hashref()) {

if (!($ref->{Name_Model})){$ref->{Name_Model} = "Не найдено!";}

my $hd; if ($ref->{ehide}){$hd="_h";}

 

$HTML_SITE{content}.=<<LINES;

<table border=1 cellpadding="3" cellspacing="3" align="center">

<td rowspan=8 align="center">

<img src="/admin/Photos/$ref->{Photo}" align="absmiddle">

</td>

<td align="center"><b><font color="#666666">Фирма</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Nfirma}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Модель</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Name_Model}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Пол</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Pname}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Ремешок</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Kname}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Механизм</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Mname}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Дата поставки</font></b>

</td>

<td align="center"><b><font color="blue">$ref->{Data_post}</font></b>

</td>

<tr>

<td align="center"><b><font color="#666666">Стоимость</font></b>

</td>

<td align="center"><b><font color="red">$ref->{Price}</font>&nbspр.</b>

</td>

<tr>

<td align="center"><b><font color="#666666">Добавить в корзину</font></b>

</td>

<td align="center"><a href="javascript:addbasket($ref->{id});"><img src="/admin/images/basket.jpg" height="40" align="absmiddle" alt="Добавить в корзину"></a>

</td>

</table>

<table align="center">

<td height="10">

</td>

</table>

LINES

$sumstr=$sumstr+1;

                                      }

if ($sumstr==0){$HTML_SITE{title2} = "Извините, но по данным параметрам ничего подобрать не получилось";}

$sth->finish();

 

}

    1;

Basket.pl

 

1;

 

if ($action eq 'Оформить_заказ') {&zakaz;}

elsif ($action eq 'Удалить') {&del;}

 

#viv

 

if (($action eq 'Оформить_заказ') and ($kvit)){&kvitanc;}

else{&viev;}

 

sub viev {

 

$q = CGI->new();

my $cookies = $q->cookie('basket');

 

@ms = split(/:/,$cookies);

$sum=0;

foreach $ls (@ms){

 

my ($ss1,$ss2) = split(/-/,$ls);

 

if (($idd1 eq $ss1) and ($idd2 eq $ss2)){ #условие чтобы не выводить уже удалённую модель. Нужно, т.к. куки не успевают записаться

}else{

my (@db) = $dbh->selectrow_array("

SELECT Firma.Name_Firma as Nfirma,Model.Name_Model,Model.Price

FROM Model inner join Firma on Model.id_Firma = Firma.id WHERE Model.id='$ss1'

");

 

$text.=<<LINES;

<tr><td align="center"><p>$db[0]</p></td><td align="center">$db[1]</td><td align="center">$db[2]</td><td><a href="#" onclick="delbasket('$ss1-$ss2')"><img src="/admin/images/Urna.jpg" height="30" align="absmiddle" alt="title" alt="Удалить"></a></td></tr>

LINES

$sum=$sum+$db[2];

                                  }

}

 

$HTML_SITE{title} = "Корзина";

 

$HTML_SITE{content}.=<<LINES;

<table cellpadding=5 cellspacing=5 align="center">

<tr>

<td align="center"><p><b>Фирма</b></p></td>

<td align="center"><b>Модель</b></td>

<td align="center"><b>Стоимость</b></td>

<td></td>

</tr>

$text

</table>

<HR SIZE="3" color="red">

<table cellpadding=5 cellspacing=5 align="center">

<td align="center">

Общая сумма заказа равна $sum рублей

</td>

</table>

 

<form style="display: none" method="POST" action="" id="deletes" name="deletes"><input type="hidden" name="ids" value=""><input type="hidden" name="action" value="Удалить"></form>

<br>

<h2>Пожалуйста заполните форму</h2>

<font color="red">*</font><small>Поля обязательные для заполнения</small>

<form method="POST" action="">

<br>

<div align="center"><font color="red">*</font>ФИО</div>

<div align="center"><input name="fio" value="" type="text" style="width:50%"></div>

<br>

<div align="center"><font color="red">*</font>Телефон</div>

<div align="center"><input name="tel" value="" type="text" style="width:50%"></div>

<br>

<div align="center"><font color="red">*</font>Email</div>

<div align="center"><input name="email" value="" type="text" style="width:50%"></div>

<br>

<div align="center"><input name="action" type="submit" value="Оформить_заказ"></div>

</form>

 

LINES

}

#######################################

sub kvitanc {

require "kvit.pm";

my $kvit = &kvit($idins);

 

$HTML_SITE{content}="$kvit";

}

#######################################

sub del {

my $ids = param("ids");

$q = CGI->new();

my $cookies = $q->cookie('basket');

@ms = split(/:/,$cookies);

($idd1, $idd2) = split(/-/,$ids);

foreach $ls (@ms){

my ($ss1,$ss2) = split(/-/,$ls);

 

if (($ss1 eq $idd1) and ($ss2 eq $idd2)){

 

}else{

           if ($newcook){

           $newcook = "$newcook:$ss1-$ss2";

           }else{

           $newcook = "$ss1-$ss2";

           }

}

}

 

#Устанавливаем новые куки средствам Perl

$c = new CGI::Cookie(-name=>'basket',

                -value=>"$newcook",

               );

$c =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$c =~ s/<!--(.|\n)*-->//g;

print "Set-Cookie: $c\n";

 

}

 

######################################

sub zakaz {

my $fio = param('fio');

my $tel = param('tel');

my $email = param('email');

if ($fio and $tel and $email){

 

#Создаём номер квитанции

my $noschet = $dbh->selectrow_array("SELECT max(nom) FROM schet");

$noschet++;

 

$fio = $dbh->quote($fio);

$tel = $dbh->quote($tel);

$email = $dbh->quote($email);

 

#Записываем квитанцию в базу

my $sth = $dbh->prepare("insert into schet (nom,fio,tel,email,data) values ('$noschet',$fio,$tel,$email,'$reg_date $time_form')");

if ($sth->execute()){

$idins = $sth->{'mysql_insertid'};

$sth->finish();

 

   #Заносим купленные билеты. т.е. отмечаем их, что они купленные

   $q = CGI->new();

   my $cookies = $q->cookie('basket');

   @ms = split(/:/,$cookies);

   foreach $ls (@ms){

   my ($ss1,$ss2) = split(/-/,$ls);

 

   $sth=$dbh->do("INSERT INTO sale (Model_id, schet_id) VALUES ('$ss1', '$idins')"); # добавляем новый

 

   #Удаляем куки

      my $c = new CGI::Cookie(-name=>'basket',

                           -expires => '-1y',

                          );

      $c =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

      $c =~ s/<!--(.|\n)*-->//g;

      print "Set-Cookie: $c\n";

      $kvit=1;

                   }

}

}else{

$HTML_SITE{title2} = "<p style=\"color:red;\">Не заполнены обязательные поля</p>";

}

 

}

 

1;

Приложение Б


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: