webForumDet fria alternativet

Förhindra spam i formulär.

PHP

17 svar · 735 visningar · startad av sahle

Medlem sedan jan. 200336 inlägg
Frågan#1

Jag försöker få till ett fält där användarna ska skriva i ett fält manuellt för att förhindra spam, men får inte till det.

Jag vill har denna kod i sänd-filen

if (!eregi("^åtta",$koll))
{
fel("Glömde Du skriva in siffran 8 med bokstäver i kontrollfältet?");
}

Jag skulle vilja ha in denna på mitt formulär.
Jag har en formulärsida och skickar uppgifterna till en fil som heter spara.php och den skickar in datan till databasen.

Jag har provat att lägga in denna koden på sidan spara.php, men jag får inte riktigt till det. Den skickar datan oavsett vad som står i fältet.
Kan ni titta igenom vad jag ska ändra.

På formulär sidan så har jag lagt in denna koden:

<td width="19%" height="2"><b><font color="#FF0000">*</font>Skriv siffran 8 med bokstäver i rutan intill <br>
</b><font size="-1">(åtta)</font></td>
<td width="81%" height="2">
<input type="text" name="koll" size="50"16%">
</td>

på spara.php sidan har jag denna koden:

<?php

session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen

if (!regi("^åtta",$koll)) // här har jag lagt in texten för att hindra spam
{
$reg_error[] = 3; //här låter jag den skicka den längre ner på sidan om det är fel

}
if (isset($_POST['submit'])
{

// Tag bort eventuella blanksteg i början eller slutet

foreach($_POST as $key => $val)

{

$_POST[$key] = trim($val);

}
//Kolla efter tomma fält
if (empty($_POST['namn']) || empty($_POST['email']) ||
empty($_POST['anvnamn']) || empty($_POST['losen']))
{

$reg_error[] = 0;
}
// Kolla om e-post kan tänkas vara ok

if (!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,8}$/', $_POST['email']))
{
$reg_error[] = 2;
}
// Inga fel? Spara och logga in samt skicka till välkomstsida
if (!isset($reg_error))
{

 $sql = "INSERT INTO formular_reg (medlem, namn, email, anvnamn, losen, hemsida, sektion, fran, yrke, intressen, signatur, messenger, icq, datum)

VALUES('{$_POST['medlem']}', '{$_POST['namn']}', '{$_POST['email']}', '{$_POST['anvnamn']}', '{$_POST['losen']}', '{$_POST['hemsida']}', '{$_POST['sektion']}', '{$_POST['fran']}', '{$_POST['yrke']}', '{$_POST['intressen']}', '{$_POST['signatur']}', '{$_POST['messenger']}', '{$_POST['icq']}', NOW())";

mysql_query($sql);
$_SESSION['sess_id'] = mysql_insert_id();
$_SESSION['sess_namn'] = $_POST['namn'];
/* recipients */

$to = $_POST["email"] . ", " ; // note the comma

$to .= "Webmaster <adress@domain.com>";

/* subject */
$subject = "Bekräftelse på registrering";
/* message */

$message = '

<html>
<head>
<title>Här ser du en bekräftelse på registreringen du skickat.</title>
</head>
<body>
<p>Här ser du de uppgifter som är skickat!</p>
<table border="1" cellspacing="1" width="501">
<tr>
<td width="150"><b>Medlem:</b></td>
<td width="200">'.$_POST['medlem'].'</td>
</tr>
<tr>
<td width="150"><b>Namn:</b></td>
<td width="146">'.$_POST['namn'].'</td>
</tr>
<tr>
<td width="150"><b>Email:</b></td>
<td width="200">'.$_POST['email'].'</td>
</tr>
<tr>
<td width="150"><b>Användarnamn:</b></td>
<td width="146">'.$_POST['anvnamn'].'</td>
</tr>
<tr>
<td width="150"><b>Lösenord:</b></td>
<td width="146">'.$_POST['losen'].'</td>
</tr>
<tr>
<td width="150"><b>Hemsida:</b></td>
<td width="146">'.$_POST['hemsida'].'</td>
</tr>
<tr>
<td width="150"><b>Sektion:</b></td>
<td width="146">'.$_POST['sektion'].'</td>
</tr>
<tr>
<td width="150"><b>Från:</b></td>
<td width="146">'.$_POST['fran'].'</td>
</tr>
<tr>
<td width="150"><b>Yrke:</b></td>
<td width="146">'.$_POST['yrke'].'</td>
</tr>
<tr>
<td width="150"><b>Intressen:</b></td>
<td width="146">'.$_POST['intressen'].'</td>
</tr>
<tr>
<td width="150"><b>Signatur:</b></td>
<td width="146">'.$_POST['signatur'].'</td>
</tr>
<tr>
<td width="150"><b>MSN Messenger:</b></td>
<td width="146">'.$_POST['messenger'].'</td>
</tr>
<tr>
<td width="150"><b>ICQ Nummer:</b></td>
<td width="146">'.$_POST['icq'].'</td>
</tr>
<tr>
<td width="150"> </td>
<td width="146"> </td>
</tr>
</table>
</body>
</html>';
/* To send HTML mail, you can set the Content-type header. */
$headers = "MIME-Version: 1.0\r \n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r \n";
/* additional headers */

$headers .= "From: SMK <info@smktrollhattan.com>\r \n";

// $headers .= "cc: @glocalnet.net\r \n";

// $headers .= "Bcc: adress@.se\r\n";

/* and now mail it */

if(mail($to, $subject, $message, $headers))

header("Location: spara.php");
exit;
}

}

else

{

// Sätt variabler för tomt formulär

for ($i=0; $i<4; $i++)

{ 

$back[$i] = "";

} 

}

$error_list[0] = "Alla fält är inte ifyllda, fyll i: namn, användarnamn, lösenord och email";

$error_list[1] = "Du har inte fyllt i nummer";

$error_list[2] = "Felaktig e-postadress";

$error_list[3] = "Glömde Du skriva in siffran 8 med bokstäver i kontrollfältet?"; //Här har jag lagt in texten om det inte är rätt ifyllt.

if (isset($reg_error))

{

echo "Något blev fel:<br>\n";

echo "<ul>\n";

for ($i=0; $i<sizeof($reg_error); $i++)

{ 

echo "<li>{$error_list[$reg_error[$i]]}</li>\n";

} 

echo "</ul>\n";

$back[0] = $_POST['namn'];

$back[1] = $_POST['email'];

$back[2] = $_POST['anvnamn'];

$back[3] = $_POST['losen'];

}

else

{

print("Din anmälan är nu skickad!");

print "<br>";

print ("Du har nu skickat en registrering som kommer att läggas in på hemsidan inom kort, du kan även se anmälan i din e-mail,");

}
?>

Medlem sedan juni 200913 inlägg
#2

jag har inte kollat koden, men du far anvanda if satser.
jag kan inte koden i huvvet men typ

if ($_POST[siffra] !== 'åtta')
{
echo 'felstavat pa siffra 8';
}
else
{
// kod for att skcika data
}

Medlem sedan juni 20006 031 inlägg
#3

En motfråga till raden:

if (!regi("^åtta",$koll)) // här har jag lagt in texten för att hindra spam

Har du en funktion som heter regi eller har du skrivit fel och tänker på funktionen eregi?
Tillåter din php.ini shorttags? Om inte, ändra $koll till $_POST['koll']

Medlem sedan jan. 200336 inlägg
#4

Om jag skriver så här:

if ($_POST['koll'] == 'åtta')
{
echo 'felstavat';
}

då betyder det att om det inte står "åtta" i fältet "koll" skriv ut "felstavat"
eller har jag missat något?

För den skriver ut felstavat oavsett om jag fyller i fältet eller inte.

Medlem sedan juni 20006 031 inlägg
#5

!= kontrollerar om värdena är samma.
!== kontrollerar om värdena är samma och att typerna är samma.

Medlem sedan juni 20006 031 inlägg
#6

!= kontrollerar om värdena är samma.
!== kontrollerar om värdena är samma och att typerna är samma.

Medlem sedan jan. 200336 inlägg
#7

Nu har jag lagt till detta:

if ($_POST['koll'] !== 'åtta')
{
echo 'felstavat';
}
else
{
resten av formuläret här
}

Fyller jag i fältet med åtta så får jag även texten "felstavat" utskrivet men den skickar i väg datan.
Fyller jag inte i något i fältet så skriver den ut men skickar inte.

Nu ser resten ut så här:

<?php 

session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen 

if ($_POST['koll'] !== 'åtta')
{
echo 'felstavat';
}
else
{

if (isset($_POST['submit']) 
{ 

// Tag bort eventuella blanksteg i början eller slutet 

foreach($_POST as $key => $val)

{ 

$_POST[$key] = trim($val); 

} 
//Kolla efter tomma fält 
if (empty($_POST['namn']) || empty($_POST['email']) || 
empty($_POST['anvnamn']) || empty($_POST['losen'])) 
{ 

$reg_error[] = 0; 
} 
// Kolla om e-post kan tänkas vara ok 

if (!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,8}$/', $_POST['email'])) 
{ 
$reg_error[] = 2; 
} 
// Inga fel? Spara och logga in samt skicka till välkomstsida 
if (!isset($reg_error)) 
{ 

$sql = "INSERT INTO formular_reg (medlem, namn, email, anvnamn, losen, hemsida, sektion, fran, yrke, intressen, signatur, messenger, icq, datum)

VALUES('{$_POST['medlem']}', '{$_POST['namn']}', '{$_POST['email']}', '{$_POST['anvnamn']}', '{$_POST['losen']}', '{$_POST['hemsida']}', '{$_POST['sektion']}', '{$_POST['fran']}', '{$_POST['yrke']}', '{$_POST['intressen']}', '{$_POST['signatur']}', '{$_POST['messenger']}', '{$_POST['icq']}', NOW())";

mysql_query($sql);
$_SESSION['sess_id'] = mysql_insert_id(); 
$_SESSION['sess_namn'] = $_POST['namn']; 
/* recipients */

$to = $_POST["email"] . ", " ; // note the comma

$to .= "Webmaster <adress@domain.com>";

/* subject */
$subject = "Bekräftelse på registrering";
/* message */

$message = '

<html>
<head>
<title>Här ser du en bekräftelse på registreringen du skickat.</title>
</head>
<body>
<p>Här ser du de uppgifter som är skickat!</p>
<table border="1" cellspacing="1" width="501">
<tr>
<td width="150"><b>Medlem:</b></td>
<td width="200">'.$_POST['medlem'].'</td>
</tr>
<tr>
<td width="150"><b>Namn:</b></td>
<td width="146">'.$_POST['namn'].'</td>
</tr>
<tr>
<td width="150"><b>Email:</b></td>
<td width="200">'.$_POST['email'].'</td>
</tr>
<tr>
<td width="150"><b>Användarnamn:</b></td>
<td width="146">'.$_POST['anvnamn'].'</td>
</tr>
<tr>
<td width="150"><b>Lösenord:</b></td>
<td width="146">'.$_POST['losen'].'</td>
</tr>
<tr>
<td width="150"><b>Hemsida:</b></td>
<td width="146">'.$_POST['hemsida'].'</td>
</tr>
<tr>
<td width="150"><b>Sektion:</b></td>
<td width="146">'.$_POST['sektion'].'</td>
</tr>
<tr>
<td width="150"><b>Från:</b></td>
<td width="146">'.$_POST['fran'].'</td>
</tr>
<tr>
<td width="150"><b>Yrke:</b></td>
<td width="146">'.$_POST['yrke'].'</td>
</tr>
<tr>
<td width="150"><b>Intressen:</b></td>
<td width="146">'.$_POST['intressen'].'</td>
</tr>
<tr>
<td width="150"><b>Signatur:</b></td>
<td width="146">'.$_POST['signatur'].'</td>
</tr>
<tr>
<td width="150"><b>MSN Messenger:</b></td>
<td width="146">'.$_POST['messenger'].'</td>
</tr>
<tr>
<td width="150"><b>ICQ Nummer:</b></td>
<td width="146">'.$_POST['icq'].'</td>
</tr>
<tr>
<td width="150">&nbsp;</td>
<td width="146">&nbsp;</td>
</tr>
</table>
</body>
</html>';
/* To send HTML mail, you can set the Content-type header. */
$headers = "MIME-Version: 1.0\r \n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r \n";
/* additional headers */

$headers .= "From: SMK <info@smktrollhattan.com>\r \n";

// $headers .= "cc: @glocalnet.net\r \n";

// $headers .= "Bcc: adress@.se\r\n";

/* and now mail it */

if(mail($to, $subject, $message, $headers))

header("Location: spara.php"); 
exit;
} 

} 

else 

{ 

// Sätt variabler för tomt formulär 

for ($i=0; $i<4; $i++) 

{ 

$back[$i] = ""; 

} 

} 

$error_list[0] = "Alla fält är inte ifyllda, fyll i: namn, användarnamn, lösenord och email"; 

$error_list[1] = "Du har inte fyllt i nummer"; 

$error_list[2] = "Felaktig e-postadress"; 

$error_list[3] = "Glömde Du skriva in siffran 8 med bokstäver i kontrollfältet?"; //Här har jag lagt in texten om det inte är rätt ifyllt.

if (isset($reg_error))

{ 

echo "Något blev fel:<br>\n"; 

echo "<ul>\n"; 

for ($i=0; $i<sizeof($reg_error); $i++) 

{ 

echo "<li>{$error_list[$reg_error[$i]]}</li>\n"; 

} 

echo "</ul>\n"; 

$back[0] = $_POST['namn']; 

$back[1] = $_POST['email'];

$back[2] = $_POST['anvnamn']; 

$back[3] = $_POST['losen']; 

} 

else 

{ 

print("Din anmälan är nu skickad!");

print "<br>";

print ("Du har nu skickat en registrering som kommer att läggas in på hemsidan inom kort, du kan även se anmälan i din e-mail,");
}
} 
?>
Medlem sedan jan. 200336 inlägg
#8

Ingen som har någon idé om vad det kan vara, som gör att det skriver ut felmeddelandet oavsett om jag skriver i "åtta" eller något annat.

Jag skriver in denna kod:
if ($_POST['koll'] !== 'åtta')
{
echo 'felstavat';
}

Men den skriver ut "felstavat" varje gång.
Har jag lagt koden på fel ställe?

Medlem sedan aug. 20039 340 inlägg
#9

Pröva att byta != mot !==
Annars kan det vara så att sidan tolkas som UTF-8 av bläddararen medan filen är sparad som ISO-8859 eller tvärtom. Prova med en siffra som inte innehåller åäö. Prova att skriva ut strängarna bredvid varandra: echo "åtta".$_POST['koll']; och se om den ena ser konstig ut.

Medlem sedan maj 2009250 inlägg
#10

Hej Sahle
Hade du kört Joomla eller dotnetnuke så hade du enbart behövt aktivera captcha och du hade varit klar vid det här laget ..... Hör ni ni andra är det inte dax att ha en forum tråd för dels Joomla och en för dotnetnuke ..... de är väl att anse som olika etablerade tekniker för att bygga webbar

Medlem sedan aug. 20068 090 inlägg
#11

johaseo skrev:

Hej Sahle
Hade du kört Joomla eller dotnetnuke så hade du enbart behövt aktivera captcha och du hade varit klar vid det här laget ..... Hör ni ni andra är det inte dax att ha en forum tråd för dels Joomla och en för dotnetnuke ..... de är väl att anse som olika etablerade tekniker för att bygga webbar

Huh...? Du får ursäkta, men det var väl ett tämligen meningslöst och ogenomtänkt inlägg. Som att svara alla som ställer en fråga "hade du kunnat det där hade du inte behövt fråga". :OO

Varken Joomla eller DNN "etablerade tekniker" att bygga "webbar". Långt, långt, långt därifrån. Det är inte ens "tekniker".

Medlem sedan maj 2009250 inlägg
#12

Hej Danne V
Inlägget var knappast ogenomtänkt, ej heller meningslöst ........ Så du menar att det inte finns fog för att ha en forum kategori för Joomla och en för Dotnetnuke? Jag kan meddela att det behovet är enormt stort ... troligen 1000 ggr större jämfört med forum kategorin om gamla .asp

Till att börja med är joomla och dotnetnuke plattformar för att bygga just webbar och intranät ... och för detta ändamål är de väldigt utmärkta plattformar..... om en plattform är en teknik eller inte låter jag vara osagt ....

Användningen av just joomla och dotnetnuke växer oerhärt just nu och accelererar mycket ... ta en titt på http://www.dotnetnuke.com/ och spana in "users include" och du hittar många fortune 100 företag där ..... Joomla är ännu större men där har jag ingen länk till vilka största företag som använder just joomla

För att addera mera argument varför joomla och dotnetnuke är så stora:
Väldigt många webbhotell har lagt till stöd för just dessa 2 open source content management system för att hela marknaden vet att just dessa är de 2 största som finns och behovet för dem kommer alltid att finnas kvar då de nått en så stor spridning som de har

Medlem sedan juni 20031 837 inlägg
#13

sahle skrev:

Ingen som har någon idé om vad det kan vara, som gör att det skriver ut felmeddelandet oavsett om jag skriver i "åtta" eller något annat.

Jag skriver in denna kod:
if ($_POST['koll'] !== 'åtta')
{
echo 'felstavat';
}

Men den skriver ut "felstavat" varje gång.
Har jag lagt koden på fel ställe?

Testa att ändra det till

if ($_POST['koll'] != 'åtta')
{
    echo 'felstavat';
}

dvs bara ett likhetstecken om du har med utropstecken.

en är det alltid en fördel att omge sina kodexempel med de olika taggarna, för php finns en speciell [php ] [/php ] tagg (utan mellanrum i taggen.

Medlem sedan aug. 20068 090 inlägg
#14

johaseo skrev:

Hej Danne V
Inlägget var knappast ogenomtänkt, ej heller meningslöst ........ Så du menar att det inte finns fog för att ha en forum kategori för Joomla och en för Dotnetnuke? Jag kan meddela att det behovet är enormt stort ... bla bla bla bla

Jo, inlägget var tämligen ogenomtänkt och meningslöst eftersom det inte har med trådskaparens fråga att göra.

Medlem sedan aug. 20039 340 inlägg
#15

Diskussionen om huruvida vi ska ha separata underforum för Joomla och DotNetNuke är inte meningslös, men passar inte i denna tråd. Skapa en tråd med förslaget i webForums funktioner istället.
Det kan ligga något i förslaget att Joomla's captcha kan stoppa spam, men gissningsvis vill sahle lära sig hur man kodar själv också.
Så, johaseo och Danne V, vänligen lämna diskussionen om Joomla och DotNetNuke, och diskussionen om diskussionen om Joomla och DotNetNuke därhän, och fokusera på trådens ämne, ok?

Medlem sedan aug. 20068 090 inlägg
#16

nitro2k01 skrev:

Så, johaseo och Danne V, vänligen lämna diskussionen om Joomla och DotNetNuke, och diskussionen om diskussionen om Joomla och DotNetNuke därhän, och fokusera på trådens ämne, ok?

Med största nöje. Särskilt som det var min poäng. :bire

Medlem sedan jan. 200336 inlägg
#17

johaseo skrev:

Hej Sahle
Hade du kört Joomla eller dotnetnuke så hade du enbart behövt aktivera captcha och du hade varit klar vid det här laget ..... Hör ni ni andra är det inte dax att ha en forum tråd för dels Joomla och en för dotnetnuke ..... de är väl att anse som olika etablerade tekniker för att bygga webbar

Tack för alla ideér, jag får prova dessa förslag.
Jag kör faktiskt joomla, men har inte kört det mer än 3mån, så jag är ganska ny på det.
Men kan man då lägga in en modul som har formulärfunktion med captcha eller är det inbyggt ifrån början (man kanske ska starta en ny tråd för "spam fria formulär" i joomla)

Jag har använt dessa formulär i många år men tänkte att man enkelt kunde lägga in ett fält för att minska på skräpposten.

Det verkar inte bli någon skildnad när jag byter ifrån !== till !=

Medlem sedan jan. 200336 inlägg
#18

Nu har jag löst det.

Jag fick lägga koden efter

if (isset($_POST['submit'])

Samt att jag fick ha detta i stället för echo

$reg_error[] = 3;

Så här fick jag lägga in det.


if (isset($_POST['submit']) 
{  

if ($_POST['koll'] != 'åtta')
{
$reg_error[] = 3;
}

Tack för all hjälp!

282 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
154 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)