Avatar billede human Nybegynder
01. oktober 2006 - 15:06 Der er 1 løsning

session, og måske noget mere

Hejs

På min side hvor brugere kan smide en kommentar til diverse nyheder har jeg et billede med en kode i, som de skal indtaste for at kunne poste. Og det virker sådan set også. Problemet kommer så, hvis brugeren af siden poster en kommentar til en nyhed, går tilbage til forsiden og vælger en ny nyhed han vil kommentere. Så vil koden i billede nemlig være den samme som før, men i virkeligheden har koden ændret sig. For at brugeren skal kunne se den rigtige kode i billede, skal han refreshe siden, og så kan hna poste. Det samme sker igen hvis han vil kommentere en ny nyhed (eller den samme en gang til).

billedet bliver lavet her:
if($_SERVER['REQUEST_METHOD'] != 'POST' ) { /* bruger jeg ellers vil koden ændre sig så snart der bliver trykket på submit, og så vil den aldrig være korrekt.*/
$im = ImageCreate(130, 25);

$white = ImageColorAllocate($im, 234, 234, 234);
$black = ImageColorAllocate($im, 239, 34, 155);

srand((double)microtime()*1000000);
$string = md5(rand(0,9999));

$_SESSION['new_string'] = substr($string, 17, 5);

ImageFill($im, 0, 0, $black);
ImageString($im, 4, 50, 5, $_SESSION['new_string'], $white);

ImagePNG($im, "../verify/verify.png");
ImageDestroy($im);
}

Og formen + diverse er her:
<form action="?id=<?=$_GET['id']?>" method="post">
Navn:* <input type="text" name="navn" /> <br />
Kode:* <input type="text" name="kode" /> <img src="../verify/verify.png" alt="Fortæl du ik' er en bot" />
<a href="#" onclick="popup('popup.php','Koden','300','300');">?</a> <br />
Tekst:*<br /><textarea name="text" rows="15" cols="80"></textarea> <br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="post" value="Kommenter" /> <br /><br />
</form>

<?php

if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
$_POST['kode'] = trim($_POST['kode']);

if ($_SESSION['new_string'] != $_POST['kode'] || $_POST['navn'] == '' || $_POST['text'] == '') {
    print "Der skete en fejl. Husk at du skal indtaste dit navn, sikkerhedskoden og skrive en tekst.<br />";
} else {

// Smid kommentaren i db med id som news_id
$insert = mysql_query("INSERT INTO comments(news_id, name, date, text) VALUES
('".$_GET['id']."', '".strip_tags(mysql_real_escape_string($_POST['navn']))."', NOW(), '".strip_tags(mysql_real_escape_string($_POST['text']))."')") or die(mysql_error());
?>
<script language="javascript" type="text/javascript">
    <!--
    window.location="http://techcity.dk/kommentarer/?id=<?=$_GET['id']?>";
    // -->
</script>
<?php
session_unset();
session_destroy();
exit;
}
}
hvis problemet skal uddybes yderligere så sig til. Jeg kan også poste hele dokumentet (104 linier).

På forhånd tak.
Avatar billede human Nybegynder
01. oktober 2006 - 21:19 #1
Problem løst. Viste sig at browseren cachede billede og derfor var den indtastede kode selvfølgelig forældet. løses med:

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester