Обсуждение: Re: your mail

Поиск
Список
Период
Сортировка

Re: your mail

От
The Hermit Hacker
Дата:
Redirected to -interfaces vs -admin


On Mon, 23 Nov 1998, Ken Wills wrote:

> Hi!
>
> I have an annoying problem, that I just haven't been able to get around yet. When I parse the
> input from a form and go to insert it eveything works fine as long as the user doesn't use
> the ' character in the input. I've tried using qw{} and qq{}, which either don't interpolate
> or give me errors. Anyone have any suggestions? Postgres 6.4, Apache 1.3, mod_perl 1.16.
> The insert statement is below.
>
>
> my $query_string=qq{INSERT INTO CALLS (ca_service_id, ca_org_name, ca_phone_number, ca_status,
> ca_product, ca_problem, ca_resolution, ca_contact_name, ca_assigned, ca_date) VALUES ('$service_id',
> '$org_name', '$phone_number', '$status', '$product', '$problem', '$resolution', '$contact',
> '$assigned', '$time_now')};

escape your imput strings first...something like:

$phone_number =~ s/'/\\'/g;

Marc G. Fournier
Systems Administrator @ hub.org
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org


RE: your mail (Should have been problems with ')

От
"Ken Wills"
Дата:
Firstly, thanks to everone who replied so fast!!

> I have an annoying problem, that I just haven't been able to get around yet. When I parse the
> input from a form and go to insert it eveything works fine as long as the user doesn't use
> the ' character in the input. I've tried using qw{} and qq{}, which either don't interpolate
>> or give me errors. Anyone have any suggestions? Postgres 6.4, Apache 1.3, mod_perl 1.16.
>> The insert statement is below.

>escape your imput strings first...something like:

a number of people suggested something like:

>$phone_number =~ s/'/\\'/g;

Ok, I tried this - it does what it looks like is supposed to. If I enter:
John's shoes, I get John\'s shoes. Unfortunatly I still get an error. If i enter it
as John's shoes' ,I dont get an error. Seems like it only likes them in pairs. The funny thing is if
I supply them in pairs, it inserts the whole string, I'd have thought that it would parse them
or something, and only insert the values between the '.

Ken

RE: [INTERFACES] RE: your mail (Should have been problems with ')

От
"Ken Wills"
Дата:
I just ended up doing:

$phone_number =~ s/'/\\'\\'/g;
to substitute two ' for every '.

Thanks again to all for the suggestion.

>a number of people suggested something like:
>>$phone_number =~ s/'/\\'/g;
>Seems like it only likes them in pairs.

Ken


Re: [INTERFACES] RE: your mail (Should have been problems with ')

От
The Hermit Hacker
Дата:
On Mon, 23 Nov 1998, Ken Wills wrote:

> Firstly, thanks to everone who replied so fast!!
>
> > I have an annoying problem, that I just haven't been able to get around yet. When I parse the
> > input from a form and go to insert it eveything works fine as long as the user doesn't use
> > the ' character in the input. I've tried using qw{} and qq{}, which either don't interpolate
> >> or give me errors. Anyone have any suggestions? Postgres 6.4, Apache 1.3, mod_perl 1.16.
> >> The insert statement is below.
>
> >escape your imput strings first...something like:
>
> a number of people suggested something like:
>
> >$phone_number =~ s/'/\\'/g;
>
> Ok, I tried this - it does what it looks like is supposed to. If I enter:
> John's shoes, I get John\'s shoes. Unfortunatly I still get an error. If i enter it
> as John's shoes' ,I dont get an error. Seems like it only likes them in pairs. The funny thing is if
> I supply them in pairs, it inserts the whole string, I'd have thought that it would parse them
> or something, and only insert the values between the '.

Have you tried doing:

    print STDERR ${inputstr}, "\n";

To see what your 'insert into...' string looks like exactly?  It looks
like you are missing a ' in there somewhere when you are generating yoru
string...

Marc G. Fournier
Systems Administrator @ hub.org
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org


RE: [INTERFACES] RE: your mail (Should have been problems with ')

От
"Ken Wills"
Дата:
>>
>> >$phone_number =~ s/'/\\'/g;
>>
>> Ok, I tried this - it does what it looks like is supposed to. If I enter:
>> John's shoes, I get John\'s shoes. Unfortunatly I still get an error. If i enter it
>> as John's shoes' ,I dont get an error. Seems like it only likes them in pairs. The funny thing is if
>> I supply them in pairs, it inserts the whole string, I'd have thought that it would parse them
>> or something, and only insert the values between the '.

>Have you tried doing:

>    print STDERR ${inputstr}, "\n";

>To see what your 'insert into...' string looks like exactly?  It looks
>like you are missing a ' in there somewhere when you are generating yoru
>string...

I tried this, and can see whats causing the error. From apache's error log:
--snip--
\'
\'
\'
none7
[Mon Nov 23 09:54:31 1998] [error] DBD::Pg::db do failed: ERROR:  Bad datetime external representation
'Mon Nov 23 09NULLNULL 1998'

--snip--
the time field is the last one to go in here. the insert string looks like:
my $query_string=qq{INSERT INTO CALLS (ca_service_id, ca_org_name, ca_phone_number, ca_status,
ca_product, ca_problem, ca_resolution, ca_contact_name, ca_assigned, ca_date) VALUES ('$service_id',
'$org_name', '$phone_number', '$status', '$product', '$problem', '$resolution', '$contact',
'$assigned', '$time_now')};

It seems like I am getting an extra \' from somewhere. I'll take a look at that. Thanks again to all.

Ken

RE: [INTERFACES] RE: your mail (Should have been problems with ')

От
The Hermit Hacker
Дата:
On Mon, 23 Nov 1998, Ken Wills wrote:

>
> >    print STDERR ${inputstr}, "\n";
>
> >To see what your 'insert into...' string looks like exactly?  It looks
> >like you are missing a ' in there somewhere when you are generating yoru
> >string...
>
> I tried this, and can see whats causing the error. From apache's error log:
> --snip--
> \'
> \'
> \'
> none7
> [Mon Nov 23 09:54:31 1998] [error] DBD::Pg::db do failed: ERROR:  Bad datetime external representation
> 'Mon Nov 23 09NULLNULL 1998'
>
> --snip--
> the time field is the last one to go in here. the insert string looks like:

> my $query_string=qq{INSERT INTO CALLS (ca_service_id, ca_org_name, ca_phone_number, ca_status,
> ca_product, ca_problem, ca_resolution, ca_contact_name, ca_assigned, ca_date) VALUES ('$service_id',
> '$org_name', '$phone_number', '$status', '$product', '$problem', '$resolution', '$contact',
> '$assigned', '$time_now')};

First, why not just put 'now' where '$time_now' is?
Second, what is the output in the Apache logs if you add:

print STDERR $query_string, "\n";

Right After the "my $query_string=" statement?  You should get something
tha tlooks like:

INSERT INTO CALLS...

Marc G. Fournier
Systems Administrator @ hub.org
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org