[PHP] Voorkomen van dubbel submitten formulier

Pagina: 1
Acties:
  • 245 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Ik heb voor een website een eenvoudig formulier gemaakt, wat als het ingevuld wordt en daarna submit wordt, een email verstuurd met waardes uit het formulier. Als dat gelukt is, krijgt de bezoeker een scherm te zien dat de email verstuurd is.

Probleem hierbij is als diegene op de back button van de browser drukt, de waardes er nog staan en als diegene dan opnieuw op submit drukt, de gegevens nog een keer ge-emailed worden. Dat kan tot in het oneindige doorgaan :/

Hoe kan ik dit voorkomen?

Ik zat zelf te denken aan dat de bezoekers iets aparts moeten invullen (typ hier ...), maar dat blijft natuurlijk ook staan. Een tijd instellen voordat er nog een keer ge-submit mag worden lijkt me ook een mooiere oplossing, maar hoe implementeer ik dat?

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
mag iemand niet 2x mailen? of moet er een periode tussen zitten?

dan zou ik gewoon serverside bijhouden welk ip op welke tijd gesubmit heeft. hieruit kan je dus nagaan of iemand mag versturen of niet

wat ook kan is een sessie var zetten dat ie al gestuurd heeft. Deze laat je expiren als de browser sluit, zodat hij niet 2x in dezelfde sessie kan versturen

[ Voor 28% gewijzigd door BasieP op 14-10-2006 17:05 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 12:59
Na het versturen van de e-mail een redirect doen

Je hebt namelijk ook het probleem met een refresh, dan wordt de mail ook opnieuw verstuurd.

Dus:

[Sendmail script hier] // Geen output genereren!!
header("Location: page_after_mail.php");

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
BasieP schreef op zaterdag 14 oktober 2006 @ 17:04:
mag iemand niet 2x mailen? of moet er een periode tussen zitten?

dan zou ik gewoon serverside bijhouden welk ip op welke tijd gesubmit heeft. hieruit kan je dus nagaan of iemand mag versturen of niet

wat ook kan is een sessie var zetten dat ie al gestuurd heeft. Deze laat je expiren als de browser sluit, zodat hij niet 2x in dezelfde sessie kan versturen
Het liefst een tijdsperiode (als diegene per ongeluk iets verkeerds heeft ingevoerd), maar dat maakt niet zo heel veel uit. Die laatste optie lijkt me wel wat, enig idee hoe ik dat kan doen?
storeman schreef op zaterdag 14 oktober 2006 @ 17:07:
Na het versturen van de e-mail een redirect doen

Je hebt namelijk ook het probleem met een refresh, dan wordt de mail ook opnieuw verstuurd.

Dus:

[Sendmail script hier] // Geen output genereren!!
header("Location: page_after_mail.php");
Het redirecten wordt al gedaan (succes pagina of error pagina).

[ Voor 26% gewijzigd door Ruzor op 14-10-2006 17:10 ]

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
storeman schreef op zaterdag 14 oktober 2006 @ 17:07:
Na het versturen van de e-mail een redirect doen

Je hebt namelijk ook het probleem met een refresh, dan wordt de mail ook opnieuw verstuurd.

Dus:

[Sendmail script hier] // Geen output genereren!!
header("Location: page_after_mail.php");
Je kan beter een beveiliging inbouwen met sessies. Na het emailen gewoon zeggen
PHP:
1
$_SESSION['send_time']=time();

En dan voor het emailen (dus als er de volgende keer gesubmit is):
PHP:
1
2
3
4
5
if(time() <= ($_SESSION['send_time'] + 120){
  echo "He, je post te snel!!!";
}else{
//mail hier
}

In dit geval mag je dus binnen 2 minuten niet nog een keer emailen.

[ Voor 4% gewijzigd door mithras op 14-10-2006 17:12 ]


Acties:
  • 0 Henk 'm!

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08 21:48

TheLunatic

Ouwe boxen.

Als je een database wil gebruiken dan zou je van elke submit een MD5 hash van de content + sender email kunnen maken en die opslaan in de database. Bij een volgende submit check je dan of die MD5 hash al voorkomt in de database, en als dat het geval is dan sta je de submit niet toe. Levert je meteen een log van verzonden mailtjes op :)

Mother, will they like this song?


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
TheLunatic schreef op zaterdag 14 oktober 2006 @ 17:23:
Als je een database wil gebruiken dan zou je van elke submit een MD5 hash van de content + sender email kunnen maken en die opslaan in de database. Bij een volgende submit check je dan of die MD5 hash al voorkomt in de database, en als dat het geval is dan sta je de submit niet toe. Levert je meteen een log van verzonden mailtjes op :)
Hmmm, dat gaat me iets te ver :) Het blijft maar een simpel formulier. Die oplossing van Mithras lijkt me een goede, ik krijg 'm alleen niet juist ge-implementeerd.

Dit is het set gedeelte:
PHP:
1
2
3
4
5
6
7
8
9
10
11
// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){
  $_SESSION['send_time']=time(); 
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=thankyou\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=tryagain\">";
}


Dat lijkt me ok, maar waar zet ik het session check gedeelte (dubbele if/else werkt niet)?

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Ruzor schreef op zaterdag 14 oktober 2006 @ 17:28:
[...]

Hmmm, dat gaat me iets te ver :) Het blijft maar een simpel formulier. Die oplossing van Mithras lijkt me een goede, ik krijg 'm alleen niet juist ge-implementeerd.

Dit is het set gedeelte:
[php]
// send email
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page
if ($success){
$_SESSION['send_time']=time();
print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=thankyou\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=tryagain\">";
}
[/code]

Dat lijkt me ok, maar waar zet ik het session check gedeelte?
Het check gedeelte zet je natuurlijk voor de regel waarop je mail gaat versturen. Als de mail namelijk al verstuurd is wil je voorkomen dat hij nogmaals wordt verstuurd.
En ik zou gebruik maken van de HTTP location header om de gebruiker naar een success pagina door te sturen en niet van de meta tag in je html die je gebruikt:
PHP:
1
header ('Location: http://www.example.com/content.php?topic=thankyou');

Let op, de location header dient gevolgd te worden door de absolute URL (dus met http:// ervoor).

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ruzor schreef op zaterdag 14 oktober 2006 @ 17:28:
[...]

Hmmm, dat gaat me iets te ver :) Het blijft maar een simpel formulier. Die oplossing van Mithras lijkt me een goede, ik krijg 'm alleen niet juist ge-implementeerd.

Dit is het set gedeelte:
PHP:
1
2
3
4
5
6
7
8
9
10
11
// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){
  $_SESSION['send_time']=time(); 
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=thankyou\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=tryagain\">";
}


Dat lijkt me ok, maar waar zet ik het session check gedeelte (dubbele if/else werkt niet)?
Je moet het natuurlijk wel logisch doen. De oplossing die ik aandroeg kan je zo implementeren:
PHP:
1
2
3
4
5
6
if(time() <= ($_SESSION['send_time'] + 120){
  echo "He, je post te snel!!!";
}else{
$_SESSION['send_time']=time();
//verdere mail zut hier
}


offtopic:
En wat Hacku zegt, in php meta tags printen :D 8)7

[ Voor 3% gewijzigd door mithras op 14-10-2006 17:39 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Ruzor schreef op zaterdag 14 oktober 2006 @ 17:28:
[...]

Hmmm, dat gaat me iets te ver :) Het blijft maar een simpel formulier. Die oplossing van Mithras lijkt me een goede, ik krijg 'm alleen niet juist ge-implementeerd.

Dit is het set gedeelte:
PHP:
1
2
3
4
5
6
7
8
9
10
11
// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){
  $_SESSION['send_time']=time(); 
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=thankyou\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=tryagain\">";
}


Dat lijkt me ok, maar waar zet ik het session check gedeelte (dubbele if/else werkt niet)?
Meta tags zomaar in je body afdrukken :D Doe dat maar mooi met header('Location: index.php') in je php code.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php 
// send email  
if (time() >= ($_SESSION['send_time'] + 120))
  {
  $success = "verstuurd";
  mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>"); 
  }
else
  {
  $succes = "tesnel";
  }

// redirect to success page  
if ($success=="verstuurd"){ 
  $_SESSION['send_time']=time();  
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=thankyou\">"; 
} 
else if ($succes=="tesnel")
  {
  echo "Hoho";
  }
else{ 
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=tryagain\">"; 
} 
?>

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
pietje63 schreef op zaterdag 14 oktober 2006 @ 17:38:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php 
// send email  
if (time() >= ($_SESSION['send_time'] + 120))
  {
  $success = "verstuurd";
  mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>"); 
  }
else
  {
  $succes = "tesnel";
  }

// redirect to success page  
if ($success=="verstuurd"){ 
  $_SESSION['send_time']=time();  
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=thankyou\">"; 
} 
else if ($succes=="tesnel")
  {
  echo "Hoho";
  }
else{ 
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=tryagain\">"; 
} 
?>
Vervang die meta tags eens door een php header() en $succes doe je beter als bool, dus een true of false ipv "tesnel" of "verstuurd".

March of the Eagles


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
pietje63 schreef op zaterdag 14 oktober 2006 @ 17:38:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php 
// send email  
if (time() >= ($_SESSION['send_time'] + 120))
  {
  $success = "verstuurd";
  mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>"); 
  }
else
  {
  $succes = "tesnel";
  }

// redirect to success page  
if ($success=="verstuurd"){ 
  $_SESSION['send_time']=time();  
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=thankyou\">"; 
} 
else if ($succes=="tesnel")
  {
  echo "Hoho";
  }
else{ 
  print "<meta http-equiv=\"refresh\" content=\"0;URL=../content.php?topic=tryagain\">"; 
} 
?>
Holy shit, wil je php scripts altijd zo lang maken???

Omdat het hier een beetje uit de hand loopt met oplossingen (:X), hier even een nette:
PHP:
1
2
3
4
5
6
7
8
9
10
if(time() <= ($_SESSION['send_time'] + 120){
  echo "He, je post te snel!!!";
}else{
  if(mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>")){
    $_SESSION['send_time']=time();
    header("Location:../content.php?topic=thankyou");
  }else{
    header("Location:../content.php?topic=tryagain");
  }
}

[ Voor 6% gewijzigd door mithras op 14-10-2006 17:44 ]


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Ok ok, volgens mij zijn die meta-tags niet echt gewenst ;) Sorry, ben nog niet zo gevorderd in php, ik zal ze veranderen iig. De rest zal ik proberen, denk dat het wel moet lukken.

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Haha, wat een mooie reacties meteen.. was maar een snelle aanpassing van het huidige script :-).

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Mithras86 schreef op zaterdag 14 oktober 2006 @ 17:42:
[...]
Holy shit, wil je php scripts altijd zo lang maken???

Omdat het hier een beetje uit de hand loopt met oplossingen (:X), hier even een nette:
PHP:
1
2
3
4
5
6
7
8
9
10
if(time() <= ($_SESSION['send_time'] + 120){
  echo "He, je post te snel!!!";
}else{
  if(mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>")){
    $_SESSION['send_time']=time();
    header("Location:../content.php?topic=thankyou");
  }else{
    header("Location:../content.php?topic=tryagain");
  }
}
Bedankt! Maar als ik het nalees, moet het ook werken, alleen hij doet het niet (krijg lege pagina te zien) :/

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ruzor schreef op zaterdag 14 oktober 2006 @ 17:53:
[...]

Bedankt! Maar als ik het nalees, moet het ook werken, alleen hij doet het niet (krijg lege pagina te zien) :/
Zet er wat extra output messages bij (met echo) en kijk waar het stuk loopt. Gewoon zelf debuggen ;) :>

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Ruzor schreef op zaterdag 14 oktober 2006 @ 17:53:
[...]

Bedankt! Maar als ik het nalees, moet het ook werken, alleen hij doet het niet (krijg lege pagina te zien) :/
Handig is met debuggen om bovenaan je pagina error reporting aan te zetten. Dit doe je zo:
PHP:
1
error_reporting(E_ALL);

Acties:
  • 0 Henk 'm!

Verwijderd

En om het nog maar eens te zeggen... pas op voor e-mail injectie, op de manier hoe je je variabelen accepteerin je mail() functie, kan er vrij eenvoudig misbruik van gemaakt worden:

http://www.securephpwiki.com

Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Verwijderd schreef op zaterdag 14 oktober 2006 @ 19:51:
En om het nog maar eens te zeggen... pas op voor e-mail injectie, op de manier hoe je je variabelen accepteerin je mail() functie, kan er vrij eenvoudig misbruik van gemaakt worden:

http://www.securephpwiki.com
Niet dat ik dat snel verwacht, maar daar ga ik ook naar kijken idd.

Alleen die timeout werkt nog niet en ik snap niet waarom niet 8)7 Ik zie zelfs de echo niet :S

EDIT: Ben iets verder, ik zie nu wel dat hij de error geeft bij de if functie:
PHP Parse error: parse error, unexpected '{'

[ Voor 22% gewijzigd door Ruzor op 14-10-2006 22:59 ]

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • flowerp
  • Registratie: September 2003
  • Laatst online: 11-09 18:20
Dit hele geneuzel is een vrij algemeen probleem waarvan eigenlijk alle web applicaties last hebben. Back button, refresh, dubbele post, 2de window openen en daar iets doen, terug gaan naar 1ste window en daar na een post de actie van window 2 zien gebeuren, etc.

Met PHP werk je eigenlijk in de 'assembly' van het web, en zul je voor alles zelf je eigen oplossing moeten bedenken. Voor andere platformen heb je meer high-level oplossingen die dit geneuzel al voor je regelen. Neem bv SEAM, met het concept van een conversation context -> het platform weet zelf dat je in een bepaalde fase van de conversatie zit en dus een bepaalde actie herhalen niet toegestaan is. In dezelfde moeite door kan deze conversation context verschillende browser windows (of tabs) binnen een enkele user session uit elkaar houden.

Als deze dingen echt een probleem voor je zijn is het mischien beter om eens naar een degelijk platform te kijken.

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


Acties:
  • 0 Henk 'm!

  • D4V3
  • Registratie: Augustus 2003
  • Laatst online: 19-03-2021
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
session_start();

if(time() <= ($_SESSION['send_time'] + 120)){
  echo "He, je post te snel!!!";
}else{
  if(mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>")){
    $_SESSION['send_time']=time();
    header("Location:../content.php?topic=thankyou");
  }else{
    header("Location:../content.php?topic=tryagain");
  }
}
?>


Komop mensen, die missende ) zie je toch wel?
En weleens gedacht aan session_start(); bovenaan je pagina?
Tenzij in je php.ini file staat dat hij sessies automatisch start (wat hij default niet doet), dan moet je boven elke pagina waar je een sessie gebruikt session_start() doen!

[ Voor 15% gewijzigd door D4V3 op 14-10-2006 23:39 ]

op-voorraad.nl - Realtime voorraad updates voor de Playstation 5!


Acties:
  • 0 Henk 'm!

Verwijderd

flowerp schreef op zaterdag 14 oktober 2006 @ 22:43:
Als deze dingen echt een probleem voor je zijn is het mischien beter om eens naar een degelijk platform te kijken.
Ik dacht: laat ik eens mijn tijd verspillen met dat fantastische Java... en kijk inderdaad op een van de demos: http://dvdstore.demo.jboss.com/home.seam

Ik verwacht het volgende van een of ander onderzoeksproject wat jaren lang geleden is verlaten. Niet van een bedrijf dat deze troep moet slijten.

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException
org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:58)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:125)
org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

org.jbpm.graph.def.DelegationException
org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:349)
org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:343)
org.jbpm.graph.node.Decision.execute(Decision.java:130)
org.jbpm.graph.def.Node.enter(Node.java:316)
org.jbpm.graph.def.Transition.take(Transition.java:119)
org.jbpm.graph.def.Node.leave(Node.java:382)
org.jbpm.graph.exe.Token.signal(Token.java:174)
org.jbpm.graph.exe.Token.signal(Token.java:137)
org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:229)
org.jbpm.pageflow.PageflowHelper.signal(PageflowHelper.java:47)
org.jboss.seam.core.Pageflow.navigate(Pageflow.java:185)
org.jboss.seam.jsf.SeamNavigationHandler.handleNavigation(SeamNavigationHandler.java:31)
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:84)
javax.faces.component.UICommand.broadcast(UICommand.java:106)
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:106)
org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.

Acties:
  • 0 Henk 'm!

  • Sander
  • Registratie: Juni 2004
  • Niet online
EDIT: LEZEN LEZEN LEZEN... Sorry

[ Voor 96% gewijzigd door Sander op 15-10-2006 00:33 ]


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
D4V3 schreef op zaterdag 14 oktober 2006 @ 23:37:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
session_start();

if(time() <= ($_SESSION['send_time'] + 120)){
  echo "He, je post te snel!!!";
}else{
  if(mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>")){
    $_SESSION['send_time']=time();
    header("Location:../content.php?topic=thankyou");
  }else{
    header("Location:../content.php?topic=tryagain");
  }
}
?>


Komop mensen, die missende ) zie je toch wel?
En weleens gedacht aan session_start(); bovenaan je pagina?
Tenzij in je php.ini file staat dat hij sessies automatisch start (wat hij default niet doet), dan moet je boven elke pagina waar je een sessie gebruikt session_start() doen!
8)7 Die session_start(); had ik idd al toegevoegd, maar die vergeten ) niet dus. Was er al zolang mee bezig dat ik er gewoon overheen keek. Bedankt voor de frisse blik, het werkt nu _/-\o_

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • flowerp
  • Registratie: September 2003
  • Laatst online: 11-09 18:20
Verwijderd schreef op zondag 15 oktober 2006 @ 00:24:
[...]
Ik dacht: laat ik eens mijn tijd verspillen met dat fantastische Java... en kijk inderdaad op een van de demos: http://dvdstore.demo.jboss.com/home.seam
Dit is inderdaad wel extreem slordig. :(

Merk wel op dat JBoss "de troep niet slijt", net zoals PHP, Linux en whatever biedt JBoss SEAM gratis en vrij aan. Er wordt (werd) uitsluitend geldt verdient met de trainingen en certificaten die je bij hun kunt halen. Nu JBoss van Red Hat is kan er een 't ander gaan veranderen aan het business model, maar ik verwacht niet veel.

Blijft wel gelden dat het 'concept' staat als een huis. Pageflows en converstation contexts zijn -de- weg die we moeten gaan bewandelen voor web applicaties. Je kunt gewoon niet ontkennen dat bijna elke web applicatie breekt (of het nou Java, ASP.net of PHP of whatever is) vanwege de door mij genoemde issues mbt de back-button etc. Waar een web applicatie niet breekt is meestal buitensporig veel moeite gedaan door de programmeurs om dit te voorkomen. Tijd die veel nuttiger besteed had kunnen worden. Het is zo'n algemeen probleem, daar zouden individuele programmeurs niet telkens opnieuw een custom oplossingen voor moeten hoeven te verzinnen.

Jouw reactie is overigens wel begrijpelijk, en ik zelf sta natuurlijk een beetje voor l*l door eerst SEAM aan te prijzen en dat het dan vervolgens crashed op een demo, maar bekijk het eens van een andere kant. Toen de allereerste smalltalk omgevingen kwamen, en even later de eerste C++ compilers, crashte deze -ook- op voorbeelden. Omdat G++ 1.0 slechte code produceerde, moest je daarom maar meteen het hele OO concept als troep bestempelen?

Dat deze online Seam demo nu crashed heeft te maken met implementatie en deployment. Ik weet dat het maar op een redelijk klein servertje draait (zoveel geld heeft het Seam project nou ook weer niet). edit: als ik een beetje door de demo heen click lijkt het er inderdaad op dat 'gewoon' de achterliggende DB eruit ligt. Blijft slordig, maar niet direct de schuld van seam en al helemaal niet van het concept erachter.

[ Voor 5% gewijzigd door flowerp op 15-10-2006 14:12 ]

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


Acties:
  • 0 Henk 'm!

Verwijderd

First class continuations in Scheme lossen dit probleem beter op dan in Java gedaan kan worden. Squeak heeft Seaside dat redelijk ver gevorderd is. Zie dabbledb.com voor een systeem dat er mee gemaakt is. Ik ben het met je eens dat dit soort problemen (zoals van TS) dingen zijn waar geen tijd meer aan besteed zou moeten worden. De concepten die je noemt zijn wel zinvol, maar ik zou het niet direct in Java implementeren.

Acties:
  • 0 Henk 'm!

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op zondag 15 oktober 2006 @ 00:24:
[...]

Ik dacht: laat ik eens mijn tijd verspillen met dat fantastische Java... en kijk inderdaad op een van de demos: http://dvdstore.demo.jboss.com/home.seam

Ik verwacht het volgende van een of ander onderzoeksproject wat jaren lang geleden is verlaten. Niet van een bedrijf dat deze troep moet slijten.

HTTP Status 500 -
Oeh, een foutmelding. Schande!
Dat is voor jou een reden om het maar meteen troep te noemen? :/

Beetje kortzichtig, vind je ook niet?

edit:
hmm, misschien moet ik voortaan eerst even de hele draad lezen voor ik reageer ;)

[ Voor 7% gewijzigd door Annie op 15-10-2006 15:30 ]

Today's subliminal thought is:


Acties:
  • 0 Henk 'm!

  • Muthas
  • Registratie: December 2005
  • Niet online

Muthas

O+

Ruzor schreef op zondag 15 oktober 2006 @ 00:53:
[...]

8)7 Die session_start(); had ik idd al toegevoegd, maar die vergeten ) niet dus. Was er al zolang mee bezig dat ik er gewoon overheen keek. Bedankt voor de frisse blik, het werkt nu _/-\o_
Misschien moet je even een degelijker programma gebruiken om te scripten, zodat je die missende ) in een keer zag. Ik gebruik Notepad++, en dan zie je aan de highlighting dat je iets vergeten bent.

Acties:
  • 0 Henk 'm!

  • flowerp
  • Registratie: September 2003
  • Laatst online: 11-09 18:20
Verwijderd schreef op zondag 15 oktober 2006 @ 14:43:
[...]
First class continuations in Scheme lossen dit probleem beter op dan in Java gedaan kan worden.
Ik proef een beetje een anti-java rant hier, terwijl ik helemaal niet specificiek Java genoemd heb of heb gezegd dat specificiek Java dit goed doet en PHP niet. Als je even terug leest zie je dat ik zei dat anno 2006 we niet meer met dit geneuzel bezig zouden hoeven te zijn. Als voorbeeld (en alleen als voorbeeld, zie betekenis van afkorting "bv" ) noemde ik Seam, omdat ik weet dat die met dit probleem aan de gang zijn geweest. En ja, Seam draait 'toevallig' op de Java, maar er is niks in deze concepten dat Java specifiek is. (voor als het je intereseerd, dit item zit wel in de koker voor java zelf, maar dat kan nog wel enkele jaren duren; zie de web objects jsr)

Om een ander voorbeeld te nemen: ORM is ook zo'n 'concept', en toevallig maakt ook JBoss daar een implementatie van, namelijk Hibernate. Dat wil niet zeggen dat ORM een Java 'iets' is. Verre van dat. Hibernate zelf is er bijvoorbeeld ook voor .Net (nhibernate) en je hebt ook bv nog llblgen (http://www.llblgen.com/defaultgeneric.aspx) alsmede zo'n tig andere implementaties (http://www.theserverside.net/news/thread.tss?thread_id=29914). In RoR zit zoiets tevens als een default.

Aangezien we steeds meer gaan naar web applicaties (rich internet applications) en veel dingen steeds minder een 'web site' zijn, wil je als programmeur ook steeds meer gewoon application behaviour. Dat wil zeggen zeker geen geneuzel met back buttons, maar wel statefull objects, en een UI die gewoon uit widgets bestaat, die je kunt koppelen tot grotere widgets, waar je gewoon meerdere instanties van kunt maken en waar je event listeners aan kunt hangen. Iedereen die ooit eens voor de desktop heeft geprogrammeerd met welke toolkit dan ook (win32/mfc, Qt, Gtk, Motif, Swing, SWT, etc) weet meteen waar ik het over heb.

Net zoals de gemiddelde desktop programmeur zich niet/amper bezighoudt met hoe de toolkit intern werkt (bv, hoe de grafische buffers door het OS gealloceerd worden en hoe de mouse events precies de applicatie bereiken), zo zou je als web applicatie programmeur ook niet meer zo dicht op de request/response cycle moeten zitten. Dat is vanuit een applicatie echt een implementation detail. Helaas zitten het huidige PHP en JSP daar nog steeds erg low-level op.

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


Acties:
  • 0 Henk 'm!

Verwijderd

Annie schreef op zondag 15 oktober 2006 @ 15:27:
Oeh, een foutmelding. Schande!
Dat is voor jou een reden om het maar meteen troep te noemen? :/

Beetje kortzichtig, vind je ook niet?
Nee

Acties:
  • 0 Henk 'm!

Verwijderd

flowerp schreef op zondag 15 oktober 2006 @ 16:32:
Ik proef een beetje een anti-java rant hier, terwijl ik helemaal niet specificiek Java genoemd heb of heb gezegd dat specificiek Java dit goed doet en PHP niet.
Ik heb alleen gezegd dat de concepten waar je het over had beter in Scheme kunnen worden uitgedrukt. Er zijn zat mensen die dat met mij eens zijn.
Als je even terug leest zie je dat ik zei dat anno 2006 we niet meer met dit geneuzel bezig zouden hoeven te zijn. Als voorbeeld (en alleen als voorbeeld, zie betekenis van afkorting "bv" ) noemde ik Seam, omdat ik weet dat die met dit probleem aan de gang zijn geweest. En ja, Seam draait 'toevallig' op de Java, maar er is niks in deze concepten dat Java specifiek is. (voor als het je intereseerd, dit item zit wel in de koker voor java zelf, maar dat kan nog wel enkele jaren duren; zie de web objects jsr)

Om een ander voorbeeld te nemen: ORM is ook zo'n 'concept', en toevallig maakt ook JBoss daar een implementatie van, namelijk Hibernate. Dat wil niet zeggen dat ORM een Java 'iets' is. Verre van dat. Hibernate zelf is er bijvoorbeeld ook voor .Net (nhibernate) en je hebt ook bv nog llblgen (http://www.llblgen.com/defaultgeneric.aspx) alsmede zo'n tig andere implementaties (http://www.theserverside.net/news/thread.tss?thread_id=29914). In RoR zit zoiets tevens als een default.

Aangezien we steeds meer gaan naar web applicaties (rich internet applications) en veel dingen steeds minder een 'web site' zijn, wil je als programmeur ook steeds meer gewoon application behaviour. Dat wil zeggen zeker geen geneuzel met back buttons, maar wel statefull objects, en een UI die gewoon uit widgets bestaat, die je kunt koppelen tot grotere widgets, waar je gewoon meerdere instanties van kunt maken en waar je event listeners aan kunt hangen. Iedereen die ooit eens voor de desktop heeft geprogrammeerd met welke toolkit dan ook (win32/mfc, Qt, Gtk, Motif, Swing, SWT, etc) weet meteen waar ik het over heb.

Net zoals de gemiddelde desktop programmeur zich niet/amper bezighoudt met hoe de toolkit intern werkt (bv, hoe de grafische buffers door het OS gealloceerd worden en hoe de mouse events precies de applicatie bereiken), zo zou je als web applicatie programmeur ook niet meer zo dicht op de request/response cycle moeten zitten. Dat is vanuit een applicatie echt een implementation detail. Helaas zitten het huidige PHP en JSP daar nog steeds erg low-level op.
Ja, ik was het daarboven al met je eens.
Pagina: 1