W0odY Skrevet 16. juni 2004 Del Skrevet 16. juni 2004 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.. Lenke til kommentar
Torbjørn Skrevet 16. juni 2004 Del Skrevet 16. juni 2004 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
W0odY Skrevet 16. juni 2004 Forfatter Del Skrevet 16. juni 2004 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
sam2 Skrevet 16. juni 2004 Del Skrevet 16. juni 2004 "%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
W0odY Skrevet 16. juni 2004 Forfatter Del Skrevet 16. juni 2004 Fikk det til og funke som jeg skal.. takk for svar.. Lenke til kommentar
Torbjørn Skrevet 17. juni 2004 Del Skrevet 17. juni 2004 bra at det løste seg, se forøvrig kapittelet "MIXING POST AND URL PARAMETERS" på cpan: http://search.cpan.org/~lds/CGI.pm-3.05/CGI.pm Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå