Gå til innhold

problemer med POST-variabler


Anbefalte innlegg

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
Videoannonse
Annonse

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
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

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å
×
×
  • Opprett ny...