Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Длина сообщения в таблице mysql 
:(
    Опции темы
Rezzonans
Дата 27.11.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 21.4.2005

Репутация: нет
Всего: нет



Привет всем, народ. Чего-то я сегодня перегрелся с этим mysql. Вопрос такой:

создаём следующую БД:

mysql>create database new;
mysql>create table musrs(name varchar(20), mail varchar(20), msg varchar(255));

Затем пишем такую прогу:

Код


#!perl -w

use CGI::Carp qw (fatalsToBrowser);
use DBI;
print "Content-type: text/html\n\n";

my ($db, $user, $pwd, $host) = ('new', 'root', 'passwd', 'localhost');

##################################START_DECODE#################################
$dats = $ENV{'QUERY_STRING'} if ($ENV{'REQUEST_METHOD'} eq 'GET');
read(STDIN,$dats,$ENV{'CONTENT_LENGTH'}) if ($ENV{'REQUEST_METHOD'} eq 'POST');
$dats =~ s/[a-fA-F0-9][a-fA-F0-9]/pack("C",hex($1))/eg;
$dats =~ tr/+/ /;
$dats =~ s/</&lt;/;
$dats =~ s/>/&gt;/;
$dats =~ s/\"/\"/;
$dats =~ tr/ / /s;

@massiv = split(/&/,$dats);
foreach $mas (@massiv){
($name,$value) = split(/=/,$mas);
$hash{$name} = $value;
}
      my ($mss,$eml,$nm) = ($hash{'msg'},$hash{'mail'},$hash{'login'});
###################################END_DECODE##################################


###################################START_FORM###################################
print qq~
<form method = 'POST'>
<table>
  <tr>
    <td>Имя:
  <tr>
    <td>
      <input type = 'text' name = 'login'>
  <tr>
    <td>E-mail:
  <tr>
    <td>
       <input type = 'text' name = 'mail'></tr></td>
  <tr>
     <td>
       <textarea name = 'msg'></textarea></tr></td>
  <tr>
     <td>
       <input type = 'submit' value = 'Отправить'></tr></td>
</table>
</form>
~;
#################################END_FORM#######################################



       if($nm && $mss){

           my $dbh = DBI->connect("DBI:mysql:database=$db;host=$host",$user,$pwd) || die $DBI::errstr;
           my $q = "insert into musrs values('$nm', '$eml', '$mss')";
           my $res = $dbh->prepare($q);
           $res->execute() || die $DBI::errstr;

        }



В принципе работает, и данные в базу заносит. Вопрос в том, что если у меня сообщение (колонка msg) к примеру равно 3000 символов, то получается какая-то хрень, если быть точным, то вообще не могу понять, заносится оно или нет. Что в этом случае делать? Помимо этого могут быть ещё ведь и новые строки. При их наличае тоже не понятно что происходит
--------------------
Первый детектор лжи был собран из ребра мужчины. Впрочем, до сих пор, никаких изменений не притерпел
PM MAIL   Вверх
Kiber_rat
Дата 27.11.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

Репутация: 1
Всего: 9



Используй для поля msg тип BLOB. А кстати, раз уж ты используешь CGI::Carp, то почему ты сам CGI не используешь? Переданные их формы параметры, без извращений, в этом случае можно получить так
Код

my %Arg = CGI::Vars();
А в твоем коде уже есть возможность SQL-injection, поскольку не экранируются как положенно данные из формы перед передачей в базу...


--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
sharq
Дата 27.11.2005, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 2
Всего: 28



Rezzonans ты же для поля msg - используешь тип поля varchar длинной 255 символов (максимум). Поэтому если у тебя msg содержит строку в 3000 символов, то в таблицу записывается только 255 символов.

Если тебе действительно нужно записывать такие большие сообщения в базу, то используй тип поля - text (binary blob).

Зачем ты ручками обрабатываешь форму, какая необходимость в этом?
perldoc CGI

И последнее: если у тебя скрипт далее работает с базой, то вынеси коннект в самое начало скрипта, дисконект поставь в самый конец скрипта.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Гость_Rezzonans
Дата 28.11.2005, 22:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











понял, спасибо, мужики
  Вверх
Гость_Rezzonans
Дата 28.11.2005, 22:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Тогда ещё вопрос. Вот команда mysql


LOAD DATA LOCAL INFILE "/css.txt" INTO TABLE adm;

которая загружает файл css.txt в таблицу adm. Только загружаться он будет в первую колонку таблицы. Как сделать, чтобы загрузить этот файл в третий столбец или четвёртый? Или это вообще чушь?
  Вверх
sharq
Дата 29.11.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 2
Всего: 28



Цитата
LOAD DATA LOCAL INFILE "/css.txt" INTO TABLE adm;


смотри документацию по данной команде здесь.

smile

Это сообщение отредактировал(а) sharq - 29.11.2005, 10:58


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.