Gå til innhold

Anbefalte innlegg

jeg har et lite problem med bruk av forms, når jeg prøver og poste går ikke siden

til der den skal, men det står riktig i url`n.. så hvis jeg trykker i url`n og på enter kommer jeg ditt jeg skal.. er det noen som vet feilen??

skriptet mitt er her:

 

#!/usr/bin/perl
use CGI qw(:cgi-lib :standard);
use CGI::Carp qw(fatalsToBrowser);
use DBI;
require "db.pl";
print "Content-type: text/html\n\n";

&ReadParse;
$action = $in{'side'};

if    (!$action){&post_nyhet;}
elsif ($action eq post){&send_nyhet;}
else  {print "Finner ikke siden!!";}

sub post_nyhet {
#websiden
print qq~
<p align="center"><strong>Legg Til Nyhet!</strong></p>
<form name="form1" method="post" action="test.cgi?side=post">
<p>Overskrift:</p>
<p><input type="text" name="overskrift"></p>
<p>Smakebit:</p>
<p><textarea name="smakebit" rows="6" cols="46"></textarea></p>
<p>Nyhet:</p>
<p><textarea name="nyhet" rows="6" cols="46"></textarea></p>
<p><input type="submit" value="send"></p>
</form>
<br>
~;
}
sub send_nyhet {
#les fra GET
&ReadParse(%in);
$overskrift = $in{"overskrift"};
$smakebit = $in{"smakebit"};
$nyhet = $in{"nyhet"};

#sett inn til mysql
$sth = $dbh->prepare("insert into nyheter(overskrift, smakebit, nyhet) values(?,?,?)");
$sth->execute($overskrift,$smakebit,$nyhet);
$sth->finish();

#websiden
print qq~
<p align="center"><strong>Nyheten er lagt til!</strong></p>
<br>
<p align="center"><a href="test.cgi">Gå Vidre!</a></p>
<br>
~;
}

 

Håper på svar.. :D

Lenke til kommentar
Videoannonse
Annonse

tror nesten du må vise kilden til db.pl også, et par andre kommentarer:

 

# alltid bruk strict!!

use strict;

 

# litt renere å skrive:

$action=$in{side};

# ... enn $side=$action{'side'};

# ... og det er helt trygt.

 

#videre:

$action eq "post"

# istedet for:

# $action eq post

Lenke til kommentar

db.pl er bare der jeg har passordet og nick og det til mysql.

men når jeg la til use strict;

får jeg feil på %in dingsene mine..??

 

Global symbol "%in" requires explicit package name at test.cgi line 10.

Global symbol "%in" requires explicit package name at test.cgi line 11.

Global symbol "%in" requires explicit package name at test.cgi line 35.

Global symbol "%in" requires explicit package name at test.cgi line 36.

Global symbol "%in" requires explicit package name at test.cgi line 37.

Execution of test.cgi aborted due to compilation errors.

 

Noen som vet feilen?

 

db.pl:

$dbhost = 'localhost';
$dbusername = 'nick';
$dbpasswd = 'pass';
$database = 'databasen_min';
$dbh = DBI->connect("dbi:mysql:$database","$dbusername","$dbpasswd") or die("Kunne ikke koble til serveren:  $DBI::errstr");

Lenke til kommentar

"%in dingsene" kalles for hash. Grunnen til at du får feilmelding er at du ikke har deklarert variabelen i skriptet ditt, f.eks slik:

 

my %in;
&ReadParse(\%in);

 

I store skript er det lett å gjøre feil, for eksempel å stave variabel navn feil, og deretter bruke timesvis for å lete opp feilen dersom ikke strict benyttes.

-

 

Feilen i skriptet ditt er at i:

 

<form name="form1" method="post" action="test.cgi?side=post">

 

så sendes aldri "side=post" key/value-par inn til skriptet ditt. Når du POST'er så sendes ikke verdiene i URL'en inn på samme måte som når du GET'er. En løsning er å opprette et "hidden field"-input som du kan sjekke verdien til, men det er kanskje like greitt å bare teste på noen av de andre verdiene som du sender inn i skriptet når du POST'er, for eksempel:

 

if ($in{name} eq "smakebit") {
  #Behandle form som ble POST'et
   ...
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...