Ik heb in een website een groot aantal vragen die via een formulier moeten worden beantwoord.
Om het overzichtelijk te maken heb ik het formulier in 3 stukken verdeeld.(alle drie zijn php files)
Aan het eind van het eerste formulier wordt met een insert opdracht een aantal gegevens weggeschreven in een database. Daarna wordt doorgeschakeld naar het tweede formulier. De code is als volgt:

<?php
$sql = "INSERT INTO projecten (id, indiendatum, stichting, oprichting, anbi, website, stichtingdoel, contactpersoon, mailadres, telefoonnummer, kennisvandas, doelproject, inhoud)
VALUES('','$indiendatum','$_POST[stichting]','$_POST[oprichting]','$_POST[anbi]','$_POST[website]','$_POST[stichtingdoel]','$_POST[contactpersoon]','$_POST[mailadres]','$_POST[telefoonnummer]','$_POST[kennisvandas]','$_POST[doelproject]','$_POST[inhoud]')";

if ($conn->query($sql) === TRUE) {			
	$bericht .= "Er is een aanvraag1 gedaan voor een subsidie van de Stichting DAS";				
	$headers .= "From :  Stichting DAS\r\n";
    mail ("[email protected]", "Aanvraag t.b.v.Stichting Das ingestuurd", $bericht, $headers);
	$last_id = $conn->insert_id;
	$_SESSION["id"]= $last_id;	
	header('Location: ../html/invulformulier2.php');
?>


De overgang en het wegschrijven gaat zonder problemen.
Bij het tweede formulier maak ik gebruik van een update omdat ik de gegevens in 1 record wil hebben.
Ook dit gaat goed. De gegevens worden netjes weggeschreven maar dan ontstaat het probleem. Er wordt niet doorgeschakeld naar het derde formulier;
De code is:

<?php
$teller=$_SESSION["id"];

$sql = "UPDATE projecten SET resultaat='$_POST[resultaat]', statusproject='$_POST[statusproject]' , lokalebetrokkenheid= '$_POST[lokalebetrokkenheid]', partners='$_POST[partners]', controle='$_POST[controle]', risico='$_POST[risico]', verantwoording='$_POST[verantwoording]' WHERE id= $teller";


if ($conn->query($sql) === TRUE) {			
	$bericht .= "Er is een aanvraag2 gedaan voor een subsidie van de Stichting DAS";				
	$headers .= "From :  Stichting DAS<[email protected]>\r\n";
    mail ("[email protected]", "Aanvraag t.b.v.Stichting Das ingestuurd", $bericht, $headers);	
	header('Location: http://www.stichting-das.nl/html/invulformulier3.php');
?>


Heeft iemand een idee waarom de tweede keer niet wordt doorgeschakeld.
Als ik het test om mijn eigen computer en op een i-pad werkt het wel goed.

Kan je jouw code tussen code-tags zetten? Zie ook de Veelgestelde Vragen.

Ik gok dat je query mislukt. En let ook op SQL-injection. Iedereen kan je queries manipuleren. Zelf onbedoeld...
Als je naar het laatste stukje code kijkt dan zie je de update. Die gaat goed. de query lukt dus wel.Dan wordt er een mail verstuurd. Die krijg ik .
maar dan komt de Header() en die werkt niet
Er komt geen foutmelding. Het vreemde is dat er bij het testen geen enkel probleem is maar als clienten het doen stopt het programma. Ik krijg wel elke keer als er verzonden wordt( ze verzenden dan een aantal keer achter elkaar) een mail.Ik vermoed dat de update ook elke keer wordt gedaan maar omdat dat met dezelfde gegevens gaat is dat niet te controleren.
Maar wat voor informatie voeren de cliënten dan in? En ontvangen zij wel mail? Ik denk dat ik mij schaar achter @Ariën zijn vermoeden. Het verzenden van de mail en het redirecten naar de nieuwe locatie staat immers in het if-statement die controleert of de query slaagt (voor de goede orde zou je ook teruggestuurd moeten worden naar het formulier op het moment dat er iets misgaat?).

Alle $_POST-waarden zouden in ieder geval geneutraliseerd moeten worden zodat deze niet als SQL geïnterpreteerd kunnen worden. Dit doe je met een escape-functie in combinatie met quotes.
Er worden behoorlijk grote teksten verstuurd door de clienten. Ze doen dat veelal met knippen en plakken. Dit heb ik nagebootst door de gegevens uit de database ook met knippen en plakken in het formulier te zetten en daar waar de client niet verder kan lukt dat bij mij moeiteloos.

[size=xsmall]Toevoeging op 04/03/2019 17:22:50:[/size]

Er worden behoorlijk grote teksten verstuurd door de clienten. Ze doen dat veelal met knippen en plakken. Dit heb ik nagebootst door de gegevens uit de database ook met knippen en plakken in het formulier te zetten en daar waar de client niet verder kan lukt dat bij mij moeiteloos.

[size=xsmall]Toevoeging op 04/03/2019 17:26:04:[/size]

De clienten krijgen geen mail. Dat is ook niet de bedoeling.
Maar het is toch te gek dat ze informulier 2 blijven hangen en telkens als ze op verzenden drukken krijg ik een mail. terwijl 1 regel verder de header() staat.

header('Location: ../html/invulformulier2.php');


Is dat niet degene waar het fout gaat? Het staat wel niet onderin maar dit lijkt mij geen geldige URL...
En wat nu als er in de invoer een quote (deze ' ) zit, die de query vernachelt?
Daarom escaping!
De query werkt goed want ik zie dat de gegevens worden opgeslagen
Maar pas je nou wel escaping toe? Als je normale data invult, en anderen een schadelijk karakter, zoals een ' dan gaat het dus niet altijd goed. Altijd toepassen!!!!!!

Zet anders je foutafhandeling eens helemaal aan.
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
?>

Reageren