header werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Georg Kellersmann

Georg Kellersmann

19/03/2015 18:18:41
Quote Anchor link
Hallo php-ers
Probleem dat ik na uitvoerig zoeken niet heb kunen oplossen:
Bekenden komen op een page van mijn website via een link die ik ze heb toegestuurd.
Daar wordt ze gevraagd hun voornaam in te vullen en een keuze uit 3 mogelijkheden te maken.
Als ze dat doen, dan komen ze op een mailformulier, worden bedankt voor het invullen en zij krijgen een bevestiging dat ze hebben geantwoord en ik krijg hun antwoord.
Dat gaat allemaal goed. Maar als ze de submitknop hebben ingedrukt en vergaten in te vullen, dan moeten ze op een andere page komen en dat mislukt. Ze komen altijd op het mailformulier, maar er kan natuurlijk geen mail worden verstuurd.
het script waar het mis gaat is dit:
(code)php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
//check of voornaam en keus aangeklikt
$_POST["keus"]=''; // vermijdt undefined index
$_POST["voornaam"]='';
if(isset($_POST["bevestig"]) && ($_POST["voornaam"]=' ' ||  $_POST["keus"]=' '))
{
header("location:http://www.mijndomein/pagina-1a.php");}

?>

de rest werkt goed mits ingevuld door bezoeker
het gaat om regel 6.
isset( $_POST["bevestig"]) is zeker, want er is op de submit-knop in pagina-1.php gedrukt en die heeft deze naam.
Maar omdat nagelaten is voornaam in te vullen en de keus uit 3 te maken (radiobuttons) zijn
$_POST["voornaam"] en $_POST["keus:] leeg.
Op het deel voor de && zegt de server ja en op het deel achter de && zegt de server ook ja.
Dan zou dus de header moeten worden uitgevoerd.
Waar zit de fout?
 
PHP hulp

PHP hulp

18/02/2025 13:40:24
 
- SanThe -

- SanThe -

19/03/2015 18:22:16
Quote Anchor link
Georg Kellersmann op 19/03/2015 18:18:41:
... zijn $_POST["voornaam"] en $_POST["keus"] leeg.


Dat doe je zelf op regel 3 en 4.


Een = is een toekenning.
In een vergelijking gebruik je == (of ===)

En in je header mist .nl of .com of ...
Gewijzigd op 19/03/2015 18:26:05 door - SanThe -
 
Georg Kellersmann

Georg Kellersmann

19/03/2015 20:19:54
Quote Anchor link
Als die $_POST["voornaam"] en $_POST["keus"} niet als string worden gedeclareerd komt de mededeling dat ze undefined zijn.
Ik heb dat nu vervangen door gebruik te maken van $_SERVER["REQUEST_METHOD"]= "POST"
helpt niet. De header wordt gewoon overgeslagen.
het woord mijndomein in de header staat voor mijndomein.nl.
PHPMailer-5.2.8 of Apache is blijkbaar erg kritisch op undefined variables.
hoewel dat in PHP niet echt nodig is wordt het tegenwoordig veel aangeraden.
Elke call naar een undefined variabe wordt genegeerd en dus werkt het mailform dan niet meer.
 
- SanThe -

- SanThe -

19/03/2015 20:31:06
Quote Anchor link
Georg Kellersmann op 19/03/2015 20:19:54:
Als die $_POST["voornaam"] en $_POST["keus"} niet als string worden gedeclareerd komt de mededeling dat ze undefined zijn.

Dan is er dus niet gePOST.


Georg Kellersmann op 19/03/2015 20:19:54:
$_SERVER["REQUEST_METHOD"]= "POST"


Is weer een toekenning en geen vergelijking.
 
Georg Kellersmann

Georg Kellersmann

19/03/2015 20:32:58
Quote Anchor link
@SanThe
Ik had er nog even bij moeten zetten dat als de naam en keus wel zijn ingevuld het prima werkt.
En nu staan dus die op leeg gestelde POST variabelen er niet meer in.
 
- SanThe -

- SanThe -

19/03/2015 20:43:06
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if($_SERVER["REQUEST_METHOD"] == "POST")
{
   // er is gepost
    if(trim($_POST["voornaam"]) == '' or trim($_POST["keus"]) == '')
    {
    header("location:http://www.mijndomein.nl/pagina-1a.php");
    }

    else
    {
         // gegevens verwerken
    }
}

?>
 
Georg Kellersmann

Georg Kellersmann

19/03/2015 20:47:22
Quote Anchor link
Er staat nu:
(code)php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
//check of er iets is aangeklikt
if($_SERVER["REQUEST_METHOD"] =="POST" && ($_POST["voornaam"]='' ||  $_POST["keus"]=''))
{
header("location:http://www.mijndomein.nl.nl/pagin1-aa.php");}
$Naamaan='';
$Naamaan = $_POST["voornaam"];

?>

voor deze $Naamaan=''; ook weer als die string niet eerst als leeg wordt gedefineerd werkt het niet
Er is echt wel gepost, want in de $_POST array zit ook altijd de button als wordt die weinig gebruikt.
Maar als ik die met de juiste naam oproep dan verschijn keurig d naam, in dit geval "bevestig".
Ht werkt dus, beghalve als er geen naam is ingevuld en/of geen keus is gemaakt.

Toevoeging op 19/03/2015 20:48:36:

@SanThe
dat ga ik even proberen.
 
- SanThe -

- SanThe -

19/03/2015 20:50:18
Quote Anchor link
Er staan weer geen vergelijkingen.
 
Georg Kellersmann

Georg Kellersmann

19/03/2015 21:04:47
Quote Anchor link
@SAnThe
Je bent erg snel en dat houd ik niet bij want ik moet het op de live website zetten om het te testen.
Ik zit momenteel in Indonesie en het is hier nu 03:00 uur, dus ik raak at uit de pas.
Maar je suggestie probeer ik nog uit. Bedankt voor deze hulp.

Toevoeging op 20/03/2015 04:03:10:

@SanThe
Het werkt. Niet ingevuld wordt doorgestuurd naar de "herstel"pagina met verzoek om alsnog correct in te vullen. Nogmaals bedankt dus.
Wat betreft het meten declareren van variabelen werd ik best verrast en het heeft me heel wat zoekwerk gekost. In wat oudere versies van php en phpmailer was het niet nodig en velen houden nog steeds vol dat het niet hoeft. Maar als je het niet doet, dan krijg je onherroepelijk de foutmelding van "undefined" variable en werkt het script absoluut niet. Een mail wordt niet verstuurd wegens "empty body".
Dat vind ik een vervelende inconsequentie van php.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.