login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Gegevens onthouden

Offline Frederic - 10/05/2005 18:53
Avatar van FredericPHP ver gevorderde Ik gebruik onderstaande code in een systeem op PM's te sturen, maar iedere keer als de gebruiker vergeet een ontvanger te selecteren, krijgt hij (zoals geplant) een foutmelding dat er iets mis is. Hierdoor wordt het 'bericht' veld helemaal leegemaakt, dus als je iets heel langs typt en je vergeet een ontvanger, dan ben je alles kwijt. Is er een manier op het toch te bewaren (hier bij SiMa kan je error's maken en je bericht blijft)
  1. <h2>Nieuw bericht</h2>
  2. <a href="javascript:history.go(-1)"><img src="afbeeldingen/terug.gif" alt="Terug" /></a>
  3. <div align="center">
  4. <form name="bericht" method="post" action="">
  5. <table style=" width: 50%;">
  6. <tr style="background-color: #DEE2E7">
  7. <td width="25%">&nbsp;&raquo;&nbsp;Ontvanger:</td>
  8. <td width="75%">
  9. <?php
  10. if (IsSet($_GET['origineel']) && is_numeric($_GET['origineel']))
  11. {
  12. $id = $_GET['origineel'];
  13.  
  14. $select = "SELECT id, van, onderwerp FROM leden_berichten WHERE id = ".$id." && naar = ".$_SESSION['gid'];
  15. if (!$sql = mysql_query($select))
  16. {
  17. include "gebruikers/berichten/ontvanger.php";
  18. }
  19. $rij = mysql_fetch_assoc($sql);
  20. $van = ($rij['van']);
  21. $onderwerp = ($rij['onderwerp']);
  22. $onderwerp = "Antw: ".$onderwerp;
  23. $select_naam = "SELECT id, gebruikersnaam FROM leden WHERE id = ".$van;
  24. if (!$sql_naam = mysql_query($select_naam))
  25. {
  26. include "gebruikers/berichten/ontvanger.php";
  27. }
  28. else
  29. {
  30. $rij_naam = mysql_fetch_assoc($sql_naam);
  31. $van_naam = ($rij_naam['gebruikersnaam']);
  32. echo "<input name=\"ontvanger_volledig\" disabled=\"disabled\" type=\"text\" size=\"40\" value=\"".$van_naam."\" />";
  33. }
  34. }
  35. elseif (IsSet($_GET['ontvanger']) && is_numeric($_GET['ontvanger'])){
  36. $select_naam = "SELECT id, gebruikersnaam FROM leden WHERE id = ".$_GET['ontvanger'];
  37. $van = $_GET['ontvanger'];
  38. if (!$sql_naam = mysql_query($select_naam))
  39. {
  40. include "gebruikers/berichten/ontvanger.php";
  41. }
  42. else
  43. {
  44. $rij_naam = mysql_fetch_assoc($sql_naam);
  45. $van_naam = ($rij_naam['gebruikersnaam']);
  46. echo "<input name=\"ontvanger_volledig\" disabled=\"disabled\" type=\"text\" size=\"40\" value=\"".$van_naam."\" />";
  47. }
  48. }
  49. else
  50. {
  51. include "gebruikers/berichten/ontvanger.php";
  52. }
  53. ?>
  54. </td>
  55. </tr>
  56. <tr style="background-color: #F1F3F5">
  57. <td>&nbsp;&raquo;&nbsp;Onderwerp:</td>
  58. <td><input value="<?php if (IsSet($onderwerp)){echo stripslashes($onderwerp);} ?>" name="onderwerp" type="text" size="40" /></td>
  59. </tr>
  60. <tr style="background-color: #DEE2E7">
  61. <td colspan="2">&nbsp;&raquo;&nbsp;Bericht:</td>
  62. </tr>
  63. <tr style="background-color: #F1F3F5">
  64. <td colspan="2" style="text-align:center;"><textarea id="textarea" name="bericht" cols="80" rows="15" onFocus="getTarget('bericht');" onSelect="storeCursor(this);" onKeyUp="storeCursor(this);" onClick="storeCursor(this);"></textarea><br /><?php toon_ubb('bericht','bericht'); ?></td>
  65. </tr>
  66. </table>
  67. <input type="submit" onclick="verstuur();" name="Submit" value="Verzenden" />
  68. </form>
  69. <?php if(isset($_POST['Submit'])) {
  70. $error = array();
  71. if (isset($_POST['ontvanger'])){
  72. $aan = $_POST['ontvanger'];
  73. if($_POST['ontvanger'] == "") {
  74. $error[] = "Er is geen ontvanger opgegeven!";
  75. }
  76. }
  77. else
  78. {
  79. $aan = $van;
  80. }
  81. if($_POST['onderwerp'] == "" || $_POST['onderwerp'] == " ") {
  82. $onderwerp = "*Bericht zonder onderwerp*";
  83. }
  84. else
  85. {
  86. $onderwerp = $_POST['onderwerp'];
  87. }
  88. if(trim($_POST['bericht']) == "") {
  89. $error[] = "Er is geen bericht ingevuld!";
  90. }
  91. $fouten = sizeof($error); // aantal errors tellen
  92. if($fouten != 0) { // Er is minstens 1 error
  93. echo "Het bericht kon niet verzonden worden omdat:";
  94. echo "<ul>";
  95. for($i = 0; $i < $fouten; $i++) {
  96. echo "<li>".$error[$i]."</li>";
  97. }
  98. echo "</ul>";
  99. } else {
  100. mysql_query("INSERT INTO leden_berichten (van,naar,onderwerp,bericht, datum) VALUES ('".$_SESSION['gid']."','".$aan."','".htmlspecialchars(addslashes($onderwerp))."','".htmlspecialchars(addslashes($_POST['bericht']))."','".date("Y-m-d H:i:s")."')");
  101. header("Location: index.php?Pagina=berichten&melding=Bericht succesvol verzonden!");
  102. }
  103. }
  104. ?>
  105. </div>

15 antwoorden

Gesponsorde links
Offline nemesiskoen - 10/05/2005 19:43 (laatste wijziging 10/05/2005 19:49)
Avatar van nemesiskoen Gouden medaille

PHP expert
met cookies... opslaan in een cookie?


  1. <?php
  2. /********CODE NOG NIET VERZONDEN******/
  3.  
  4. if( !isSet( $_POST['verzenden'] ) ) {
  5.  
  6. ?>
  7.  
  8. //FORMULIER
  9.  
  10. <input type='text' name='titel' value='<?php echo stripslashes( $_COOKIE['titel'] ); ?>' />
  11. <br />
  12. <textarea><?php echo stripslashes( $_COOKIE['bericht'] ); ?></textarea>
  13.  
  14. //REST VAN HET FORMULIER
  15.  
  16. <?php
  17.  
  18. }
  19. else {
  20. /****CODE VERZONDEN****/
  21.  
  22. if( $_POST['titel'] == "" ) {
  23.  
  24. if( $_POST['bericht'] == "" ) {
  25.  
  26. echo "<a href=TERUG>Niets ingevuld... ga terug</a>";
  27.  
  28. }
  29. else {
  30.  
  31. setCookie("bericht", addslashes( $_POST['bericht'] ));
  32.  
  33. }
  34.  
  35. }
  36. elseif( $_POST['bericht'] == "" ) {
  37.  
  38. setCookie("titel", addslashes( $_POST['titel'] ));
  39.  
  40. echo "<a href=TERUG>ga terug</a>";
  41.  
  42. }
  43. else {
  44.  
  45. //doorgaan met code
  46.  
  47. }
Offline Legolas - 10/05/2005 19:45
Avatar van Legolas Onbekend lijkt me beter dat je een soort van pm_cookies tabel maakt in MySQL, want cookies zijn zow onveilig:|.
en dan i.p.v. setcookie dus INSERT en i.p.v. isset $cookie nogwat dus SELECT. en dan als time() overschreden is ofzo DELETE.
handig?
:D
Offline nemesiskoen - 10/05/2005 19:50 (laatste wijziging 10/05/2005 19:51)
Avatar van nemesiskoen Gouden medaille

PHP expert
Ik snap echt NIET waarom je dit met een database zou moeten doen

1) duurt langer voor gebruiker
2) neemt meer ruimte in beslag
3) is ingewikkeldere code

Cookies zijn echt NIET onveilig als je ze GOED gebruikt... even een vraag... hoe zou jij in mijn code kunnen breken, via die cookies???

btway... mijn eigen website
http://www.nemesisfantasies.com werkt volledig met cookies... die mag je ook proberen te kraken... en waar'k nu mee bezig ben ook: http://www.nemesisfantasies.com/mac
Offline jopiduurkopi - 10/05/2005 19:53
Avatar van jopiduurkopi Onbekend dat van die database + onveilige cookies snap ik ook niet, maar ik zou sessies nemen ipv cookies.ik weet niet meer hoe groot een cookie precies mag zijn, maar bij hele lange berichten zou dat toch problemen kunnen geven.
bovendien wordt het hele bericht dan dus 3 keer (en als je het cookie niet meteen verwijdert nog vaker) verstuurd. eerst bij het posten, dan bij setten van cookie, dan bij het opnieuw laden van de pagina met het formulier.
Offline nemesiskoen - 10/05/2005 19:55
Avatar van nemesiskoen Gouden medaille

PHP expert
zou dit dan niet het geval zijn bij sessies???

kleine conclusie: Frederic, je kiest 1 vd drie: Cookies, Database of Sessies... hopelijk kom je er zo uit?
Offline Legolas - 10/05/2005 19:56
Avatar van Legolas Onbekend @nemesiskoen:
sessies kun je toch met cookies onthouden?
dan werk je dus met 2^^ 
Offline nemesiskoen - 10/05/2005 19:57
Avatar van nemesiskoen Gouden medaille

PHP expert
Citaat:
@nemesiskoen:
sessies kun je toch met cookies onthouden?
dan werk je dus met 2


WAT?

sorry, ik versta je echt niet 
wat bedoel je met 'sessies kun je toch met cookies onthouden'???
Offline jopiduurkopi - 10/05/2005 19:58 (laatste wijziging 10/05/2005 19:58)
Avatar van jopiduurkopi Onbekend
Citaat:
zou dit dan niet het geval zijn bij sessies???
nee, dan wordt het 2 keer (bedenk me nu net dat die andere 4 keer moest zijn) verstuurd. ipv die andere 2x wordt dan het sessie id verstuurd. scheelt toch wat dataverkeer en snelheid.

ik denk dat legolas bedoelt dat sessie id bijna altijd in een cookie wordt gezet.
Offline Legolas - 10/05/2005 19:58
Avatar van Legolas Onbekend session.cookielifetime
of
session.gcmaxlifetime
je hebt er een heleboel van dat soort sessie-onthouders
Offline jopiduurkopi - 10/05/2005 19:59
Avatar van jopiduurkopi Onbekend
Citaat:
session.cookielifetime
of
session.gcmaxlifetime
je hebt er een heleboel van dat soort sessie-onthouders
dat zou ik geen sessie-onthouders noemen. zijn gewoon configuratie opties die betrekking hebben op sessies.
Offline nemesiskoen - 10/05/2005 20:00
Avatar van nemesiskoen Gouden medaille

PHP expert
ben wel geïnteresseerd in wat je wil zeggen. Maar ik begrijp het niet. Welke 2 keer wordt het verzonden? En hoe bedoel je 4 keer.

Zo denk ik dat het is:
- Form verzenden
- Gegevens opslaan in sessies (of cookie)
- Terug gaan naar form en daar gegevens terug ophalen (uit sessie of cookie)

Welke van die 3 stappen moet ik weglaten voor sessies, en wat komt erbij bij cookies?
Offline jopiduurkopi - 10/05/2005 20:06
Avatar van jopiduurkopi Onbekend nog ff voor de zekerheid: ik bedoel dus verzenden over het internet, van server naar client

bij cookies:
1. form wordt gepost (client » server)
2. server stuurt cookieheader, met het complete bericht erin (client slaat dit op)
3. bij het openen van bijv. form.php worden de cookies (met weer het hele bericht) door de client meegestuurd
4. dit komt in de $_COOKIE array en wordt met php in de textarea geëchood en vervolgens verzonden naar de client

bij sessies:
1. form wordt gepost
(2. server stuurt cookieheader, met alleen sessie id erin)
(3. bij openen van form.php wordt dit cookies door client meegestuurd)
4. aan de hand van sessie id wordt $_SESSIE array gevuld en dit wordt uiteindelijk weer geoutput.
Offline Frederic - 10/05/2005 20:17 (laatste wijziging 10/05/2005 20:54)
Avatar van Frederic PHP ver gevorderde Is er geen mogelijkheid (geen PHP) die kijkt of er ontvangers zijn geselecteerd, en als er iets mist krijgt de gebruiker een javascript alert boxje? dan blijven de gegevens wel bewaard he?

//EDIT: hier doet het probleem zich ook niet voor, en hier wordt niet van cookies of sessies gebruik gemaakt!
http://www.wbdfdarts.nl/battles/gastenboek/
Offline leendertW - 10/05/2005 21:01
Avatar van leendertW PHP beginner Ik gebruik in mijn formulier dit als iemand terug moet als die iets niet heeft ingevuld:

<a href="javascript:history.go(-1);">
maar de gegevens blijven er zo gewoon opstaan.

Offline jopiduurkopi - 10/05/2005 21:05
Avatar van jopiduurkopi Onbekend
Citaat:
<a href="javascript:history.go(-1);">
maar de gegevens blijven er zo gewoon opstaan.
als je geluk hebt wel ja, maar dat is niet betrouwbaar.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.221s