Hallo,

Mijn contactformulier wordt aan de voorkant gecheckt d.m.v. javascript en aan de achterkant d.m.v PHP.

En ik heb een aantal vragen over het PHP gedeelte:

Ik gebruik dezelfde regex-en in Javascript en PHP. In Javascript werkt het perfect, maar in PHP worden mij a-z of A-Z genegeerd en worden beide geaccepteerd. Iemand een idee?

Hoe neem ik de door PHP gecreëerde tekst onderhanden d.m.v. CSS?

Hoe voeg ik een terug button toe aan de door PHP gecreëerde tekst?

En ben ik zo goed op weg?

contact.php
<?php
include("global.inc.php");
$errors=0;
$error="U heeft één of meerdere velden niet naar behoren ingevuld:<ul>";
pt_register('POST','contact');
pt_register('POST','titel');
pt_register('POST','voorletters');
pt_register('POST','naam');
pt_register('POST','adres');
pt_register('POST','postcode');
pt_register('POST','plaats');
pt_register('POST','telefoon');
pt_register('POST','email');
pt_register('POST','fax');
pt_register('POST','vraag');
$vraag=preg_replace("/(\015\012)|(\015)|(\012)/","&nbsp;<br />", $vraag);

if(!eregi("^[A-Z. ]+$",$voorletters)){
$errors=1;
$error.="<li>Voorletters";
}
if($naam==""){
$errors=1;
$error.="<li>Naam";
}
if($adres==""){
$errors=1;
$error.="<li>Adres";
}
if(!eregi("^[1-9]{1}[0-9]{3}[A-Z]{2}$",$postcode)){
$errors=1;
$error.="<li>Postcode";
}
if($plaats==""){
$errors=1;
$error.="<li>Plaats";
}
if(!eregi("^[0-9]{10}$",$telefoon)){
$errors=1;
$error.="<li>Telefoon";
}
if(!eregi("^([a-z0-9üöä]+([\._%-]?[a-z0-9üöä]+)*@[a-z0-9üöä]+([\._%-]?[a-z0-9üöä]+)*\.[a-z]{2,6})?$",$email)){
$errors=1;
$error.="<li>Email";
}
if(!eregi("^([0-9]{10})?$",$fax)){
$errors=1;
$error.="<li>Fax";
}
if($vraag==""){
$errors=1;
$error.="<li>Vraag";
}
if($errors==1) echo $error;
else{
$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),"/"));
$message="contact: ".$contact."
titel: ".$titel."
voorletters: ".$voorletters."
naam: ".$naam."
adres: ".$adres."
postcode: ".$postcode."
plaats: ".$plaats."
telefoon: ".$telefoon."
email: ".$email."
fax: ".$fax."
vraag: ".$vraag."
";
$message = stripslashes($message);
mail("[email protected]","Contactformulier",$message,"From: [email protected]");

header("Refresh: 0;url=http://localhost/test/phpform/use/contact/bedankt.html");
?><?php
}
?>

en global.inc.php

<?php

function pt_register()
{
$num_args = func_num_args();
$vars = array();

if ($num_args >= 2) {
$method = strtoupper(func_get_arg(0));

if (($method != 'SESSION') && ($method != 'GET') && ($method != 'POST') && ($method != 'SERVER') && ($method != 'COOKIE') && ($method != 'ENV')) {
die('The first argument of pt_register must be one of the following: GET, POST, SESSION, SERVER, COOKIE, or ENV');
}

$varname = "HTTP_{$method}_VARS";
global ${$varname};

for ($i = 1; $i < $num_args; $i++) {
$parameter = func_get_arg($i);

if (isset(${$varname}[$parameter])) {
global $$parameter;
$$parameter = ${$varname}[$parameter];
}

}

} else {
die('You must specify at least two arguments');
}

}

?>

(Het tot nu toe gefabriceerde gedeelte is gebaseerd op phpformgenerator)

Alvast bedankt..



eregi is de onhoofdletter gevoelige versie... verder weet ik nagenoeg niks van regex... dus miss. dat het daar in zit
Terug button:

<?
echo "<input type=\"button\" value=\"Terug\" onclick=\"history.back()\">";
?>

Voor de error text die PHP weergeeft zou je bijv <span id="error"> error bericht </span> kunnen gebruiken en dmv van een stylesheet een stijl maken voor error.
hartstikke bedankt YPM en Thijs.


Ik heb eregi veranderd in preg_match en probleem is opgelost. Ik snap niet dat andere dit niet opmerken in hun script want eregi wordt toch in het algemeen gebruikt.

De button is ook welkom.

En betreft Stylesheet snap ik wel dat ik moet linken naar een tag, maar waar komt de stylesheet of verwijzing stylesheet zelf te staan?

Want als ik hem in het desbetreffende PHP bestand zet doet tie het niet!
Zet je gewoon helemaal bovenaan je contact.php


<html>
<head>
  <link href="style.css" rel="stylesheet" type="text/css" />
</head>


en maak je een bestand aan "style.css" met je stylesheet
Zo dit werkt nu ook naar behoren, bedankt.

Maar nu het volgende:

De beveiliging tegen o.a. hacken en spam.

Je moet o.a. alles in je formulier “”. (dit is volgens mij in orde)
Je moet o.a. gebruik maken van stripslashes. (dit is volgens mij ook in orde)

Je moet o.a. alles /n en /r. (waar moet ik dit doen)

Daarnaast zijn er meerdere oplossingen tegen spam.

Waaronder bv:

http://www.sitemasters.be/?pagina=scripts/scripts&cat=15&id=695

en

http://ravora.com/tutorial/1/anti-spam-bot-form/

Maar wat is hier aan te raden om te gebruiken.

(captcha vind ik teveel van het goede dus die liever niet)
http://www.sitemasters.be/?pagina=scripts/scripts&cat=15&id=695
( http://www.phphulp.nl/php/scripts/1/331/ )

Lol dat is mijn scriptje ^^

Zelf gebruik wel een Catpcha bij mijn Contact formulieren.
(Klik)
(Zolang het een redelijk goeie is en niet dat je 100 chars moet typen is hij wel gebruiks vriendelijk imo)

Dan gewoon gebruik maken van Cookies en Sessies, maar als je cookies hebt uitgeschakeld en hij start een nieuwe IE op oid dan kan hij gewoon weer Spammen. Oplossing is de captcha :p
grappig =)

oke dus toch captcha, maar hoe moet ik omgaan met de /n/r, waar moet ik die plaatsen.

Trouwens een nieuw probleem door onderstaand aan mijn contact.php toegevoegd te hebben:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<link href="../../../../css/contactformphp.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
<div id="php">
(hier php)
</div>
</div>
</body>
</html>

Nu krijg ik de melding:

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\test\phpform\use\contact\process.php:10) in C:\wamp\www\test\phpform\use\contact\process.php on line 83
probleem is precies zoals er staat.. je probeerd headers te sturen als er al output gegeven is.
zet alle bewerkingen van php bevonaan in je paginas (validatie, cookies, start van een sessie, ophalen van gegevens en weet ik veel wat nog meer) en waar je de output mee wilt geven op de gewenste plek, dan zou het geen probleem moeten zijn.
Dus voor alle duidelijkhuid:

Het werkte dus niet naar behoren, na toevoegen stylesheet met toebehoren.

Daarna krijg ik dus de melding:

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\test\phpform\use\contact\process.php:10) in C:\wamp\www\test\phpform\use\contact\process.php on line 83

Als ik contact.php enkel laat bestaan uit <?php code ?> werkt het weer.

Ik zie dat jou voorbeeld daar zonder problemen mee omgaat, maar ik kan het probleem niet vinden.

ps. welke captcha gebruik jij als ik vragen mag.

Shit dat dacht ik dus al Crawlbackwards, maar omdat zijn action in form was: action="<? $_SERVER['PHP_SELF']; ?>">

en ik verwijs naar contact.php, dacht ik dat het anders was.

... af en toe...

Reageren