Forum Webscript.Ru
Программирование => Perl => Тема начата: Egiki от 05 Ноября 2002, 11:05:01
-
при отправки данных скрипту который пишет их в БД происходит глюк, если среди данных встречатеться значок № то все данный перекодируються ио кои - 8 в вин-1251. (((( типо кто знает что это такой напишите бцдц рад
Ежики.
-
Не верю! Покажи скрипт записи в БД.
-
щас напишу, вообщем вот оно
my $query = new CGI;
my $CGI = new CGI;
my $forward = $CGI->param (\'forward\');
print $CGI->redirect("$forward");
#print $CGI->header();
#Если надо обновить базу внесенными изменениями
if ($CGI->param(\'ac\')=~\'savechange\')
{
#опишем переменные
my (@parametr, $param, $dbh,$counter);
my (@id, $tmp, $counter, $name, $fieldname, $table, $type, $value, $sql, $idfield,$in_file,$bytesread,$buffer,$tmp_file,$updir);
#получим все переданные параметры
@parametr=$CGI->param();
#найдем ключевое поле и его значение
foreach $param (@parametr){
($tmp, $counter, $name, $fieldname)=split (/\\&/,$param,4);
if ($tmp=~/field/ and $name=~/CodeField/){
$value=$CGI->param($param);
($tmp, $idfield, $type)=split (/\\&/,$fieldname);
if ($type=~/s/){$value=~s/\\\'/\\"/g;$value="\'".$value."\'"};
if ($id[$counter]){
$id[$counter]=$id[$counter]." and $idfield = $value"
}
else{
$id[$counter]="$idfield = $value";
};
}
}
#распарсим все поля
foreach $param (@parametr){
my $file=$param;
($tmp, $counter, $name, $fieldname)=split (/\\&/,$param,4);
if ($tmp=~/field/ and $name!~/CodeField/){
$value=$CGI->param($param);
($table, $fieldname, $type)=split (/\\&/,$fieldname);
$value =~ s/ {2,}/ /g;
print qq($value);
# Передаем два параметра.
# 1 Путь к файлу на машине клиента принимаем из формы имя type
# 2 Путь к файлайм на сервере, заносим в базу.
# Примечание надо определять что это Описание или картинка. И от этого ставиьт путь на сервер.
# Сохранение файлов на сервере
if ($fieldname=~/FileInfo/) {
if ($value) {
print (\'*\');
print $value;
print (\'*
\');
my $DATA_DIR = \'\';
my $DEFAULT_UPLOAD_DIR = \'\';
my $MAX_SIZE_UPLOAD = 25; # Ko
my $FORM_URL = \'../upload.html\';
my $WEBMASTER_EMAIL = \'Egiki@olviko.ru\';
my $DISPLAY_LANG = \'En\'; # Fr -> french
if ($MAX_SIZE_UPLOAD) { $CGI::POST_MAX=12000 * $MAX_SIZE_UPLOAD; } # Ko
my $query = new CGI;
# Выделяем директорию куда сохранять
my $typedir = $query->param(\'forward\');
my ($hlam);
$_=$typedir;
s/\\w://;
s/([^\\/\\\\]+)$//;
$_ = $1;
s/\\.\\.+//g;
s/\\s+//g;
$typedir = $_;
($hlam , $typedir)=split (/\\?/,$typedir);
($typedir , $hlam)=split (/\\&/,$typedir);
($hlam , $typedir)=split (/\\=/,$typedir);
print $typedir;
my $dir = \'/home/uvd/html/upfile/\'.$typedir;
print &Upload($query, $dir, $file);
}
}
#КОНЕЦ МОЕЕЕЕЕее
if (!($value eq "")) {
if ($type=~/s/){$value=~s/\\\'/\\"/g;$value="\'".$value."\'"};# Если пришли символы
if ($value=~/\'\'/ and $type=~/s/){$value=\'NULL\'}; #Если пришло пусто.
#сформируем sql запрос
my $sql=qq(
UPDATE $table SET $fieldname = $value
WHERE $id[$counter]
);
#выполним запрос
# print "$sql
";
&SQLDo($sql);
}
}
}
};
########### Функция UPLOADв #################
sub Upload {
my($query, $upload_dir, $file) = @_;
my($file_query, $file_name, $size, $buff, $time, $bytes_count);
$size = $bytes_count =0;
$_ = $file_query = $query->param($file);
s/\\w://;
s/([^\\/\\\\]+)$//;
$_ = $1;
s/\\.\\.+//g;
s/\\s+//g;
$file_name = $_;
if (!(-e "$upload_dir/$file_name")) {
open(FILE,">$upload_dir/$file_name") || &Error("Error opening file $file_name for writing, error $!", 1);
binmode FILE;
$time=time();
while ($bytes_count = read($file_query,$buff,12000)) {
$size += $bytes_count;
print FILE $buff;
}
close(FILE);
}
}
########### КОНЕЦ Функции UPLOADв #################
sub win2koi{
my($result);
$result=$_[0];
$result =~ tr[ЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪюабцдефгхийклмнопярстужвьызшэщчъ][абвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ];
return $result;
}
Типа вот оно скрипт универсальный кто разбереться приник тому ))) но вот трабл при встрече значка № он данный конвертит в вин1251, причем проверял данный конверченный пришли уже скрипту тоесть кто то их уже конвертнуллл????????????
-
зы я там кое чего скипнул а то скрипт большой процедура SQLDo выполняет запросы в бауз кому не ясно.
-
втыкни вот это:
sub win2koi {
my($result)=shift;
$result=~ tr/ xC0xC1xC2xC3xC4xC5xC6xC7xC8xC9xCAxCBx CCxCDxCExCFxD0xD1xD2xD3xD4xD5xD6xD7xD8 xD9xDAxDBxDCxDDxDExDFxE0xE1xE2xE3xE4x E5xE6xE7xE8xE9xEAxEBxECxEDxEExEFxF0xF1 xF2xF3xF4xF5xF6xF7xF8xF9xFAxFBxFCxFDxFExFF/ xE1xE2xF7xE7xE4xE5xF6xFAxE9xEAxEBxECx EDxEExEFxF0xF2xF3xF4xF5xE6xE8xE3xFExFB xFDxFFxF9xF8xFCxE0xF1xC1xC2xD7xC7xC4x C5xD6xDAxC9xCAxCBxCCxCDxCExCFxD0xD2xD3 xD4xD5xC6xC8xC3xDExDBxDDxDFxD9xD8xDCxC0xD1/;
return $result;
}
-
не ну это есесно какая разница какую функцию мою или твою испольнят прикол не в том что скрипт данные конвертит прикол в том что они скрипту уже приходят конверченный тоесть если я в самом начале напишу.
my $CGI = new CGI;
my @blabla = $CGI->param();
foreach my $bla_2 (@blabla){
my $text = $CGI->param($bla_2);
print qq($text);
}
то текст будет конверченным.
ЗЫ. Я исправил этот глюк у себя но мне хотелосьбы знать почему данные приходят переконверченным.
ЗЫ-2. В кодировке кои нет такого значка как " № ". ????