Ik ben bezig met een forum en ik ben gestuit op een probleem. Na het verzenden van een PM dient de verzender een bericht te krijgen dat zijn bericht succesvol is verzonden. Dit zou ik op 2 manieren kunnen doen:
<?php
if($allemaal_statements == 1) {
mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
// Nadat het bericht is 'verzonden' wordt de gebruiker doorgestuurd naar pm.php?sent=1. 'sent=1' is dus om aan te geven dat het bericht is verzonden
header('Location: pm.php?sent=1');
}
if($_GET['sent'] == 1) {
// En als 'sent' 1 is, wordt het volgende bericht weergegeven:
echo 'Bericht verzonden!';
}
?>
<?php
session_start();
if($allemaal_statements == 1) {
mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
// Weer is het bericht 'verzonden', maar nu wordt er voor het doorsturen naar pm.php eerst een variabele op 1 gezet. Deze wordt opgeslagen in de sessie-variabele.
$_SESSION['sent'] = 1;
header('Location: pm.php');
}
if($_SESSION['sent'] == 1) {
// En weer wordt het bericht weergegeven, alleen als de sessie-variabele 'sent' gelijk is aan 1.
echo 'Bericht verzonden!';
// En om te voorkomen dat het bericht telkens wordt weergegeven zolang de sessie bestaat, wordt de variabele weer op 0 gezet (of op iets anders, zo lang het maar niet gelijk is aan 1)
$_SESSION['sent'] = 0;
}
?>
// Weer is het bericht 'verzonden', maar nu wordt er voor het doorsturen naar pm.php eerst een variabele op 1 gezet. Deze wordt opgeslagen in de sessie-variabele.
// En om te voorkomen dat het bericht telkens wordt weergegeven zolang de sessie bestaat, wordt de variabele weer op 0 gezet (of op iets anders, zo lang het maar niet gelijk is aan 1)
$_SESSION['sent']=0;
}
?>
Er is niet echt een probleem bij de eerste, die doet het gewoon. Het is dat ik liever de tweede gebruik. Het vervelende is dat ik alleen het bericht te zien krijg wanneer ik de regel "$_SESSION['sent'] = 0;" weg laat. Ook is het zo dat ik dat probleem niet krijg wanneer ik het volgende doe:
Zowel voor als na de statement krijg ik '0' als antwoord. Dat is raar, want als een variabele geen waarde krijgt toegewezen moet hij 'NULL' teruggeven, en voor de statement moet hij '1' geven. Om de een of andere reden komt de "$_SESSION['sent'] = 0;" voor de statement terecht, ofso.
<?php
session_start();
$allemaal_statements = 1;
$redirected = 0;
if($allemaal_statements == 1) {
//mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
// Weer is het bericht 'verzonden', maar nu wordt er voor het doorsturen naar pm.php eerst een variabele op 1 gezet. Deze wordt opgeslagen in de sessie-variabele.
$_SESSION['sent'] = 1;
if ($_SESSION['redirected'] == 0)
header('Location: pm.php');
$_SESSION['redirected'] = 1;
}
// Blablabla, alles wat hierboven gebeurde, maar dit is anders:
if($_SESSION['sent'] == 1) {
echo 'Bericht succesvol verzonden!';
echo 'BERICHT_A';
$_SESSION['sent'] = 0;
echo 'BERICHT_B';
}
?>
// Weer is het bericht 'verzonden', maar nu wordt er voor het doorsturen naar pm.php eerst een variabele op 1 gezet. Deze wordt opgeslagen in de sessie-variabele.
<?php
session_start();
if($allemaal_statements == 1) {
mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
$_SESSION['sent'] = 1; // PM verstuurt, opslaan in sessie.
header('Location: pm.php');
}
if($_SESSION['sent'] == 1) { // de code gaat door, en sent is gelijk aan 1
echo 'Bericht verzonden!';
$_SESSION['sent'] = 0; // boodschap aan de gebruiker is "verstuurd", dus sent kan weer op 0
}
?>
Dus de tweede keer staat sent al op 0. Je ziet dus het bericht niet, omdat je pas de tweede pm.php in de browser ziet. Php gaat door met code uitvoeren na een header redirect. Je kan het beste achter elke redirect die(); zetten. Dan stopt PHP met het uitvoeren van de code.