all sorted now, thanks to you experts. it was because I have prefixed my variables with 'my' which restricted them.
On Friday 22 Mar 2002 3:34 pm, Matthew Harrison wrote: > is there something that says a variable doesn;t get passed when calling a > sub in the same script? i am working on a web-based role-playing game and > this is the script for inside the temple: > > #!/usr/bin/perl > > ##############Modules############## > > use CGI qw/:standard/; > use CGI::Carp "fatalsToBrowser"; > use DBI; > use CGI::Cookie; > > ##########Setup Variables########## > > %cookies = fetch CGI::Cookie; > $id = $cookies{'id'}->value; > > $dbh = new CGI; > $dbh=DBI->connect("DBI:mysql:database=flands;host=127.0.0.1;port=3306",ed >hunter,*****); die "Could not connect to database" if !$dbh; > > $sth = $dbh->prepare("SELECT money FROM chars WHERE id = '$id'"); > if ($sth && $sth->execute()){ > @results = $sth->fetchrow_array(); > } > my $money = $results[0]; > > my $action = param('action'); > my $loc = param('loc'); > > my $goback = referer(); > > ###########Initiate############# > > if ($action eq "initiate"){ > > if ($loc eq "av"){ > my $cost = 40; > my $god = "Alvir and Valmir"; > my $cash = $money - $cost; > my $spec1 = ""; > my $spec2 = ""; > addgod(); > } > > if ($loc eq "elnir"){ > my $cost = 60; > my $god = "Elnir"; > my $cash = $money - $cost; > my $spec1 = ""; > my $spec2 = ""; > addgod(); > } > if ($loc eq "sig"){ > my $cost = 50; > my $god = "Sig"; > my $cash = $money - $cost; > my $spec1 = "theivery"; > my $spec2 = "1"; > addgod(); > } > if ($loc eq "nagil"){ > my $god = "Nagil"; > my $spec1 = ""; > my $spec2 = ""; > nagili(); > } > if ($loc ne "av" && $loc ne "elnir" && $loc ne "sig" && $loc ne > "nagil"){ > > print <<END_OF_HTML > content-type: text/html > > <html> > <head><title>The Fabled Lands - Lost in the Temple</title></head> > <body bgcolor="#000000" text="#CCCCCC"><br><br>I'm sorry, but you seem to > have become lost in the temple, please <a href="$goback">click here</a> > to trace your way back. If you are sure you went the right way them > please <a href="mailto:edhunter\@peanutbuttercheesecake.co.uk">email the > authors'</a> or if you are managing the database yourself, please update > your records.</body> > <html> > END_OF_HTML > } > > sub nagili{ > > $dbh = new CGI; > $dbh=DBI->connect("DBI:mysql:database=flands;host=127.0.0.1;port=3306",ed >hunter,*****); die "Could not connect to database" if !$dbh; > > $sth = $dbh->prepare("SELECT rank FROM chars WHERE id = '$id'"); > if ($sth && $sth->execute()){ > @results = $sth->fetchrow_array(); > } > > my $rank = $results[0]; > my $score = int(rand 6)+1; > if ($score < $rank){ > $winlose = "You have been accepted"; > $dbh = new CGI; > $dbh=DBI->connect("DBI:mysql:database=flands;host=127.0.0.1;port=3306",ed >hunter,*****); die "Could not connect to database" if !$dbh; > > $sth = $dbh->prepare("UPDATE chars SET god = 'Nagil' WHERE id = '$id'"); > if ($sth && $sth->execute()){ > }} > else{ > $winlose = "You have been rejected"; > } > print <<END_OF_HTML > content-type: text/html > > <html> > <head><title>The Fabled Lands - The Temple of $god</title></head> > <body bgcolor="#000000" text="#CCCCCC"><br><br>It does not require > payment to become an initiate of the Temple of Nagil. Instead you are > made to endure many harsh test, the last of which being burried > underground in a sealed casket. To represent these tests, you must use > our Event Generation System (EGS), for information about using the EGS, > please <a > href="/flands/help/egs.html">click here</a>. This test represents rolling > one dice and comparing with your current rank. If you score lower than > your rank, you will be admitted, otherwise you must leave. To view the > results of the test, select with your mouse under the dashed line > below.<br><br>------------------------------<br><br><font > color="#000000"><b>Your rank:</b> $rank<br><br><b>The Score:</b> > $score<br><br><b>The Result:</b> $winlose</font><br><br><a > href="$goback">Return to the Temple Foyer</a> > </BODY></html> > END_OF_HTML > } > > sub addgod{ > > if ($money < $cost){ > print <<END_OF_HTML > content-type: text/html > > <html> > <head><title>The Fabled Lands - The Temple of $god</title></head> > <body bgcolor="#000000" text="#CCCCCC"><br><br>Sorry, but you seem to > have unsuficcient funds to allow you to partake of the initiation > ceremony. You must have at least $cost denarii to become an initiate, you > only have $money.<br>You can come back any time to try again and we will > be happy to accept you.<br><br><a href="$goback">Retrace your steps</a> > </BODY></html> > END_OF_HTML > } > else{ > $dbh = new CGI; > $dbh=DBI->connect("DBI:mysql:database=flands;host=127.0.0.1;port=3306",ed >hunter,*****); die "Could not connect to database" if !$dbh; > > $sth = $dbh->prepare("UPDATE chars SET god = '$god' WHERE id = '$id'"); > if ($sth && $sth->execute()){ > } > > $dbh = new CGI; > $dbh=DBI->connect("DBI:mysql:database=flands;host=127.0.0.1;port=3306",ed >hunter,*****); die "Could not connect to database" if !$dbh; > > $sth = $dbh->prepare("UPDATE chars SET money = '$cash' WHERE id = > '$id'"); if ($sth && $sth->execute()){ > } > > if ($spec1 ne ""){ > > $dbh = new CGI; > $dbh=DBI->connect("DBI:mysql:database=flands;host=127.0.0.1;port=3306",ed >hunter,*****); die "Could not connect to database" if !$dbh; > > $sth = $dbh->prepare("UPDATE chars SET $spec1 = $spec1 + $spec2 WHERE id > = '$id'"); > if ($sth && $sth->execute()){ > }} > print <<END_OF_HTML > content-type: text/html > > <html> > <head><title>The Fabled Lands - The Temple of $god</title></head> > <body bgcolor="#000000" text="#CCCCCC"><br><br>Thank you for becoming an > initiate of the Temple of $god, Your donation is gratefully accepted. You > should now see $god on your stats sheet.<br><br><a href="$goback">Retrace > your steps</a> > </BODY></html> > END_OF_HTML > }}} > > > ------------------------------------------------------------------------- >--------------------------------- i know it is ulgy, but i am quite new to > perl. why when the dynamic html page are generated does it show the $god > and $winlose variabled as being empty? i know the database part works, > but without the $god variable it will always add a null value to the > database. > > any ideas? -- Matthew Harrison Internet/Network Services Administrator Peanut-Butter Cheesecake Hosting Services Genstate www.peanutbuttercheesecake.co.uk -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]