[JS/php] form mailen en cookie

Pagina: 1
Acties:

  • floduR
  • Registratie: September 2001
  • Niet online
Ik ben bezig met (het voorbereiden van) een onderzoek en had hierbij de volgende site gemaakt:

http://www.homepages.hetnet.nl/~terp84/onderzoek/index.html

Proefpersonen komen binnen en krijgen een random serie plaatjes te zien. Door op start te klikken begint de animatie en dan moeten ze een verschil ontdekken in de knipperende foto's (er zit 1 verschil in). Zodra die gevonden is, moet er op 'Stop' geklikt worden. (de timer wordt dat gestopt)

Nou is mijn vraag, hoe sla ik de informatie op? (het serienummer (+iSlideSerie+) en de timertijd (+iTimeTaken+), gaat het hier om)
Het makkelijkste is om het naar mij te mailen, maar hoe werkt dat? Ik heb gezocht hier en op google, maar kan er niet echt wijs uit worden, of het werkt niet, ik heb er geen ervaring mee en volgens mij is het betrekkelijk simpel.

En verder zou ik nog willen dat een proefpersoon maar 1x mee kan doen, de knoppen zijn al gedisabled na stoppen, maar dit moet ook nog zo zijn als de pagina vernieuwd wordt (door een cookie denk ik dan), hier staat niet zoveel over op internet, of ik zoek niet goed?

  • Rowanov
  • Registratie: Februari 2004
  • Niet online

Rowanov

Kop eens wat anders...

Dit is dan wel voor netscape, maar het zou wel kunnen helpen:
http://wp.netscape.com/en...ript/advtopic.htm#1013101

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 10-05 21:37

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Als je toch PHP kunt gebruiken, zou je de info naar een bestand danwel database kunnen wegschrijven. Evenals het IP danwel de username van de gebruiker. Je kunt ook een serie random codes genereren, en in een database welke code wel en niet heeft meegedaan. Als je dan als gebruiker een gebruikte code invoert, mag je niet meedoen.

Kijk overigens eens naar de volgende PHP-functies:

http://nl2.php.net/mail
http://nl2.php.net/mysql_connect
http://nl2.php.net/mysql_select_db
http://nl2.php.net/mysql_query
http://nl2.php.net/setcookie
http://nl2.php.net/fwrite

Dan zou je een aardig eindje op weg moeten komen :)

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


  • floduR
  • Registratie: September 2001
  • Niet online
Maar hoe zorg je dat er na een druk op de knop twee javascript variabelen gemaild worden? Ik kom er niet uit

[ Voor 4% gewijzigd door floduR op 08-03-2005 20:10 ]


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 10-05 19:05
hee floduR ;)

Gewoon een hidden form maken en invullen
code:
1
2
3
4
5
6
7
8
9
10
<form id="resultform" action="savedata.php" method="POST">
<input type="hidden" name="serie">
<input type="hidden" name="time">
</form>

En dan bij het aanroepen van de stop functie de volgende js code:
oForm = document.getElementById("resultform");
oForm.elements['serie'].value = iSlideSerie;
oForm.elements['time'].value = iTimeTaken;
oForm.submit();


Je kan ook method="mailto:user@domein.nl gebruiken om de resultaten te mailen, maar dat is een beetje verrotte methode. Zet dan evt. in de form-tag wel even enctype="text/plain".

Cookie is verder makkelijk. Gewoon even een tutorial opzoeken bijvoorbeeld: http://www.netspade.com/articles/javascript/cookies.xml . In dat cookie wel een expires-datum zetten anders is ie bij het sluiten van de browser weg nl.

//Eidt: oooeew in alle haast een paar gruwelijke foutjes gemaakt.. nu verbeterd.

[ Voor 111% gewijzigd door Morrar op 08-03-2005 20:40 ]


  • floduR
  • Registratie: September 2001
  • Niet online
Toch doe ik nog iets fout denk ik...

html file:
code:
1
2
3
4
5
6
7
8
<form name="buttons">
        <input type="button" name="start"  value="start" onClick="ControlSlides('start'); disabled = true ; document.buttons.submit.disabled = false">
        <input type="submit" name="submit" value="stop"  onClick="ControlSlides(); oForm = document.getElementById('resultform'); oForm.elements['serie'].value = iSlideSerie; oForm.elements['time'].value = iTimeTaken; oForm.submit(); disabled = true; " disabled>
</form>
<form id="resultform" action="resultaat.php" method="POST">
        <input type="hidden" name="serie">
        <input type="hidden" name="time">
</form>


php file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

{

$mailbody = 'Serie nummer: '.$_POST['serie']." \n";

$mailbody .= 'Reactietijd: '.$_POST['time'];

mail("ik@mezelf.nl", "Resultaat Onderzoek", "$mailbody");

exit;

}

?>


<html> e.d. weggelaten, voor de overzichtelijkheid (alsof die nu zo goed is...)

[ Voor 66% gewijzigd door floduR op 08-03-2005 21:06 ]


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 10-05 19:05
Wat gaat er fout? En heb je evengoed die javascript code in de ControlSlides-functie gestopt? Zo:
code:
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
26
27
28
function ControlSlides(sMode)
{   if(sMode == "start")
    {   //Set start time
        oMyDate = new Date();
        iStartTime = oMyDate.getTime();

        //Start cycling
        SwapSlides();
    }
    else
    {    if(oSlideTimer)
         {   //Stop time and calculate
             oMyDate = new Date();
             iTimeTaken = oMyDate.getTime() - iStartTime;
             alert(iTimeTaken); //Uncomment voor testen

             //Stop cycling
             self.clearTimeout(oSlideTimer);
             oSlideTimer = null;
             
            //Submit data
            oForm = document.getElementById("resultform");
        oForm.elements['serie'].value = iSlideSerie;
        oForm.elements['time'].value = iTimeTaken;
            oForm.submit();
         }
    }
}


//Edit: ah zie nu dat je het in de onclick hebt gepropt... over overzichtelijkheid gesproken :) Beter in de functie doen. Die twee variabelen zijn ook alleen in dat script zichtbaar nl.

//Edt2: Ok, succes!

[ Voor 18% gewijzigd door Morrar op 08-03-2005 21:11 ]


  • floduR
  • Registratie: September 2001
  • Niet online
Ehm goed...

Er zat een kleine syntax fout in, hij doet het! Gaaf.

Ik ga nu even kijken naar een cookie

Edit:

Weet iemand nog even snel hoe je de animatie automatisch laat stoppen na 20 sec? Dan moet dus precies hetzelfde gebeuren als dat je anders op stop zou drukken.

[ Voor 46% gewijzigd door floduR op 08-03-2005 22:05 ]


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 10-05 19:05
code:
1
window.setTimeout(ControlSlides, 20000);

In de functie ControlSlides() stoppen, onderaan het stuk waar ie gestart wordt. Dus onder "SwapSlides();" . Die 20000 is het aantal ms.

  • floduR
  • Registratie: September 2001
  • Niet online
Oke, perfect!

Ik ben nu in de test fase, maar ik kom gelijk al het probleem tegen van de laad/downloadtijd van de plaatjes, hoe omzijl ik dat? Het duurt wel een paar seconden voor alles gereed is en de timer loopt dan al... dat komt het onderzoek niet echt ten goede.

De plaatjes onzichtbaar weergeven ofzo? Het zijn wel 12 plaatjes van 90kb. (waarvan er 2 random geselecteerd worden, maar om alleen die te 'preloaden' wordt misschien weer wat complex, of valt dat mee?)

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 10-05 21:37

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Overigens dien je de functienaam van een timeOut wel tussen haakjes te zetten:

code:
1
setTimeout("ControlSlides();", 20000);

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


  • floduR
  • Registratie: September 2001
  • Niet online
Ik kom niet uit het cookie...

Er staat 100 tutorials op internet, maar ik krijg het niet werkend, dit is wat er moet gebeuren:

- als de .php site wordt geladen (nadat op de submit knop wordt geklikt), die de gegevens mailt, wil ik een cookie creeeren
- die cookie moet verhelpen dat bij het volgende bezoek aan deze site, er geen informatie wordt verzonden. (dus dat niet iemand 2x meedoet)

Het zou dus iets moeten zijn met als: "if cookie niet bestaat, dan uitvoeren mail-php, anders niet mailen"

Het cookie moet gemaakt worden bij <body onunload=> denk ik.

Hoe moet ik verder?

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Als je dan toch php tot je beschikking hebt dan kun je dat toch beter gebruiken? Lijkt mij makkelijker dan javascript?
Zoiets als dit word het dan geloof ik:
PHP:
1
2
3
4
5
6
7
// after the page reloads, print them out
if (isset($_COOKIE['cookie'])) {
    //hier code/tekst over dat er al gereageerd is vanaf deze computer
} else {
    setcookie("cookie", $value);
    //formulier verzend code
}

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


  • floduR
  • Registratie: September 2001
  • Niet online
Hij geeft een error en stuurt gewoon nog steeds het mailtje, hoe zou je het toepassen in:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

{

if ($_POST['kleurenblind']=='ja') $v_out='KLEURENBLIND \n';

else $v_out='';

if ($_POST['kleurenblind']=='ja')
$mailbody = 'KLEURENBLIND'." \n";

$mailbody .= 'Serie nummer: '.$_POST['serie']." \n";

$mailbody .= 'Reactietijd: '.$_POST['time']." \n";

$mailbody .= 'Het verschil: '.$_POST['verschil'];

mail("mail@myself.nl", "Resultaat Onderzoek", "$mailbody");

}

?>


Dus dit moet ie doen, alleen als er geen cookie is

Edit:

Rowanov :
Ze zijn al weg, maar dat boeit niet, hij deed het gewoon

[ Voor 115% gewijzigd door floduR op 10-03-2005 14:10 ]


  • Rowanov
  • Registratie: Februari 2004
  • Niet online

Rowanov

Kop eens wat anders...

Eh, je code klopt volgens mij niet. Je hebt brackets voor je if-else staan :? Kijk nog eens goed naar de post van PsychoBoy hoe if-else is opgebouwd.

  • floduR
  • Registratie: September 2001
  • Niet online
Ze geeft hij geen errors, maar hij gaat altijd naar de 'else', dus verstuurt de gegevens. Alsof de cookie niet bestaat.

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
26
27
<?php

if (isset($_COOKIE['check'])) {
    echo "Je kan helaas maar 1 keer meedoen, je resultaat is niet opgeslagen";

} else {
    setcookie("check", $name, time()+864000);

    echo "Dank je wel voor het meedoen, je resultaat is opgeslagen";

    if ($_POST['kleurenblind']=='ja') $v_out='KLEURENBLIND \n';

    else $v_out='';

    if ($_POST['kleurenblind']=='ja')
    $mailbody = 'KLEURENBLIND'." \n";

    $mailbody .= 'Serie nummer: '.$_POST['serie']." \n";

    $mailbody .= 'Reactietijd: '.$_POST['time']." \n";

    $mailbody .= 'Het verschil: '.$_POST['verschil'];

    mail("mail@myself.nl", "Resultaat Onderzoek", "$mailbody");
}

?>


Edit:

Ok, volgens mij werkt het nu... de cookie had nog wel een "name" nodig... (ik dom..)

Heel erg bedankt!

[ Voor 24% gewijzigd door floduR op 10-03-2005 14:32 ]

Pagina: 1