Mailform werkt niet meer (PHP4 - PHP5)

Pagina: 1
Acties:
  • 77 views sinds 30-01-2008

  • pinockio
  • Registratie: Juli 2001
  • Laatst online: 29-01 15:40
Sinds mijn overstap naar een andere hosting provider (en de overgang van Linux en PHP4 naar FreeBSD en PHP4) werkt mijn e-mailformulier niet meer.

Het formulier zag er zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Contact</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Refresh" content="3; URL=index.html"> 
<? 
if ($naam_afzender == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten uw naam in te vullen.\");history.go(-1)</script>"; 
} 
elseif ($email_afzender == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten uw e-mailadres in te vullen.\");history.go(-1)</script>"; 
} 
elseif ($onderwerp == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten een onderwerp in te vullen.\");history.go(-1)</script>"; 
}
elseif ($bericht == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten een bericht in te vullen.\");history.go(-1)</script>"; 
} else {
   $antwoord="Wij hebben uw reactie ontvangen en zullen zo spoedig mogelijk reageren.";
   $antwoordonderwerp="Bedankt voor uw bericht";
   $Name="Afzender : $naam_afzender\n";
   $Email="E-mail : $email_afzender\n\n";
   $Message="Bericht : $bericht\n\n";
   $Date="Verstuurd op " . date("d-m-Y H:i:s") . "\n"; 
   $IP="IP-Adres Afzender : $REMOTE_ADDR";
   mail("pinockio@gmail.com", "$onderwerp", "$Name$Email$Message$Date$IP", "From: $naam_afzender <$email_afzender>"); 
   mail("$email_afzender", "$antwoordonderwerp", "$antwoord", "From: Pinockio <pinockio@gmail.com>"); 
}
?>
<html>
<font face="Verdana" size="2">Bedankt, uw e-mail is verzonden</font><br><br><br>
<font face="Verdana" size="2">U wordt binnen 5 seconden doorgestuurd naar beginpagina.</font>
</html>


Deze deed het dus helemaal goed, maar toen de PHP-versie veranderde naar 5 kreeg ik meteen de melding dat ik vergeten was de naam in te vullen. Wat blijkt nu: PHP5 gaat anders om met variabelen. Helaas ken ik php erg slecht maar ik ben erin geslaagd die foutmelding weg te krijgen door $ te vervangen door $_POST[''] of $_GET['']. Het volgende script is het resultaat:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Contact</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Refresh" content="3; URL=index.html"> 
<? 
if ($_POST['naam_afzender'] == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten uw naam in te vullen.\");history.go(-1)</script>"; 
} 
elseif ($_POST['email_afzender']  == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten uw e-mailadres in te vullen.\");history.go(-1)</script>"; 
} 
elseif ($_POST['onderwerp'] == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten een onderwerp in te vullen.\");history.go(-1)</script>"; 
}
elseif ($_POST['bericht'] == "") 
{ 
echo "<script language=\"javascript\">alert(\"U bent vergeten een bericht in te vullen.\");history.go(-1)</script>"; 
} else {
   $antwoord="Wij hebben uw reactie ontvangen en zullen zo spoedig mogelijk reageren.";
   $_POST['antwoordonderwerp']="Bedankt voor uw bericht";
   $_POST['Name']="Afzender : '$_GET[naam_afzender]'\n";
   $_POST['Email']="E-mail : '$_GET[email_afzender]'\n\n";
   $_POST['Message']="Bericht : '$_GET[Bericht]'\n\n";
   $_POST['Date']="Verstuurd op " . date("d-m-Y H:i:s") . "\n"; 
   $_POST['IP']="IP-Adres Afzender : $_GET[REMOTE_ADDR]";
   mail("pinockio@gmail.com", "$_POST[onderwerp]", "$_POST[Name]$_POST[Email]$_POST[Message]$_POST[Date]$_POST[IP]", "From: $_POST[naam_afzender] <$_POST[email_afzender]>"); 
   mail("$_GET[email_afzender]", "$_POST[antwoordonderwerp]", "$_POST[antwoord]", "From: Pinockio <pinockio@gmail.com>"); 
}
?>
<html>
<font face="Verdana" size="2">Bedankt, uw e-mail is verzonden</font><br><br><br>
<font face="Verdana" size="2">U wordt binnen 5 seconden doorgestuurd naar beginpagina.</font>
</html>


Dit gaf geen foutmelding meer maar e-mails werden er ook niet verstuurd. Het duurt erg lang voor de pagina ververst. Nogmaals, ik weet te weinig ervan af (weet niet of overal POST en GET goed staat, daar kom ik niet uit) maar ik HAD een werkend mailscript maar nu niet meer.... Wat ik ook nog heb geprobeerd is om het laatste gedeelte terug te veranderen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
   $antwoordonderwerp="Bedankt voor uw bericht";
   $Name="Afzender : $naam_afzender\n";
   $Email="E-mail : $email_afzender\n\n";
   $Message="Bericht : '$bericht\n\n";
   $Date="Verstuurd op " . date("d-m-Y H:i:s") . "\n"; 
   $IP="IP-Adres Afzender : $REMOTE_ADDR";
   
mail("pinockio@gmail.com", "$onderwerp", "$Name$Email$Message$Date$IP", "From: $naam_afzender
 <$email_afzender>"); 

mail("$email_afzender", "$antwoordonderwerp", "$antwoord", "From: Pinockio<pinockio@gmail.com>"); 
}
?>


Weet iemand wat er mis is? Bedankt!

[ Voor 20% gewijzigd door pinockio op 21-06-2006 15:56 ]

Disclaimer: P. aanvaardt geen aansprakelijkheid op grond van dit bericht.


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Ik weet niet exact wat er mis mee is maar wel een paar puntjes:

[list]• Dubbele quotes (") om alleen een variabele is nogal nutteloos, dat heeft geen enkel zin;
• Je zet achter de losse headers 2-maal "\n". Sowieso werkt het SMTP-protocol met "\r\n", maar 2x "\n" is sowieso niet goed. Geen idee of PHP daar naar kijkt en 't eventueel oplost, maar qua SMTP-RFC is 't fout;
• $REMOTE_ADDR moet je nog eventjes aanpassen naar $_SERVER['REMOTE_ADDR'].

edit:
Als je variabelen 'aan elkaar wilt plakken' zonder dubbele quotes, dan moet je dat wel met een punt (.) doen, anders werkt 't volgens mij alsnog niet.

edit:
Verder is error_reporting(E_ALL); in je script wel handig voor debuggen. :)

[ Voor 45% gewijzigd door Osiris op 21-06-2006 16:00 ]


  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 06-02 12:18
Ik zou alle regels waar deze contructies in voorkomen:
PHP:
1
$_POST['Name']="Afzender : '$_GET[naam_afzender]'\n";

vervangen door:
PHP:
1
$_POST['Name']="Afzender : '".$_GET[naam_afzender]."'\n";

Wie nooit tijd heeft, kan er niet mee omgaan.


  • André
  • Registratie: Maart 2002
  • Laatst online: 09:23

André

Analytics dude

PHP = Programming

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-02 23:22

Janoz

Moderator Devschuur®

!litemod

Bij de oude instalatie was register globals ingeschakeld terwijl dat bij de nieuwe versie niet het geval is. Hierover is wel iets te vinden in onze FAQ. De handigste workaround is om bovenaan in je script de variabelen uit je post en get array toe te kennen aan de variabelen. Op die manier kun je de rest van je script op de oude manier gebruiken

Voorbeeld:
$naam_afzender = $_POST['naam_afzender'];

En dat dan voor al je formulier velden.


Verder is PRG gericht op het ZELF programmeren. Het is niet de bedoeling om hier support te vragen op scripts van derden. Vandaar dat dit topic op slot gaat.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Dit topic is gesloten.