in reply to Using perl to Create a Table in a Database

You're building your HTML table with rows like:

<tr><td><input type="text" name="fieldname" />

The name value should probably have a '$' in front:

<tr><td><input type="text" name="$fieldname" />

Then, in your second script, read the params in a loop in much the same way as you wrote the names in the first script.

-- Ken

Replies are listed 'Best First'.
Re^2: Using perl to Create a Table in a Database
by mynameisG (Novice) on Nov 04, 2010 at 15:03 UTC

    Earlier when I first wrote the script I did put '$' in front of name="fieldname" etc... and then the output would change to 'CREATE TABLE example (fieldname1 fieldtype1 (fieldlength1)) instead of... 'CREATE TABLE example (fname char (12))'

      From your OP: "...I feel like I have to create some kind of loop...".

      I'm suggesting you put a loop in the the second script in the same way that you have a loop in the first script. That way, the names you use in param() should match the names you've used in the HTML form and the values returned by param() should marry up with the values you entered in the HTML form.

      -- Ken

        So you mean like this...?

        #!/usr/bin/perl use strict; use CGI qw(:standard); use DBI; print "Content-type: text/html\n\n"; my $database="assignments"; my $username="web320"; my $password=""; my $fieldname=param('fieldname'); my $fieldtype=param('fieldtype'); my $fieldlength=param('fieldlength'); my $table=param('table'); my $field=param('field'); my $f; for ($f=1;$f<=$field;$f++) { my $fieldname=param('fieldname' .$f); my $fieldtype=param('fieldtype' .$f); my $fieldlength=param('fieldlength' .$f); } #connect to database my $dsn="DBI:mysql:$database:localhost"; my $dbh=DBI->connect($dsn,$username) or die print "doesn't work"; #if +use password, put ,$password my $query = "CREATE TABLE $table ($fieldname $fieldtype ($fieldlength) +)"; #prepare and execute my $sth=$dbh->prepare($query) or die print "bad query"; #$sth->execute(); print $query;

        the only problem i have left now is that it only prints the tablename ($table) and not $fieldname, $fieldtype, $fieldlength i.e. CREATE TABLE test (())

        So you mean like this...?

        #!/usr/bin/perl use strict; use CGI qw(:standard); use DBI; print "Content-type: text/html\n\n"; my $database="assignments"; my $username="web320"; my $password=""; my $fieldname=param('fieldname'); my $fieldtype=param('fieldtype'); my $fieldlength=param('fieldlength'); my $table=param('table'); my $field=param('field'); my $f; for ($f=1;$f<=$field;$f++) { my $fieldname=param('fieldname' .$f); my $fieldtype=param('fieldtype' .$f); my $fieldlength=param('fieldlength' .$f); } #connect to database my $dsn="DBI:mysql:$database:localhost"; my $dbh=DBI->connect($dsn,$username) or die print "doesn't work"; #if +use password, put ,$password my $query = "CREATE TABLE $table ($fieldname $fieldtype ($fieldlength) +)"; #prepare and execute #my $sth=$dbh->prepare($query) or die print "bad query"; #$sth->execute(); print $query;

        the only problem i have left now is that it only prints the tablename ($table) and not $fieldname, $fieldtype, $fieldlength i.e. CREATE TABLE test (())