Vad får du om du printar ut varje steg tro?
trim($_POST['anti_spam_field']) och
$_SESSION['anti_spam_code'])
22 svar · 955 visningar · startad av Guldstrand
Har försökt att använda följande kod, men får hela tiden "FEL KOD".
if (isset($_POST['submit'])){
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
echo "FEL KOD";
}
else {
echo "RÄTT KOD";
}
}
Detta finns överst på sidan:
$_SESSION['anti_spam_code'] = rand(1000, 9999);
Måste ha stirrat mig BLIND på detta.
Vet till 100% att jag anger RÄTT kod. Men får "FEL KOD" oavsett om jag anger rätt, fel -eller ingen kod alls. :q
Tacksam för hjälp.
God fortsättning på det nya året.
Vad får du om du printar ut varje steg tro?
trim($_POST['anti_spam_field']) och
$_SESSION['anti_spam_code'])
Sjodahl skrev:
Vad får du om du printar ut varje steg tro?
trim($_POST['anti_spam_field']) och
$_SESSION['anti_spam_code'])
Hmm.. :x
Då får jag:
$_POST['anti_spam_field'] : 2275
$_SESSION['anti_spam_code'] : 4040
Verkar som att $_SESSION['anti_spam_code'] hinner ändras innan formuläret "postas". *svårt att förklara*
Det är ju inte så djävla konstigt att dem inte stämmer överend om du gör följande:
$_SESSION['anti_spam_code'] = rand(1000, 9999);
högst upp på sidan som tar emot datan. :OO
Du skriver ju över värdet då.....
colione skrev:
Det är ju inte så djävla konstigt att dem inte stämmer överend om du gör följande:
$_SESSION['anti_spam_code'] = rand(1000, 9999);
högst upp på sidan som tar emot datan. :OO
Du skriver ju över värdet då.....
Ajdå.. tänkte faktiskt inte på det. :r
Hur löser jag detta på enklaste sätt?
tar bort det överst på den sidan...förutsatt att du inte postar mot samma sida. gör du det får du göra en koll på om typ submit är satt är den inte det genererar du annars kollar du
colione skrev:
tar bort det överst på den sidan...förutsatt att du inte postar mot samma sida. gör du det får du göra en koll på om typ submit är satt är den inte det genererar du annars kollar du
Formuläret postas till samma sida, (gastbok.php).
Jag har detta nu, strax över formuläret:
if (isset($_POST['submit'])){
if(!isset($_SESSION['anti_spam_code']))
$_SESSION['anti_spam_code'] = rand(1000, 9999);
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
print("FEL KOD");
}
else {
print("RÄTT KOD");
}
Har följande:
<?php
if (isset($_POST['submit'])){
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
print("FEL KOD<br><br>");
}
else {
print("RÄTT KOD<br><br>");
}
if(trim($_POST['namn']) == "" ){
die("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '> Du måste skriva ditt namn!");
}
if(trim($_POST['inlagg']) == "" ){
die("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '> Du måste skriva något!");
}
}
?>
Ps. Formuläret postas till samma sida, (gastbok.php).
<?php
if (isset($_POST['submit'])){
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
print("FEL KOD<br><br>");
}
else {
print("RÄTT KOD<br><br>");
}
if(trim($_POST['namn']) == "" ){
die("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '> Du måste skriva ditt namn!");
}
if(trim($_POST['inlagg']) == "" ){
die("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '> Du måste skriva något!");
}
}
// lägg till efter kontroll av indatan
$_SESSION['anti_spam_code'] = rand(1000, 9999);
?>
Så kanske? :)
Hjälpte tyvärr inte... får fortfarande samma fel (FEL KOD). :(
Då testar vi att dumpa datan så vi ser vad som går fel:
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
var_dump($_SESSION);
}
stevenet skrev:
Då testar vi att dumpa datan så vi ser vad som går fel:
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) { var_dump($_SESSION); }
Kanske gjorde något fel, för nu får jag bara "NULL".
Ska även meddela att jag har flyttat koden som hanterar formuläret, till en egen sida , (gastbok_post.php).
<?php
error_reporting(E_ALL);
ini_set("display_errors", "1");
include("mysql.php");
if (isset($_POST['submit'])){
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
var_dump($_SESSION);
}
}
if(trim($_POST['namn']) == "" ){
die("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '> Du måste skriva ditt namn!");
}
if(trim($_POST['inlagg']) == "" ){
die("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '> Du måste skriva något!");
}
$inlagg = db_escape($_POST['inlagg']);
$namn = db_escape($_POST['namn']);
$ort = db_escape($_POST['ort']);
$epost = db_escape($_POST['epost']);
$hemsida = db_escape($_POST['hemsida']);
$ip = '' . $_SERVER['REMOTE_ADDR'] . '';
$sql = "INSERT INTO gastbok(inlagg, namn, ort, epost, hemsida, ipadress, datum)
VALUES('$inlagg', '$namn', '$ort', '$epost', '$hemsida', '$ip', NOW())";
mysql_query($sql) or die (mysql_error());
header("Location: gastbok.php");
//}
?>
Jag ser inte session_start(); någonstans?
stevenet skrev:
Jag ser inte session_start(); någonstans?
Kom på det sen... :r
Nu fick jag:
array(0) { }
Då är inga sessioner satta. Har du session_start på den ursprungliga sidan? ;)
Du bör förövrigt escapa REMOTE_ADDR med.
$ip = db_espace($_SERVER['REMOTE_ADDR']);
stevenet skrev:
Då är inga sessioner satta. Har du session_start på den ursprungliga sidan? ;)
Du bör förövrigt escapa REMOTE_ADDR med.
$ip = db_espace($_SERVER['REMOTE_ADDR']);
Ber om ursäkt om jag har slösas på Er tid. Jag hade visst glömt bort "session_start();" överst, i all hast. :r
Nu verkar det fungera. Tack för all hjälp.
Hmm...
Nu verkar inte kontrollen göras alls, helt plötsligt. :o
<?php
ob_start();
session_start();
error_reporting(E_ALL);
ini_set("display_errors", "1");
include("mysql.php");
if (isset($_POST['submit'])){
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
echo "FEL KOD";
} else {
echo "RÄTT KOD";
}
unset($_SESSION['anti_spam_code']);
} else {
$_SESSION['anti_spam_code'] = rand(1000, 9999);
}
if(trim($_POST['namn']) == "" ){
print("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '> Du måste skriva ditt namn!");
}
if(trim($_POST['inlagg']) == "" ){
print("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '> Du måste skriva något!");
}
$inlagg = db_escape($_POST['inlagg']);
$namn = db_escape($_POST['namn']);
$ort = db_escape($_POST['ort']);
$epost = db_escape($_POST['epost']);
$hemsida = db_escape($_POST['hemsida']);
$ip = db_escape($_SERVER['REMOTE_ADDR']);
$sql = "INSERT INTO gastbok(inlagg, namn, ort, epost, hemsida, ipadress, datum)
VALUES('$inlagg', '$namn', '$ort', '$epost', '$hemsida', '$ip', NOW())";
mysql_query($sql) or die (mysql_error());
header("Location: gastbok.php");
//}
?>
EDIT: Misstänker att det är "ob_start();" som spökar.
Om jag inte har det överst, får jag ett felmeddelande.
Warning: Cannot modify header information - headers already sent by (output started at /home/var/www/****/demo/gastbok_post.php:12) in /home/var/www/****/demo/gastbok_post.php on line 42
Hittade en "bildkod" som verkar fungera, och är säkrare än att direkt skriva ut koden på sidan.
Men tror att det blir något fel vid kontrollen av formuläret.
Trots att jag INTE fyller i något, så sparas ändå infon i databasen.
Har detta nu:
<?php
session_start();
error_reporting(E_ALL);
ini_set("display_errors", "1");
include("mysql.php");
if (isset($_POST['submit'])){
if ($_SESSION['verification_code'] != $_POST['imagecode']) {
print("<img src='img/utropstecken.png' alt=' Fel kod! ' title=' Fel kod! '> Fel kod!<br>");
}
unset($_SESSION['verification_code']);
if(trim($_POST['namn']) == "" ){
print("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '> Du måste skriva ditt namn!<br>");
}
if(trim($_POST['inlagg']) == "" ){
print("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '> Du måste skriva något!<br>");
}
$inlagg = db_escape($_POST['inlagg']);
$namn = db_escape($_POST['namn']);
$ort = db_escape($_POST['ort']);
$epost = db_escape($_POST['epost']);
$hemsida = db_escape($_POST['hemsida']);
$ip = db_escape($_SERVER['REMOTE_ADDR']);
$sql = "INSERT INTO gastbok(inlagg, namn, ort, epost, hemsida, ipadress, datum)
VALUES('$inlagg', '$namn', '$ort', '$epost', '$hemsida', '$ip', NOW())";
mysql_query($sql) or die (mysql_error());
header("Location: gastbok.php");
}
?>
Ingen som vet vad jag har gjort för fel? :(
stevenet skrev:
Då testar vi att dumpa datan så vi ser vad som går fel:
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) { var_dump($_SESSION); }
Då går vi igenom denna procedur igen. Dumpa datan. :)