Ben nu al een tijdje bezig PHP een beetje onder de knie te krijgen. Laatste projectje is een teller voor het aantal bezoekers dat online is. Dat wordt allemaal geregeld door online.php. Om design-technische redenen moeten de getallen (en dus het aantal bezoekers) vervangen worden door een plaatje. Een 1 moet dus vervangen worden door 1.gif. Het script dat ik tot nu toe heb, brengt mij een heel eind:
maar:
$tekst = "<? include "online.php"; ?>";
echo parse_smileys ($tekst);
geeft een witte pagina (m'n gevoel zei al dat dat includen als waarde binnen php niet zou werken).
<?php
function parse_smileys ($tekst)
{
// De array met alle smiley characters die vervangen
// moeten worden
$smile_characters = array(
'1',
';-)',
':D',
':P'
);
// De array met alle images die in de plaats van de characters
// erneer gezet moeten worden
$smile_images = array(
'1.gif',
'wink.gif',
'lach.gif',
'tong.gif'
);
// $i declareren
$i = 0;
// Alle smiley codes vervangen en $tekst wijzigen
foreach ($smile_characters as $character)
{
// $i ophogen
$i++;
Als ik eens wist hoe ik gegenereerde getallen als input daarvoor zou kunnen maken... Maar ik denk dat het huidige id op 1 of andere manier zou moeten werken...
Ik heb even een functie parse_number2image gemaakt. Kijk maar even hoe het werkt, hier werkt de functie goed.
<?php
error_reporting(E_ALL);
function parse_number2image( $_sNummer )
{
$sResultaat = '';
# We moeten zeker weten dat $_sNummer een string
# is daarom deze "type-cast". Anders kunnen we $_sNummer
# niet aanspreken als array in de while loop.
$_sNummer = (string)$_sNummer;
# Is $_iNummer wel daadwerkelijk een getal?
if( $_sNummer != 0
&& ( $_sNummer == ''
|| !ctype_digit($_sNummer) ) )
{
# niet dus return false
return false;
}
Gelukkig was Martijn niet weg :). Als ik het goed begrijp, geeft $sResultaat de getallen gesplitst in gifjes en haalt deze haalt zijn gegevens uit $_sNummer. Maar hoe worden deze gegevens opgehaald, op dit moment toch nog helemaal niet? M.a.w.: hoe koppel ik online.php, test2.php en de php-functie nu aan elkaar?
Dit is een werkend model van een digi teller die de nummers als plaatjes weergeeft. Het enige wat je nog moet doen is de kleine plaatjes aanmaken met de nummers 0 t/m 9 in *.png formaat en in de dir "img" zetten, en dan werkt hij. :)
<?php
$contents=478924;
$cdisp=$contents; // Storing the counter value in another variable
$divisor=10; // setting the divisor value to 10
$digitarray=array(); // creating an array
do {$digit=($cdisp % $divisor); // looping through the till all digits are taken
$cdisp=($cdisp/$divisor); // getting the digits from right side
array_push($digitarray,$digit); // storing them in the array
} while($cdisp >=1); // condition of do loop
// array is to be reversed as digits are in reverse order
$digitarray=array_reverse($digitarray);
//$dir=""; // setting the direcotry value. for different styles
while (list ($key, $val) = each ($digitarray)) { // looping through the array
//echo "<img src='img/$dir/$val.gif'>";
echo "<img src='img/$val.png'>";
// calling one by one digits based on the value of the array
} // end of the loop
?>
$contents=478924; <- dit moet je nog wel vervangen als je een actieve telling wilt hebben. Ik heb hem als test een vaste var gegeven, dan kan je kijken hoe hij werkt.
function parse_number2image( $_sNummer )
{
$sResultaat = '';
# We moeten zeker weten dat $_sNummer een string
# is daarom deze "type-cast". Anders kunnen we $_sNummer
# niet aanspreken als array in de while loop.
$_sNummer = (string)$_sNummer;
# Is $_iNummer wel daadwerkelijk een getal?
if( $_sNummer != 0
&& ( $_sNummer == ''
|| !ctype_digit($_sNummer) ) )
{
# niet dus return false
return false;
}
Die img-tags kan ik wel aanpassen naar *getal*.gif, dat is zelfs al in het script gezet (ff de // omwisselen). Ben blij dat ik alle onderdelen heb, nu de uitdaging om er 1 werkend geheel van te maken... ik ben al driftig op zoek, maar t heeft nog nix concreets opgeleverd :(. Iig bedankt!
Ik schaam me kapot, maar ik krijg neigingen om met m'n toetsenbord te gaan slaan! Bij het nieuwe script van Martijn! (nogmaals harststikke bedankt gast!) is in theorie toch niets aan online.php veranderd, dus zou
<body>
<? include "online.php"; ?>
</body>
</html>
toch gewoon een plaatje moeten neerzetten? Jammer genoeg alleen een witte pagina... Ik ben zo dichtbij, maar ik zit nog zo ver van PHP 100% doorhebben :(... Martijn! (pas op, hier volgt een smeekbede), wil je nog 1x over je hart strijken en deze zielige jongen helpen zodat hij straks rustig en tevree kan gaan slapen?