login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Bericht bij sessie-variabele (Opgelost)

Offline Waflix - 02/06/2012 19:51
Avatar van WaflixLid 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:
  1. <?php
  2. if($allemaal_statements == 1) {
  3. mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
  4.  
  5. // 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
  6. header('Location: pm.php?sent=1');
  7. }
  8.  
  9. if($_GET['sent'] == 1) {
  10. // En als 'sent' 1 is, wordt het volgende bericht weergegeven:
  11. echo 'Bericht verzonden!';
  12. }
  13. ?>


of

  1. <?php
  2.  
  3. if($allemaal_statements == 1) {
  4. mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
  5.  
  6. // 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.
  7. $_SESSION['sent'] = 1;
  8. header('Location: pm.php');
  9. }
  10.  
  11. if($_SESSION['sent'] == 1) {
  12. // En weer wordt het bericht weergegeven, alleen als de sessie-variabele 'sent' gelijk is aan 1.
  13. echo 'Bericht verzonden!';
  14. // 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)
  15. $_SESSION['sent'] = 0;
  16. }
  17. ?>


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:

  1. // a.php
  2. <?php
  3.  
  4. if($allemaal_statements == 1) {
  5. $_SESSION['sent'] = 1;
  6. header('Location: pm.php');
  7. }
  8. ?>
  9.  
  10. // b.php
  11. <?php
  12.  
  13. if($_SESSION['sent'] == 1) {
  14. echo 'Bericht succesvol verzonden!';
  15. $_SESSION['sent'] = 0;
  16. }
  17. ?>


Kan iemand mij helpen?

8 antwoorden

Gesponsorde links
Offline larssy1 - 02/06/2012 21:07
Avatar van larssy1 MySQL beginner Hmmm, ik ondervind zelf geen problemen...

Ik heb uiteraard wel de query weg moeten laten, maar verders werkt hij gewoon.
Offline Waflix - 02/06/2012 22:09
Avatar van Waflix Lid Door de query te verwijderen behoud ik hetzelfde resultaat. Echter, wanneer ik '$_SESSION['sent'] = 0;' weg laat werkt hij plots wel.
Offline larssy1 - 03/06/2012 00:17 (laatste wijziging 03/06/2012 00:17)
Avatar van larssy1 MySQL beginner http://www.unrealxs.com/beta/whee.php
http://www.unrealxs.com/beta/pm.php
Offline Waflix - 03/06/2012 13:00 (laatste wijziging 03/06/2012 13:07)
Avatar van Waflix Lid ^ Ik heb eerlijk geen idee wat daar gebeurt.
---
Het lijkt wel of het allemaal op de verkeerde volgorde gebeurt. Ik gebruik nu de volgende code:

  1. <?php
  2. // Blablabla, alles wat hierboven gebeurde, maar dit is anders:
  3. if($_SESSION['sent'] == 1) {
  4. echo 'Bericht succesvol verzonden!';
  5. echo 'BERICHT_A';
  6. $_SESSION['sent'] = 0;
  7. echo 'BERICHT_B';
  8. }
  9. ?>


Bij de bovenstaande code wordt geen enkel van de drie bovenstaande berichten weergegeven.

Ik heb ook nog iets anders geprobeerd:

  1. // Idem
  2. echo $_SESSION['sent'];
  3. if($_SESSION['sent'] == 1) {
  4. echo 'Bericht succesvol verzonden!';
  5. $_SESSION['sent'] = 0;
  6. }
  7. echo $_SESSION['sent'];


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.
Offline larssy1 - 03/06/2012 15:25 (laatste wijziging 03/06/2012 15:30)
Avatar van larssy1 MySQL beginner
Waflix schreef:
^ Ik heb eerlijk geen idee wat daar gebeurt.
---
Het lijkt wel of het allemaal op de verkeerde volgorde gebeurt.

Ik gebruik nu de volgende code, hierbij staat alles gewoon in pm.php..

met daarbij de volgende output:
Bericht succesvol verzonden!BERICHT_ABERICHT_B

  1. <?php
  2.  
  3. $allemaal_statements = 1;
  4. $redirected = 0;
  5.  
  6. if($allemaal_statements == 1) {
  7. //mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
  8.  
  9. // 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.
  10. $_SESSION['sent'] = 1;
  11. if ($_SESSION['redirected'] == 0)
  12. header('Location: pm.php');
  13. $_SESSION['redirected'] = 1;
  14. }
  15.  
  16. // Blablabla, alles wat hierboven gebeurde, maar dit is anders:
  17. if($_SESSION['sent'] == 1) {
  18. echo 'Bericht succesvol verzonden!';
  19. echo 'BERICHT_A';
  20. $_SESSION['sent'] = 0;
  21. echo 'BERICHT_B';
  22. }
  23. ?>
Offline Waflix - 03/06/2012 17:27
Avatar van Waflix Lid Ik heb even een aparte pagina gemaakt. Hier is de code die ik nu gebruik, hetzelfde principe als de originele pagina.

  1. <?php
  2. if(isset($_POST['send'])) {
  3. $_SESSION['message_sent'] = 1;
  4. header('Location: pm.php');
  5. }
  6.  
  7. if($_SESSION['message_sent'] == 1) {
  8. echo 'Message sent!<br />';
  9. $_SESSION['message_sent'] = 0;
  10. }
  11.  
  12. echo '<form action="pm.php" method="post">
  13. <input type="submit" name="send" value="Send" />
  14. </form>';
  15. ?>


Deze werkt net zo min als de originele pagina. Net als bij de originele pagina werkt hij alleen als ik "$_SESSION['message_sent']" weghaal:

  1. <?php
  2. if(isset($_POST['send'])) {
  3. $_SESSION['message_sent'] = 1;
  4. header('Location: pm.php');
  5. }
  6.  
  7. if($_SESSION['message_sent'] == 1) {
  8. echo 'Message sent!<br />';
  9. }
  10.  
  11. echo '<form action="pm.php" method="post">
  12. <input type="submit" name="send" value="Send" />
  13. </form>';
  14. ?>
Offline MrWolf - 03/06/2012 20:02
Avatar van MrWolf Lid Als je kijkt wat deze code doet:

  1. <?php
  2.     session_start();
  3.  
  4.     if($allemaal_statements == 1) {
  5.         mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
  6.  
  7.         $_SESSION['sent'] = 1; // PM verstuurt, opslaan in sessie.
  8.         header('Location: pm.php');
  9.     }
  10.  
  11.     if($_SESSION['sent'] == 1) { // de code gaat door, en sent is gelijk aan 1
  12.         echo 'Bericht verzonden!';
  13.         $_SESSION['sent'] = 0; // boodschap aan de gebruiker is "verstuurd", dus sent kan weer op 0
  14.     }
  15. ?>

Omdat je een redirect hebt meegegeven zal pm.php weer gedownload worden. Dan wordt de code zo uitgevoerd:
  1. <?php
  2.     session_start();
  3.  
  4.     if($allemaal_statements == 1) { // Nee, er hoeft nu geen pm verstuurt te worden
  5.         mysql_query("INSERT pm (receiver, sender, contents) VALUES ('bla', 'bla', 'bla')");
  6.         $_SESSION['sent'] = 1;
  7.         header('Location: pm.php');
  8.     }
  9.  
  10.     if($_SESSION['sent'] == 1) { // Nee, sent is niet 1
  11.         echo 'Bericht verzonden!';
  12.         $_SESSION['sent'] = 0;
  13.     }
  14. ?>

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.

Ik hoop dat je alles snapt, anders vraag je maar!
Bedankt door: Waflix
Offline Waflix - 03/06/2012 20:11
Avatar van Waflix Lid Nee, ik snap het. Ik was ervan uitgegaan dat het script al zou stoppen nadat ik een header redirect zou uitvoeren. Bedankt!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.359s