[JS/PHP] AJAX ft. Datum

Pagina: 1
Acties:

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
hallo
ik ben nu bezig met een applicatie die ik ook al eerder in een topic heb beschreven
http://gathering.tweakers.net/forum/list_messages/1077790
en sindsdien maak ik veelvuldig gebruik van de methode ajax en het werkt er geweldig gewoon :)

maar nu wil ik iets doen wat eigenlijk niet echt lukt
ik zal het probleem zo duidelijk mogelijk te omschrijven:
Afbeeldingslocatie: http://home.aim.hsbrabant.nl/s136588/bla1.jpg
het is de bedoeling dat als er een abonnement wordt aangemaakt dat er een list betreft is war men uit moet kiezen (verlenging, portering, opzegging, aanvraag etc(de overige laat ik hierbij buiten beschouwing))
daarnaast moeten ze een contract termijn invullen 6, 12, 24 of 36 maanden (ook een dropdownmenu)

vervolgens zijn er 3 datums die worden ingevoerd:
aanvraagdatum
datum waarop de abonnement wordt aangemaakt
-> dit is de datum van vandaag en deze is dus disabled
uitvoerdatum
datum waarop de actie(betreft)moet worden uitgevoerd
-> deze moet handmatig worden ingevuld (behalve verlenging)
afloopdatum
datum waarop de actie(betreft) verloopt
-> deze moet alleen hadnmatig worden ingevoerd bij verlenging
-> bij een opzegging moet deze gelijk waardig zijn aan de uitvoerdatum
-> bij de overige opties wordt deze berekend -> datum = uitvoerdatum + contracttermijn

alles werkt van het hele systeem incusief het disablen van velden bij selectie van betreft etc
bij een opzegging moet deze gelijk waardig zijn aan de uitvoerdatum wordt gedaan door de ajax-methode en werkt
Afbeeldingslocatie: http://home.aim.hsbrabant.nl/s136588/bla2.jpg
alleen mijn probleem is nu dat bij het laatste punt dus als er bv een Portering gekozen wordt dan dient men een uitvoeringsdatum in te vullen
als men dat heeft gedaan wordt de invoer verzonden dmv ajax methode naar een php bestand die vervolgens een datum berekend (datum = uitvoerdatum + contracttermijn)
en deze weer terug geeft

maar op een of andere manier werkt dat niet
hier de php code
PHP:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php //function_afloopdat_calc.php
    //input waarde
    $uitvoerdatum = $_REQUEST['uitvoerdatum'];
    $looptijd = $_REQUEST['looptijd'];

    //datum berekening
    if(strlen($uitvoerdatum) == 8) {
        $dag = $uitvoerdatum{0};
        $maand = $uitvoerdatum{2};
        $jaar = $uitvoerdatum{4} . $uitvoerdatum{5} . $uitvoerdatum{6} . $uitvoerdatum{7};
    }
    if((strlen($uitvoerdatum) == 9) && ($uitvoerdatum{1} =="-")) {
        $dag = $uitvoerdatum{0};
        $maand = $uitvoerdatum{2} . $uitvoerdatum{3};
        $jaar = $uitvoerdatum{5} . $uitvoerdatum{6} . $uitvoerdatum{7} . $uitvoerdatum{8};
    }
    if((strlen($uitvoerdatum) == 9) && ($uitvoerdatum{1} !="-")) {
        $dag = $uitvoerdatum{0} . $uitvoerdatum{1};
        $maand = $uitvoerdatum{3};
        $jaar = $uitvoerdatum{5} . $uitvoerdatum{6} . $uitvoerdatum{7} . $uitvoerdatum{8};
    }
    if(strlen($uitvoerdatum) == 10) {
        $dag = $uitvoerdatum{0} . $uitvoerdatum{1};
        $maand = $uitvoerdatum{3} . $uitvoerdatum{4};
        $jaar = $uitvoerdatum{6} . $uitvoerdatum{7} . $uitvoerdatum{8} . $uitvoerdatum{9};
    }
    switch ($looptijd) {
        case 6:
        $maand = $maand + 6;
        if($maand > 12) {
            $maand = $maand - 12;
            $jaar = $jaar + 1;
        }
        break;
        case 12:
        $jaar = $jaar +1;
        break;
        case 24:
        $jaar = $jaar +2;
        break;
        case 36:
        $jaar = $jaar +3;
        break;
    }

    //output
    echo "".$dag."-".$maand."-".$jaar."";
?>

het probleem zit hem niet in de js script want als ik in de php file rechtstreeks de uitvoerdatum of de looptijd terug geef werkt het wel...
dus ik denk dat de fout in de php script zit...
weet alleen niet waar... :?

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:34

crisp

Devver

Pixelated

uhm, je weet dat je in javascript ook gewoon berekeningen kan doen en met datums kan werken?

Intentionally left blank


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
dat heb ik ik eerst ook geprobeerd maar op een of andere manier is het na 3 uur niet egt gelukt
dus probeerde ik het zo op te lossen...
ik zal vandaag nog een poging wagen om het in js te doen was gisteren namelijk nogal moe..

ik zal het waarschijnlijk tog in JS doen maar dan nog wat is er fout aan de bovenstaande php-script??
want het zou wel fijn zijn als ik dan alsnog weet wat ik fout heb gedaan...

[ Voor 29% gewijzigd door Tijgertje84 op 20-10-2005 09:32 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:34

crisp

Devver

Pixelated

Qua PHP zou ik toch eens gaan kijken naar methods als explode() of split() (die laatste is ook beschikbaar in JS overigens):
PHP:
1
list ($dag, $maand, $jaar) = explode('-', $uitvoerdatum);

Verder: stel dat je 31-8-2005 opgeeft als uitvoerdatum en een looptijd van 6 maanden, wat krijg je dan?

Maar je PHP script geeft in ieder geval wel wat terug, dus ik vermoed dat het in de aanroep fout gaat.

Intentionally left blank


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
split had ik idd ook gebruikt met js gisteren..
had misschien wel beter eerst dat ook kunnen proberen idd ipv zelf een regel of 20 te schrijven :P
maar nu weet ik iig hoe het op 2 manieren kan (de long way en de short way 8)7 )
Maar je PHP script geeft in ieder geval wel wat terug, dus ik vermoed dat het in de aanroep fout gaat.
klopt maar dit was ook al zo.
het probleem is nu (ook zonder de verkorte manier) dat hij de berekening niet uitvoert want als ik dit invoer: 25-10-2005 en als contract termijn 6 maanden dan geeft hij ook 25-10-2005 weer.....
hij doet er dus geen 6 maanden bij dus ik denk dat hij heel die switch niet uitvoerd....

[ Voor 13% gewijzigd door Tijgertje84 op 20-10-2005 09:53 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:34

crisp

Devver

Pixelated

Dan komt dus blijkbaar je looptijd niet door, maar dat lijkt me met wat standaard debug-werk wel te achterhalen (alerts in je script enzo).

Intentionally left blank


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
crisp schreef op donderdag 20 oktober 2005 @ 09:59:
Dan komt dus blijkbaar je looptijd niet door, maar dat lijkt me met wat standaard debug-werk wel te achterhalen (alerts in je script enzo).
ff getest -> je hebt gelijk ik ga ff uitzoeken hoe dat kan...
JavaScript:
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
29
30
function afloopDate(betreft) {
    frm=document.forms[0];
    var betreft = betreft;
    var looptijd = frm.termijn.value;
    var uitvoerdatum = frm.uitvoer.value;
//.... een hele hoop ifs..
    else {
        frm.afloop.disabled=true;
        frm.afloop.value= 'Automatisch';
        datumSendRequest(uitvoerdatum,looptijd);
    }
}

function datumSendRequest(uitvoerdat,looptijd) {
  if(frm.betreft.value == 'Opzegging'){
      req.open('get', '/functions/function_uitdat_parse.php?uitvoerdat=' + uitvoerdat);
      req.onreadystatechange = datumHandleResponse;
      req.send(null);
  }
//het gaat om de onderstaande code
  else if(frm.betreft.value == 'KPNDuoCard' || frm.betreft.value == 'Migratie' || 
            frm.betreft.value == 'Portering' || frm.betreft.value == 'Aanvraag'){
    if(uitvoerdat !== 'Invullen!'){
        req.open('get', '/functions/function_afloopdat_calc.php?uitvoerdatum=' + uitvoerdat + '&looptijd' + looptijd);
        req.onreadystatechange = datumHandleResponse;
        req.send(null);
    }
    else{}
  }
}

EDIT: hij geeft de looptijd niet mee aan datumSendRequest.....
waarom de uitvoerdatum wel maar de looptijd niet... :? ????

EDIT 2:
nu wel nadat ik dit heb veranderd:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function datumSendRequest(uitvoerdat) {
  frm=document.forms[0];
  var looptijd = frm.termijn.value;
  test(looptijd);
  if(frm.betreft.value == 'Opzegging'){
      req.open('get', '/functions/function_uitdat_parse.php?uitvoerdat=' + uitvoerdat);
      req.onreadystatechange = datumHandleResponse;
      req.send(null);
  }
  else if(frm.betreft.value == 'KPNDuoCard' || frm.betreft.value == 'Migratie' || 
            frm.betreft.value == 'Portering' || frm.betreft.value == 'Aanvraag'){
    if(uitvoerdat !== 'Invullen!'){
    test(looptijd);
        req.open('get', '/functions/function_afloopdat_calc.php?uitvoerdatum=' + uitvoerdat + '&looptijd' + looptijd);
        req.onreadystatechange = datumHandleResponse;
        req.send(null);
    }
    else{}
  }
}

er zitten maar 2 tests erin en als ik het uitvoer krijg ik nog steeds alleen de uitvoerdatum terug die ik heb ingevoerd..
vreemd imo.. of zit er ergens een stomme fout...

[ Voor 40% gewijzigd door Tijgertje84 op 20-10-2005 10:46 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
ok vergeet maar wat ik had want ik heb hte helemaal veranderd en gewoon in JS gedaan
is uiteindelijk ook weer iets minder werk
maar op een of andere manier blijf ik dezelfde fout hebben...
dit is wat ik nu heb:
JavaScript:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
function datumSendRequest(uitvoerdat) {
  frm=document.forms[0];
  var looptijd = frm.termijn.value;
  disp_alert(looptijd);
  if(frm.betreft.value == 'Opzegging'){
      req.open('get', '/functions/function_uitdat_parse.php?uitvoerdat=' + uitvoerdat);
      req.onreadystatechange = datumHandleResponse;
      req.send(null);
  }
  else if(frm.betreft.value == 'KPNDuoCard' || frm.betreft.value == 'Migratie' || 
            frm.betreft.value == 'Portering' || frm.betreft.value == 'Aanvraag'){
    if(uitvoerdat !== 'Invullen!'){
        var splitdatum = new Array();
        splitdatum = uitvoerdat.split('-');
        var dag = splitdatum[0];
        var maand = splitdatum[1];
        var jaar = splitdatum[2];
        switch (looptijd) {
            case 6:
            maand = maand + 6;
            if(maand > 12) {
                maand = maand - 12;
                jaar = jaar + 1;
            }
            break;
            case 12:
            jaar = jaar +1;
            break;
            case 24:
            jaar = jaar +2;
            break;
            case 36:
            jaar = jaar +3;
            break;
        }
        var date = dag + '-' + maand + '-' + jaar;
        document.getElementById('afloop').value = date;
    }
    else{}
  }
}

op een of andere manier doet hij weer die switch niet...
de looptijd geeft hij wel goed weer doormiddel van die alert-test
bij de volgende invoer komt er dit uit:
uitvoerdatum = 25-10-2005
contractermijn(looptijd) = 12
Afloopdatum(uitkomst) = 25-10-2005?????
het zou dus 25-10-2006 moeten zijn |:(

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:34

crisp

Devver

Pixelated

6 != '6'

form-elementen geven strings terug, geen integers ;)

Intentionally left blank


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
tuurlijk!!! had ik moeten weten
lol nu krijg ik dit 25-94-20051 8)7
zo te zien werkt hij nog steeds met strings..
hoe kan ik er een int van maken>>?

parseInt :)

[ Voor 8% gewijzigd door Tijgertje84 op 20-10-2005 12:17 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
parseInt :?

[ Voor 84% gewijzigd door RobIII op 20-10-2005 12:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
ja sorry was zelf al op zoek terwijl ik had gepost
maar drukte iets tevroeg op 'verstuur bericht' :D

edit:
had deze link gevonden:
http://www.javascripter.net/faq/convert2.htm
maar mijn strings bestaan niet uit getallen, de inhoud zijn getallen..
JavaScript:
1
2
3
4
5
var splitdatum = new Array();
splitdatum = uitvoerdat.split('-');
var dag = splitdatum[0];
var maand = splitdatum[1];
var jaar = splitdatum[2];

dit zijn variabelen die integers moeten worden... hoe gaat het verhaal dan op??

[ Voor 75% gewijzigd door Tijgertje84 op 20-10-2005 12:25 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Tijgertje84 schreef op donderdag 20 oktober 2005 @ 12:17:
ja sorry was zelf al op zoek terwijl ik had gepost
maar drukte iets tevroeg op 'verstuur bericht' :D

edit:
had deze link gevonden:
http://www.javascripter.net/faq/convert2.htm
maar mijn strings bestaan niet uit getallen, de inhoud zijn getallen..
JavaScript:
1
2
3
4
5
var splitdatum = new Array();
splitdatum = uitvoerdat.split('-');
var dag = splitdatum[0];
var maand = splitdatum[1];
var jaar = splitdatum[2];

dit zijn variabelen die integers moeten worden... hoe gaat het verhaal dan op??
8)7
Ik kan er geen touw aan vastknopen... Je wil dat "dag", "maand" en "jaar" integers worden?

JavaScript:
1
2
3
var dag = parseInt(splitdatum[0]);
var maand = parseInt(splitdatum[1]);
var jaar = parseInt(splitdatum[2]);

Zoiets misschien? En dat kon je zelf niet bedenken?

Onthou ook even dit:
Note that if the number passed to the parseInt function has a leading zero (eg. 07) then that number will be considered to be an octal (base 8 ) number instead of a decimal (base 10) number.

[ Voor 25% gewijzigd door RobIII op 20-10-2005 12:29 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
RobIII schreef op donderdag 20 oktober 2005 @ 12:27:
[...]

8)7
Ik kan er geen touw aan vastknopen... Je wil dat "dag", "maand" en "jaar" integers worden?

JavaScript:
1
2
3
var dag = parseInt(splitdatum[0]);
var maand = parseInt(splitdatum[1]);
var jaar = parseInt(splitdatum[2]);

Zoiets misschien? En dat kon je zelf niet bedenken?

Onthou ook even dit:

[...]
ok thnx m8
jah sorry had het zelf al bijna maar heb nu pauze

[ Voor 16% gewijzigd door Tijgertje84 op 20-10-2005 12:33 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Tijgertje84 schreef op donderdag 20 oktober 2005 @ 12:32:
[...]

ok thnx m8
jah sorry had het zelf al bijna maar heb nu pauze
Ah, ok. Nee, dan begrijp ik het. Dus terwijl jij je boterhammen zit te eten mogen wij je klusjes opknappen. Goed bekeken man!

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
RobIII schreef op donderdag 20 oktober 2005 @ 12:34:
[...]

Ah, ok. Nee, dan begrijp ik het. Dus terwijl jij je boterhammen zit te eten mogen wij je klusjes opknappen. Goed bekeken man!
uhm hahahaha
nee dan begrijp jij het niet :)
ik heb pauze vanaf 12.30 tot 13.00
had dus ff haast omdat ik ff vastzat en dacht dat ik geen tijd meer had maar had het al zelf opgelost op tijd...
maar zoals je al merkt post ik veel te snel mijn vraag terwijl ik zelf het antwoord al heb als jij poste na mijn vraag....
dus bij deze ik zal pas posten als ik er niet uitkom na een uur ofzow..
want tis lullig dat jullie je tijd verdoen aan iets wat al is opgelost... O-)

edit:
problem solved!!
ook het probleem van octale/decimale cijfers wordt afgevangen

[ Voor 6% gewijzigd door Tijgertje84 op 20-10-2005 13:36 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H

Pagina: 1