Keith, I can't tell much from what I'm seeing that should cause a problem. I
might suggest a couple of steps for tracking it down, then I'll offer you a
bit of advice on safely inserting data that in taken from user input.

First, you have said that the print from the year prints the date in the
format that MySQL wants it, have you tried printing the entire query,
copying that to your query tool, and seeing if MySQL takes the input as the
query is produced? That might at least tell us if the problem is with how
the data is being seen by MySQL, or if it is elsewhere, and it will take all
the "should's" out of the troubleshooting that part.

When you are satisfied that the data can be inserted (maybe even before),
you need to be careful with the way you are handling the insert query -
especially if users are allowed to enter data. What if a user inputs a value
with an apostrophe? It will cause a failure the way you are doing this. To
safely handle user input, to be able to prepare a query and execute several
times with different data, or other reasons, you need to use placeholders
instead of putting your variables into your query. And one more thing, you
need to capture an error if it is produced - just like you have with
connection. To make your error messages more meaningful without the extra
typing, turn your entire query into a variable before you prepare. I would
handle your insert query like this:
</snip>
my $insert = qq{"INSERT INTO News
        (ntitle, ndate, nurl, nblurb, nsource)
        VALUES(?, ?, ?, ?, ?)};

my $inserth = $dbh->prepare($insert) || die "Can't
prepare\n$insert\n$DBI::errstr\n";

$inserth->execute($ntitle, $ndate, $nurl, $nblurb, $nsource) || die
        "Can't execute\n$insert\nWith values:\n$ntitle, $ndate, $nurl, $nblurb,
$nsource
        $DBI::errstr\n";

</snip>

Putting the error capturing like I have done will also tell us if there is a
problem inserting, if so exactly what the error is - no guesswork - and you
know what data you're dealing with.

As you see, the placeholders are not quoted when you prepare, and they are
arguments to $inserth->execute() in the same order as the query expects
them.

Hopefully with all that, you can narrow the error search and get to where
the problem is, and can write that so that a user can't screw you up by
putting in a value that will cause problems with the query.

If you get an error message, and want to go further, I'll be happy to see
what we can do.

Steve H.

-----Original Message-----
From: Keith A. Calaman [mailto:[EMAIL PROTECTED]]
Sent: Saturday, February 02, 2002 10:11 PM
To: [EMAIL PROTECTED]
Subject: pop-up box JOIN() to mysql not populating dates


I am resending this to the group because I haven't gotten a response nor
have I got it to work.  I won't send it again but I thought someone who
could help may have missed it.  I have pasted my code below.  The problem I
am having is:

my $ndate = join('-', $nyear,$nmonth,$nday);

is printing back to my form the exact format that should be correct to
insert into mysql.  However, when the INSERT runs the value does not get
inserted properly.  $nyear,$nmonth,$nday are grabbed from values a user
selects via three pop-up select boxes.  Anyone have any ideas?  Also, I am
new to this so your comments on my code are welcomed and appreciated.
Thanks in advance.





#!/usr/bin/perl -w

use strict;
use diagnostics;


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


use CGI;
use DBI;

#declare form variables

my $query = CGI->new();
my $ntitle = $query->param('ntitle');
my $nyear = $query->param('year');
my $nmonth = $query->param('month');
my $nday = $query->param('day');
my $nurl = $query->param('nurl');
my $nblurb = $query->param('nblurb');
my $nsource = $query->param('nsource');
my $tracker = $query->param('tracker');
my $hostname = 'www.host.com';
my $database = 'sd';
my $user = 'usr';
my $password = 'guess';
my $driver = 'mysql';

#convert form variables

my $ndate = join('-', $nyear,$nmonth,$nday);

#connect to database

my $dsn = "DBI:$driver:database=$database;host=$hostname";
my $dbh = DBI->connect($dsn, $user, $password)  or die "Cant connect to
 the DB:
$DBI::errstr\n";


#determine what to do

if ($tracker eq 0){

print <<EndOfHTML;
<html>
<body>

<FORM METHOD=POST ACTION=" ">
<INPUT TYPE="hidden" NAME="tracktype" VALUE="2">
<INPUT TYPE="hidden" NAME="tracker" VALUE="1">
<INPUT TYPE="hidden" NAME="ntitle" VALUE="$ntitle">
<INPUT TYPE="hidden" NAME="ndate" VALUE="$ndate">
<INPUT TYPE="hidden" NAME="nurl" VALUE="$nurl">
<INPUT TYPE="hidden" NAME="nblurb" VALUE="$nblurb">
<INPUT TYPE="hidden" NAME="nsource" VALUE="$nsource">
Title: $ntitle<br>
Date:  $ndate<br>
URL: $nurl<br>
Blurb: $nblurb<br>
Source: $nsource<br>
<P><INPUT TYPE=submit>
</body>
</html>
EndOfHTML

}elsif($tracker eq 1){

my $sth = $dbh->prepare("INSERT INTO News
(ntitle, ndate, nurl, nblurb, nsource)
VALUES('$ntitle', '$ndate', '$nurl', '$nblurb', '$nsource')");

$sth->execute();

my $new = $dbh->prepare("select N_ID, NDate, NSource, NTitle, NBlurb, NURL
from News WHERE NApprove=0");

$new->execute();

my $news;

while (my @row = $new->fetchrow_array()) {
 $news .= qq|  <value="$row[0]"> $row[1] <i>$row[2]</i><br>
        <a href="$row[5]"><b>"$row[3]"</b></a><br>$row[4]..<br><br>\n|;

}

print <<EndOfHTML;
<html>
<body>
$news
</body>
</html>
EndOfHTML

}elsif($tracker eq 2){

print("there!\n");

}else{

print("failure!\n");

}


$dbh->disconnect;

exit;






-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to