slakkis Skrevet 15. januar 2006 Del Skrevet 15. januar 2006 Heisann, jeg sitter og lager en liten shoutbox. (beklager at jeg sitter paa engelsk tastatur) Dette scriptet vil jeg at det skal vaere kun en fil. Problemet er at naar jeg refresher browseren saa blir ikke POST-variablene slettet, hvordan faar jeg til dette? <?php error_reporting(E_ALL); /* * simple shoutbox with database */ @include("db.php"); if(isset($_POST['nick']) && isset($_POST['posted_text'])) { $nick = $_POST['nick']; $posted_text = $_POST['posted_text']; $sql = mysql_query("INSERT INTO shout (nick, posted_date, posted_text) VALUES('$nick', now(), '$posted_text')") or die (mysql_error()); } $result = mysql_query("SELECT * FROM shout ORDER BY posted_date DESC LIMIT 0,10"); while ($row = mysql_fetch_object($result)) { echo "posted from : ".$row->nick."<br>"; echo "date : ". $time = date("H.i.s",$row->posted_date)."<br>"; echo "message : ".$row->posted_text."<br>"; echo "<hr>"; } // write out a submit box echo '<form action="index.php" method="post"> <p>nick<br> <input type="text" name="nick" maxlenght="60"> <br> message <br> <textarea name="posted_text" cols="45" rows="30" wrap="OFF"></textarea> <br> <input type="submit" value="Add"> <input name="Reset" type="reset" value="reset"> </p> </form>'; $nick = NULL; $posted_text = NULL; $_POST['nick'] = array(); $_POST['posted_text'] = array(); ?> problemet er naar jeg faar denne meldingen naar jeg refresher siden : "siden kan ikke oppdateres uten aa sende informasjonen paa nytt, osv". Denne maa jeg faa bort. Hvordan skal jeg klare aa resette postvariablene etter at data er lastet opp til databasen? Sikkerheten paa scriptet behoeves ikke aa kommenteres da dette blir lagt til senere Lenke til kommentar
tussiesel Skrevet 15. januar 2006 Del Skrevet 15. januar 2006 Når du trykker 'submit' sendes det en POST-forespørsel til webserveren med de dataene du har skrevet inn. Når du senere trykker 'refresh' vil IE sende POST-forespørselen på nytt, men er så vnnlig å spør deg om du faktisk vil gjøre det.. Det er altså ikke noe du kan gjøre på serversiden for å 'resette' postvariablene. Det du derimot kan gjøre, er å gjøre slik at webleseren sender en get-forespørsel etter post-forespørselen, slik at den sender en ny get når den skal refreshe. (Litt vanskelig forklart..) Til dette bruker du header("Location.."); Den delen av koden din som tar seg av postingen blir da slik: if(isset($_POST['nick']) && isset($_POST['posted_text'])) { $nick = $_POST['nick']; $posted_text = $_POST['posted_text']; $sql = mysql_query("INSERT INTO shout (nick, posted_date, posted_text) VALUES('$nick', now(), '$posted_text')") or die (mysql_error()); header("Location: http://server.com/sti/til/index.php"); } Det er viktig å passe på at <?php er det aller første som står i fila, og at det ikke skrives ut noe før linja med header (ikke engang mellomrom eller linjeskift). Hvis det gjør det vil det bare komme feilmelding.. (fordi alle headere må sendes før det kan komme noe annen tekst/html). (Dette er ikke en helt god løsning, siden den vil resultere i to forespørsler til serveren hver gang data postes, så jeg ser gjerne at noen kommer med en bedre løsning.) -Simen Lenke til kommentar
slakkis Skrevet 15. januar 2006 Forfatter Del Skrevet 15. januar 2006 hmm ja.. tenkte slik jeg ogsaa, men dette vil vel skape problemer f.eks hvis scriptet skal implementeres paa ei side vil jeg tro. Eksempelvis om scriptet inkluderes litt ned paa siden, naar headers allerede er sendt? Lenke til kommentar
trrunde Skrevet 15. januar 2006 Del Skrevet 15. januar 2006 Tror du kan bruke empty() for å slette post variablene, slik at de ikke blir sendt en gang til hvis de trykker refresh Lenke til kommentar
tussiesel Skrevet 15. januar 2006 Del Skrevet 15. januar 2006 Eksempelvis om scriptet inkluderes litt ned paa siden, naar headers allerede er sendt? 5442982[/snapback] Ja, det stemmer. Du kunne jo vurdert å dele det opp i to filer likevel. index.php: <?php error_reporting(E_ALL); /* * simple shoutbox with database */ @include("db.php"); $result = mysql_query("SELECT * FROM shout ORDER BY posted_date DESC LIMIT 0,10"); while ($row = mysql_fetch_object($result)) { echo "posted from : ".$row->nick."<br>"; echo "date : ". $time = date("H.i.s",$row->posted_date)."<br>"; echo "message : ".$row->posted_text."<br>"; echo "<hr>"; } // write out a submit box echo '<form action="shoutpost.php" method="post"> <p>nick<br> <input type="text" name="nick" maxlenght="60"> <br> message <br> <textarea name="posted_text" cols="45" rows="30" wrap="OFF"></textarea> <br> <input type="submit" value="Add"> <input name="Reset" type="reset" value="reset"> </p> </form>'; ?> shoutpost.php: <?php error_reporting(E_ALL); /* * simple shoutbox with database */ @include("db.php"); if(isset($_POST['nick']) && isset($_POST['posted_text'])) { $nick = $_POST['nick']; $posted_text = $_POST['posted_text']; $sql = mysql_query("INSERT INTO shout (nick, posted_date, posted_text) VALUES('$nick', now(), '$posted_text')") or die (mysql_error()); } header("Location: http://server.com/sti/til/index.php"); ?> -Simen 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å