[PHP] Vergelijking werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 15:43
Voor een site wil ik een makkelijke agenda maken met tijd-tabel. Indien er iets in de agenda staat wil ik dit uiteraard weergeven. Om de tijd-tabel te maken gebruik ik de volgende functie

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function create_time_range($start, $end, $by='30 mins') {
    $start_time = strtotime($start);
    $end_time = strtotime($end);

    $times = array();
    for ( ;$start_time < $end_time; ) {
        $times[] = $start_time;
        $start_time = strtotime('+'.$by, $start_time);
    }
    $times[] = $start_time;
    return $times;
}


Vervolgens haal ik uit mijn database alle reserveringen op een bepaalde dag. In de database staat de begin- en eind-tijd van de reservering vermeld. Deze reserveringen geef ik op de volgende manier weer in de tijd-tabel

PHP:
1
2
3
4
5
6
7
8
9
$times = create_time_range('10:00', '20:00', '30 mins');

foreach ($times as $key => $time) {
    if(date('H:i', $times[$key]) >= $show['r_type_start'] && date('H:i', $times[$key]) <= $show['r_tijd_eind']){
        echo("\t\t<tr id=\"time".str_replace(":","-",date('H:i', $times[$key]))."\" class=\"reservation\">\n\t\t\t<td>".date('H:i', $times[$key])."</td>\n\t\t\t<td>".$show['r_type']."</td>\n\t\t</tr>\n");
    }else{
        echo("\t\t<tr id=\"time".str_replace(":","-",date('H:i', $times[$key]))."\">\n\t\t\t<td>".date('H:i', $times[$key])."</td>\n\t\t\t<td>Foe</td>\n\t\t</tr>\n");
    }
}


Het probleem is echter dat alles tot de eind-tijd nu de class reservation krijgt. De <= vergelijking gaat prima, maar om een 1 of andere reden worden ook alle tijden vóór de begintijd als gereserveerd aangegeven. Ik heb ook het volgende al geprobeerd, maar zonder resultaat

PHP:
1
if(date('Hi', $times[$key]) >= str_replace(":","",$show['r_type_start']) && date('Hi', $times[$key]) <= str_replace(":","",$show['r_tijd_eind'])){


Ik begrijp even niet waarom de boel nu niet werkt. Kijk ik nu niet goed ofzo?

Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

date geeft een string terug ;)

On track


Acties:
  • 0 Henk 'm!

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 15:43
Dom, ben een titel vergeten zie ik nu..

Anyway, ook als ik dit
PHP:
1
2
    $d = date('Hi', $times[$key]);
    if($d >= $show['r_type_start']) && $d <= $show['r_tijd_eind']){


of

PHP:
1
2
    $d = date('Hi', $times[$key]);
    if($d >= str_replace(":","",$show['r_type_start']) && $d <= str_replace(":","",$show['r_tijd_eind'])){


doe werkt het ook niet...

De tijd staat in de databse ogeslagen als (bijvoorbeeld) 11:30 btw

Ben ik nu zo lomp ofwat? :)

Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Je vergelijkt strings. Als ik jou was zou ik integers / timestamps gaan vergelijken.

On track


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Gevalletje van leren debuggen. Wouzz geeft je antwoord echter al dus daar heb je mazzel mee. Echo je variabelen eens allemaal en dan snap je (hopelijk) precies wat er misgaat, volgende keer kun je dan ook je meeste problemen al oplossen zonder een topic hier ;)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:18

MueR

Admin Tweakers Discord

is niet lief

kleautviool schreef op zaterdag 12 december 2009 @ 20:35:
Dom, ben een titel vergeten zie ik nu..
Maak even een suggestie via het Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif knopje, dan zet een PRG moderator er een mooie titel neer :)

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • kleautviool
  • Registratie: Mei 2003
  • Laatst online: 15:43
Juistem.. het is gelukt! :) Muchos gracias!
Het omzetten naar mktime() deed het hem. Sweet!

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
28
29
30
function create_time_range($start, $end, $by='30 mins') {
    $start_time = strtotime($start);
    $end_time = strtotime($end);

    $times = array();
    for ( ;$start_time < $end_time; ) {
        $times[] = $start_time;
        $start_time = strtotime('+'.$by, $start_time);
    }
    $times[] = $start_time;
    return $times;
}

$start = explode(":",$show['r_tijd_start']);
$end = explode(":",$show['r_tijd_eind']);
$startMK = mktime($start[0],$start[1],0,$month,$day,$year);
$endMK = mktime($end[0],$end[1],0,$month,$day,$year);

$times = create_time_range('10:00', '20:00', '30 mins');

foreach ($times as $key => $time) {
    $curr = explode(":",date("H:i",$times[$key]));
    $currMK = mktime($curr[0],$curr[1],0,$month,$day,$year);
    if($currMK >= $startMK && $currMK <= $endMK){
        echo("\t\t<tr id=\"time".str_replace(":","-",date('H:i', $times[$key]))."\" class=\"reservation\">\n\t\t\t<td>".date('H:i', $times[$key])."</td>\n\t\t\t<td>Reservering</td>\n\t\t</tr>\n");
    }else{
        echo("\t\t<tr id=\"time".str_replace(":","-",date('H:i', $times[$key]))."\">\n\t\t\t<td>".date('H:i', $times[$key])."</td>\n\t\t\t<td>Foe</td>\n\t\t</tr>\n");
    }
    
}

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Wat maak je het jezelf ook moeilijk met bijv. dit:

PHP:
1
echo("\t\t<tr id=\"time".str_replace(":","-",date('H:i', $times[$key]))."\" class=\"reservation\">\n\t\t\t<td>".date('H:i', $times[$key])."</td>\n\t\t\t<td>Reservering</td>\n\t\t</tr>\n");


Is er een reden voor dat je dit op deze manier doet met al die tabs en newlines :?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:18

MueR

Admin Tweakers Discord

is niet lief

Mooi geformatteerde html? Dat deed ik in mn begintijd als programmeur ook :p Overigens kan je dat (als je echt zo wil werken) beter uitsplitsen over meerdere regels.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Dat wilde ik horen van de TS zelf :P Maargoed, ik wil dus meegeven als tip dat je formatting eigenlijk niet echt boeit en als het je wel boeit, verdeel t dan lekker over meerdere regels zoals MueR al scherp aangeeft ;)

Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Ik vind dit..
PHP:
1
str_replace(":","-",date('H:i', $times[$key]))

..eerder 'moeilijk' doen ;)

On track


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Die was me nog niet eens opgevallen, nou je t zegt... :+

Acties:
  • 0 Henk 'm!

  • dragontje124
  • Registratie: Mei 2009
  • Laatst online: 07-09 17:50
zal ik dan maar zeggen hoe het wel moet aangezien de TS dat blijkbaar niet weet en de rest het niet zegt :P
PHP:
1
2
3
$var =date('H-i', $times[$key]);
//doet hetzelfde als:
$var = str_replace(":","-",date('H:i', $times[$key]));

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:18

MueR

Admin Tweakers Discord

is niet lief

Ook een leuke om te overwegen is het gebruik van seconden vanaf middernacht. Dat scheelt je een hoop strtotime en date explodes. Vergeet dan overigens niet rekening te houden met die 2 lullige dagen per jaar dat er meer niet 24 uur in een dag zit ;)

[ Voor 32% gewijzigd door MueR op 13-12-2009 19:18 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
dragontje124 schreef op zondag 13 december 2009 @ 19:10:
zal ik dan maar zeggen hoe het wel moet aangezien de TS dat blijkbaar niet weet en de rest het niet zegt :P
PHP:
1
//code
Daar heb je handleidingen voor icm. een beetje logica.

Acties:
  • 0 Henk 'm!

  • _Noldy
  • Registratie: September 2009
  • Laatst online: 06-07 14:33
Ik heb ook een dynamische agenda in elkaar gezet voor een hotel. Werkt prima maar

$var = str_replace(":","-",date('H:i', $times[$key])); is niet echt handig.

mktime() is je vriend en vriendin hierin. Probeer nog eens goed je dataformats en je gewenste data op een rijtje te zetten.

Php heeft tegenwoordig voor elk wissewasje een functie ingebouwd. Zelfs een emailadres hoef niet meer met een regex :(.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
_Noldy schreef op woensdag 16 december 2009 @ 00:50:
Php heeft tegenwoordig voor elk wissewasje een functie ingebouwd. Zelfs een emailadres hoef niet meer met een regex :(.
Mag wel natuurlijk maar die regex ga je zelf toch nooit zo goed maken.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 18:39

Matis

Rubber Rocket

Er vallen me sws al twee dingen op, je for-lus kun je (volgens mij) veel eenvoudiger schrijven als een while lus, daarnaast zie ik dat je buiten je for-lus nog een keer de laatste waarde toevoegt, dit kun je voorkomen door je for/while statement <= te gebruiken.
Misschien dat het in jouw specifieke geval niet werkt, want ik doe het zo uit mijn blote hoofd.

Daarnaast is (wat _Noldy zegt) mktime() de functie waarmee je volgens mij veel eenvoudiger je timestamp kunt genereren.

[ Voor 11% gewijzigd door Matis op 16-12-2009 09:06 ]

If money talks then I'm a mime
If time is money then I'm out of time

Pagina: 1