Beste forumleden,

ik had onderstaand contactformulier altijd goed draaiend op mijn server staan. Sinds vorige week heb ik een nieuwe server, en nu doet hij het NIET meer.
Eerst:
Je vult het formulier in en klikt op verzenden: je krijgt een reactie 'Het bericht is verzonden u krijgt zo spoedig mogelijk antwoordt'o.i.d. (Als je niets invult een foutmelding).

Nu:
Wanneer je het contactformulier invult en op verzenden klikt, wordt het formulier geleegd en er wordt niets verzonden.


Overige phpScripts vertonen ook problemen, hoefde dit voordien niet nu moeten bestanden van bv. een teller ook een aanpassing krijgen in de rechten (chmodden).
Echter bij dit formulier heeft dit geen effect (het hoeft ook niet te schrijven).

Misschien dat jullie een blik op het script kunnen werpen, of daar iets in fout zit (nouja iets dat de nieuwe server verkeerd kan opvatten).

We zaten bij HostNederland (van JRonline)
En zijn over op Freerider (ook van JRonline)

Een op dit moment dus niet werkende versie is te vinden op www.vanmeijeren.nl/contact.php

Het script:

<?php
$recipient = "x";
$subject = "" . $subject . "\n";
$header = "From: " . $email . "\n";
$mail_body = "Het contactformulier werd op " .date("d-m-Y") . " om " . date("H:i") . " uur uitgevoerd.\n";
$mail_body .= "De volgende gegevens werden ingevoerd:\n\n";
$mail_body .= "Naam: " . $name . "\n";
$mail_body .= "E-mailadres: " . $email . "\n\n";
$mail_body .= "IP adres: " . $ip . "\n";
$mail_body .= "Vraag:\n";
$mail_body .= $vraag . "\n\n --- Einde van het automatisch gegenereerde bericht. ---";

if($submit){
if(strlen($name) == 0) {
$error_msg="Voer alstublieft uw naam in.<br>";
}
if(strlen($email) == 0) {
$error_msg="Voer alstublieft uw e-mailadres in.<br>";
}
if(strlen($vraag) == 0) {
$error_msg="Laat ons alstublieft weten wat u ons wilt vragen.<br>";
}
if($error_msg){
echo "Uw vraag kon om de volgende redenen helaas niet worden verwerkt:<br><br>";
echo $error_msg;
echo "<br>Klik alstublieft op <a href=javascript:history.back(1)>Vorige</a> en vul alle velden in.";
}else{
echo "Wij zullen uw vraag zo spoedig mogelijk beantwoorden!";
mail($recipient, $subject, $mail_body, $header);
}
}else{
?>

<p>Contactformulier</p>
<table border="0">
<form action="<?php echo $PHP_SELF ?>" method="POST">
<tr>
<td>Naam:</td>
<td><input type="text" name="name" size="80"></td>
</tr>
<tr>
<td> E-mailadres:</td>
<td><input type="text" name="email" size="80"></td>
</tr>
<tr>
<td> Onderwerp:</td>
<td><input type="text" name="subject" size="80"></td>
</tr>
<tr>
<td>Vraag:</td>
<td><textarea name="vraag" rows="10" cols="60"></textarea></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Verzenden"></td>
</tr>
</form>
</table>
<?php
}
?>

if($submit){
    if(strlen($name) == 0) {


probeer dit eens te veranderen in:


if($_POST['submit']){
    if(strlen($name) == 0) {
Waarschijnlijk moet je al de vars uit je form opvangen met $_POST['var']. Dit heeft te maken met een server instelling betreffende superglobals.

Dus bijvoorbeeld:
$subject = "" . $subject . "\n";

wordt nu
$subject = "" . $_POST['subject'] . "\n";

En dan dus alles wat uit je form komt.

PS. Lees eens wat over e-mailinjection.
JA we zijn een stap verder!
Hij gaat door met verzenden, en begint aan de ingebouwde controles: Naam, email en dan: vraag.

Echter op het onderdeel vraag blijft hij hangen.
Hoewel je wel een waarde in het formulier invult, blijft de waarschuwing 'Je hebt geen vraag ingevuld' komen.


Ik heb het voorbeeld bijgewerkt, je ziet het probleem met 'vraag'.
(Ik heb beide van jullie antwoorden geprobeert, eerst slechts .$_POST['subject'] ) en daarna ook alle waarden hiermee vervangen, beiden leiden tot hetzelfde 'vraag' probleem.)


Kan iemand mij dan toevallig ook nog vertellen, waarom dit script het eerst 100% deed en nu op een nieuwe server zoveel elende geeft?

Alvast harstikke bedankt,

Groeten Hugo van Meijeren
Heb je $_POST['vraag'] gebruikt?

Het probleem komt omdat de serverinstellingen anders (veiliger) ingesteld staan dan bij de andere host.
Ja zeker:

$mail_body .= "Vraag:\n";
$mail_body .= $_POST['vraag'] . "\n\n --- Einde van het automatisch gegenereerde bericht. ---";

Groeten Hugo
Je kunt met var_dump($_POST) eens kijken wat $_POST precies wel en niet bevat. Nog makkelijker is als je het gebruikt mbv. <pre> tags: echo '<pre>', Var_dump($_POST), '</pre>';

Overigens gebruik je zowel $_SERVER['PHP_SELF'] in je formulier als $_POST in je mailtjes: dit is onveilig. Zie http://www.scriptorama.nl/security/mail-en-headers en http://www.scriptorama.nl/security/tips-veiligere-site-phpself voor meer info over waarom dit "gevaarlijk" is.
Hugo van Meijeren schreef op 02.03.2006 21:41
Beste forumleden,
...
Overige phpScripts vertonen ook problemen, hoefde dit voordien niet nu moeten bestanden van bv. een teller ook een aanpassing krijgen in de rechten (chmodden).
...


waarschijnlijk ben je van een windowsserver over gegaan naar een linux server, op gooooogle is hier wel meer info over te vinden
PHP Newbie schreef op 03.03.2006 18:36

waarschijnlijk ben je van een windowsserver over gegaan naar een linux server, op gooooogle is hier wel meer info over te vinden



NEEEE geen windowsserver! Vorige was ook Linux.

Ik zal even de informatie doorlezen, ben nu in ieder geval een stap verder, en denk dat ik er wel uitkom.


Groeten Hugo

Reageren