Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

Direct wijzigen content site

LehLeh
bewerkt di 13 jan 2015 in Algemeen Posts: 11
Is het mogelijk om als beheerder van een site direct een wijziging aan te brengen in de inhoud zoals bijvoorbeeld een korte tekst plaatsen of een kleur van een div wijzigen.
Ik lever een online '????n op ????n' consult-dienst. Om dit te realiseren moest ik een aantal hobbels nemen: een pay-per-minute toegang tot mijn site en een webrtc-connectie om browser to browser te communiceren.
Dit is gelukt. Nu wil ik natuurlijk niet dat iemand inbelt als ik bezet ben. Het zou die persoon een bedragje per minuut kosten om te merken dat ik niet beschikbaar ben.
Ik wil dus eigenlijk een bezet of niet beschikbaar-melding met de mededeling dat bellen geen zin heeft direct kunnen (de-)activeren.
Mischien moet ik een soort chat-functie inbouwen waar ik alleen toegang toe heb? Of zijn er programmeer-talen die hier standaard in voorzien?
Ik heb er lange tijd over gedaan om uiteindelijk tot de conclusie te komen dat mijn programmeer-kennis hier gewoon te kort schiet.
Kan iemand mij op weg helpen? Dank!

Reacties

  • ArtArt
    bewerkt zo 1 feb 2015
    PMPosts: 11
    Als ik jou was zou ik op je site een kleine div maken met hierin tekst die de bezoekers vertelt of je in gesprek bent of dat je bereikbaar bent. Je maakt dan een pagina voor jezelf aan waar anderen niet bij kunnen met een knop 'Verander naar "In gesprek"' en een knop 'Verander naar "Bereikbaar"'. Zodra jij op zo'n knop klikt verandert je status in een database of .txt bestand. De text op de homepagina baseer je dan weer op de waarde in de database of in het .txt bestand, door deze uit te laten lezen op de homepagina.
    Leh
  • LehLeh
    PMPosts: 11
    Dank je Art. Mijn reactie komt wat laat maar ik had de hoop dat iemand zou reageren al bijna opgegeven en daarom niet meer zo vaak gecheckt.
    Je oplossing klinkt werkbaar en ik zal proberen of het me lukt om het concreet uit te werken. Als ik tegen problemen aanloop bij de realisatie (en dat zou zo maar kunnen gebeuren) zal ik terugckomen op dit topic.
    Voor nu dus: dank!
  • PMPosts: 48
    Het probleem met deze oplossingen is altijd dat als je vergeet het aan/uit te zetten, het nog steeds fout gaat.

    Kun je de pay-per-minute niet starten als je het consult aanneemt.
    Leh
  • LehLeh
    PMPosts: 11
    Dat zou inderdaad de minst gecompliceerde oplossing zijn maar het laat zich niet aan- of uitzetten. Maar je hebt helemaal gelijk kbsc: handmatig geeft twee problemen 1) je vergeet het wellicht een keer en 2) er kan net iemand inbellen tussen het moment dat iemand anders inbelde en ik mijn status verander in ' bezet' .
    het moet dus worden geautomatiseerd. Voordeel: een leuke uitdaging.
    Waar sta ik nu? Art zette mij op het spoor om mijn status te vermelden in een div die uitgelezen wordt. Na research ben ik aan de slag gegaan met php en ik gebruik nu de commando's fopen, fwrite, fgets en fclose.
    Daarmee is het mij gelukt om mijn status zelf te wijzigen. Wat ook lukt: Als mijn status= ' beschikbaar' en iemand checkt mijn status dan komt hij op een pagina van waaruit hij in kan bellen en verandert automatisch mijn status in bezet.

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1 ">
    <title>veranderbare tekst</title>

    <SCRIPT type="text/JavaScript">
    var timeoutID;

    function waarschuwingteller() {
    timeoutID = window.setTimeout(waarschuwing, 6000);
    }

    function waarschuwing() {
    document.write('Je kunt het zodadelijk nog eens proberen');



    }
    function terugstuurteller() {
    timeoutID = window.setTimeout(terugstuur, 9000);
    }
    function terugstuur(){
    window.location = 'http://localhost:8080/beschikbaar hier checken.php';
    }
    </script>


    </head>
    <body>

    <?php

    // Hier geef ik de huidige tekst weer dat ik er ben:
    // ik geef eerst een variabele aan waarin het bestand staat:
    $file = "toon status.txt";
    // open het bestand met 'r' (read)
    $fopen = fopen($file, "r");
    // haal de tekst eruit
    $data = fgets($fopen, 8192);
    // sluit het bestand weer af
    fclose($fopen);

    // weergeef wat in $data staat

    echo "$data";

    //hier verander ik de tekst zodat de volgende ziet dat ik bezet ben:
    // defineer een variabele waar het bestand zich bevindt
    $file = "toon status.txt";
    // schrijf de volgende tekst in het bestand
    $invoegen = "ik ben nu bezig \n";
    // open het bestand
    $fopen = fopen($file, "w");
    // schrijf '$invoegen' in het bestand
    fwrite($fopen, $invoegen);
    // sluit het bestand
    fclose($fopen);

    ?>


    <script type="text/javascript">
    waarschuwingteller()
    terugstuurteller()
    </script>


    </body>
    </html>

    In toon status.txt staat bijv: ik ben beschikbaar en een link van waaruit ingebeld kan worden.
    Wat ik nu lastig vind: als een bezoeker van daaruit niet doorklikt dan blijft mijn status op bezet .
    ook kan ik mijn status niet automatisch op ' beschikbaar' laten zetten want iemand die mijn status checkt als ik bezet ben landt op dezelfde plaats met alleeen een andere tekst in " toon status'txt "
    Het grootste probleem is dat ik denk dat ik de zaak heb gecompliceerd. Zo erg zelfs dat ik mij afvraag of iemand hier nog iets mee kan.

    Ik wil graag laten zien wat ik verder geknutseld heb ( bijvoorbeeld hoe ik mijn status aanpas enz. maar misschien is het allemaal te gekunsteld en moet het over een heel andere boeg?
    Mijn vragen: gebruik ik terecht php en javascript?

    En de belangrijkste vraag: Kan ik ook ipv, bij verandering van mijn status, niet alleen een andere tekst presenteren in " toon status.txt' maar zelfs de bezoeker op een heel andere pagina laten komen afhankelijk van mijn status?

    En deze doe ik er toch nog even bij, hier checkt een bezoeker in eerste instantie de status:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1 ">
    <title>beschikbaar hier checken</title>
    </head>
    <body>
    hallo
    <p> <a href="veranderbare tekst.php">check hier de beschikbaarheid</a></p>


    </body>
    </html>
  • LehLeh
    bewerkt ma 9 feb 2015
    PMPosts: 11
    Dit keer bracht ik mijzelf op een idee door mijn laatste vraag. Hiermee:

    if($data == "ik ben nu bezig"
    window.location = 'http://pagina')

    zou ik afhankelijk van wat er in " toon status.txt" naar iedere willekeurige pagina kunnen doorsturen?

    Dus met behulp van ' if' en ' else' en het vergelijken van de inhoud van string-variabelen?
  • PMPosts: 879
    ja zoiets moet niet moeilijk zijn:
    Stel in je toonstatus.txt staat: "ik ben nu bezig" dan zou je met de loop ziets kunnen doen:

    if($data == "ik ben nu bezig") {
    header('Location: pagina-bezig.php');
    }
    else {
    header('Location: pagina-niet-bezig.php');
    };
    Leh
  • LehLeh
    PMPosts: 11
    Ja, geweldig, dank Huet. Ik had iets soortgelijks in gedachten maar was nog bezig de benodigde code's te zoeken.
    Van hier uit kan ik beslist weer verder.
    Dank!
  • Met unload kun je je status bijwerken door dit aan de server te laten weten in javascript.

    In het scherm kun je via javascript bv. elke X seconden controleren of je status is gewijzigd. Dit gaat met behulp van een iframe. Het is niet het meest simpele, maar het kan wel. Ik heb zoiets wel eens gedaan voor controle in javascript of een ideal betaling afgerond was.

    Dan kun je de gebruiker naar beschikbaar pagina sturen. Maar ook hierbij geld, door de vertraging in verwerking van pagina's zou het kunnen dat de pagina beschikbaar voor meerdere gebruikers opgeroepen wordt.

    Dit kun je deels voorkomen door de status bij te houden door een gebruikersnaam te bewaren. Dan kun je die gebruiker altijd als beschikbaar melden en andere gebruikers als niet beschikbaar melden, ook als ze "per ongeluk" op de beschikbaar pagina komen.

    Verder zou je bij be-eindiging van een consult zelf kunnen opgeven "consultatie be-eindigd", waardoor je voorkomt dat de status fout blijft als de gebruiker zijn venster niet sluit.

    Ook kun je je beschikbaarheid koppelen aan het oproepen van een bepaalde pagina. Dan kun je ook NIET beschikbaar zijn (voor een XXX pauze).
    nuet
  • LehLeh
    PMPosts: 11
    Op dit moment is het redelijk goed geautomatiseerd. Toch ben ik ook ge??nteresserd in jouw oplossing kbcs ( ik moet uit gaan kijken want dit begint een hobby te worden). Kun je mij iets meer op weg helpen met het stukje js. dat ieder x seconden checkt? Zelf dacht ik in eerste instantie aan een oplossing in die richting maar ik heb er niets over kunnen vinden.
    "... zelf kunnen opgeven "consultatie be-eindigd", waardoor je voorkomt dat de status fout blijft als de gebruiker zijn venster niet sluit."
    Daar heb ik in voorzien, ik kan zelf mijn satus in ????n klik wijzigen. Wat ik wel slordig vind is dat ik daar php voor gebruik en dus afhankelijk ben van een browser. Ik zou graag een applicatie daarvoor schrijven maar dan zal ik dus wel weer een andere programmeeer-taal moeten bestuderen.
    "...koppelen aan het oproepen van een bepaalde pagina."
    Dat vindt ik de interessantste optie. je bedoelt dat als een bepaalde pagina geopend is dat dan vanzelf de status erandert in bezet en vice versa???

    En dan nog dit: ik vind het super hoe mensen meedenken op dit forum; iedereen dank daarvoor.

    Leh.
  • bewerkt do 19 feb 2015
    PMPosts: 879
    @Leh , leg nog even uit wat je precies wilt bereiken nu; is me beetje onduidelijk geworden
  • LehLeh
    PMPosts: 11
    Kan me dat levendig voorstellen Nuet. Ik heb op dit moment een werkend systeem. Bezoeker 1 checkt mijn status via een link. Als ik beschikbaar ben dan zorgt een php'tje ervoor dat mijn status verandert in' bezet' voor een eventuele bezoeker 2 en krijgt bezoeker 1 de kans om daadwerkelijk in te bellen. Aarzelt hij daar te lang mee dan wordt hij na een melding teruggelinkt naar de eerste pagina en verandert mijn status terug in beschikbaar.
    Ik denk dat ik alles nog kan vereenvoudigen met de suggestie van kbcs:
    'In het scherm kun je via javascript bv. elke X seconden controleren of je status is gewijzigd. Dit gaat met behulp van een iframe'.
    Ik zou daar graag meer van willen weten: hoe kan ik een .txt die in mijn root aan serversite staat elke x seconden laten uitlezen en dan in een divje laten verschijnen. De inhoud van het divje moet dus gerefresht.

    Ten overvloede: het werkt nu maar dit zou de zaak verkorten en versimpelen.


  • LehLeh
    bewerkt wo 25 feb 2015
    PMPosts: 11
    Nog een correctie/toevoeging: de inhoud van .txt hoeft niet elke keer opnieuw worden overgenomen in het div'je maar alleen als er wijziging is natuurlijk. De .txt zou dan dus iedere x sec'n moeten worden vergeleken met de laatst bekende/opgeslagen waarde en alleen als 'is ongelijk aan' worden weggeschreven in de div.
  • bewerkt do 26 feb 2015
    PMPosts: 879
    ik heb iets gemaakt met Ajax die het tekstbestand iedere keer uitleest na x seconden.
    Zelf kun je de status veranderen met de inputform. De klanten lezen jouw status in beschikbaarheid.html

    Eerst je form waarin je zelf je status kunt wijzigen. De input wordt opgeslagen in status.txt

    input_status.php

    <?php
    error_reporting(E_ALL);
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {

    $status = $_POST['status'];
    $myfile = fopen('status.txt', 'w') or die('Kan status.txt niet openen!');

    $txt = '';
    $txt .= 'Status: ';
    $txt .= $status;
    $txt .= '<br />';

    $txt .= '<br /><br />';

    fwrite($myfile, $txt);
    fclose($myfile);

    if(fwrite) {
    echo 'Staus veranderd in: <b>'.$status.'</b><br /><br />';
    }
    } // endif

    ?>

    <form name="form1" method="post" action="">
    Vul hieronder je status in: <br />
    Status: <br> <input name="status" type="text" /><br>
    <input type="submit" name="submit" value="Verzenden" />
    </form>

    beschikbaarheid.html

    <script type="text/javascript">

    function Ajax()
    {
    var
    $http,
    $self = arguments.callee;

    if (window.XMLHttpRequest) {
    $http = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    try {
    $http = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e) {
    $http = new ActiveXObject('Microsoft.XMLHTTP');
    }
    }

    if ($http) {
    $http.onreadystatechange = function()
    {
    if (/4|^complete$/.test($http.readyState)) {
    document.getElementById('ReloadThis').innerHTML = $http.responseText;
    setTimeout(function(){$self();}, 5000); // 5 sec
    }
    };
    $http.open('GET', 'loadtxt.php' + '?' + new Date().getTime(), true);
    $http.send(null);
    }

    }
    </script>

    <script type="text/javascript">
    setTimeout(function() {Ajax();}, 5000); // 5 sec
    </script>

    <div id="ReloadThis">Default text</div> <!-- dit is je div waarin de status verschijnt -->

    Uitlezen van inhoud status.txt met loadtxt.php

    loadtxt.php

    <?php
    // uitlezen status.txt
    $file = "status.txt";
    $f = fopen($file, "r");
    while ( $line = fgets($f, 5000) ) { // 5 sec
    echo $line;
    }
    ?>

    En als laatste je bestand status.txt is dus gewoon leeg en wordt gevuld met de input die je levert met input_status.php

    Voorbeeld: geef zelf je status weer in: http://webprofis.nl/demo/vd/1/discussievoorbeelden/leh/input_status.php
    Lees direct de verandering in: http://webprofis.nl/demo/vd/1/discussievoorbeelden/leh/beschikbaarheid.html ( na 5 sec)

    Moet alleen nog ff stoeien ermee hoe ik de reload alleen laat plaatsvinden als de inhoud van status.tx is veranderd...
    Leh
  • LehLeh
    PMPosts: 11
    Nuet: Ik had vanmiddag tijd om er mee aan de slag te gaan en het werkt helemaal fantastisch (nadat ik in input_status.php fwrite veranderd had in ' fwrite'. Zo slim was niet ik maar mijn browser). Het liet zich perfect integreren in de site voor zo ver ik hem al af had en ik ben er blij mee.
    Ik ga nu zelf proberen nog een aanpassing te maken zodanig dat ik niet altijd mijn status hoef in toetsen maar dat ik ook standaard-statussen heb om aan te klikken.
    Denk je dat als er iedere x seconden gecheckt wordt of status.txt is gewijzigd dit dan een belasting kan betekenen voor de server van mijn host?

    Voor zover: alweer bedankt!!!!
  • PMPosts: 879
    aha, ja ik was zelf ook nog ff bezig geweest hiermee en wilde een selectbox maken voor je statussen aan te klikken.
    dit is nu de inhoud van input_status.php (selectbox ipv inputveld)

    <?php
    error_reporting(E_ALL);
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {

    $mijnstatus = $_POST['status'];
    $myfile = fopen('status.txt', 'w') or die('Kan status.txt niet openen!');

    $mijnstatus = $_POST['status'];

    if ($mijnstatus == 'beschikbaar') {
    $output = 'Beschikbaar';
    $txt = 'Status: ';
    $txt .= '<div class="beschikbaar">'.$output.'</div>';
    }
    elseif ($mijnstatus == 'bezet') {
    $output = 'Bezet';
    $txt = 'Status: ';
    $txt .= '<div class="bezet">'.$output.'</div>';
    }
    elseif ($mijnstatus == 'pauze') {
    $output = 'Pauze';
    $txt = 'Status: ';
    $txt .= '<div class="pauze">'.$output.'</div>';
    }


    fwrite($myfile, $txt);
    fclose($myfile);

    if(fwrite) {
    echo 'Staus veranderd in: <b>'.$output.'</b><br /><br />';
    }
    } // endif

    ?>

    <p>
    Wat is je status?
    <form name="form1" method="post" action="">
    <select name="status">
    <option value="">Selecteer...</option>
    <option value="beschikbaar">Beschikbaar</option>
    <option value="bezet">Bezet</option>
    <option value="pauze">Pauze</option>
    </select><br /><br />
    <input type="submit" name="submit" value="Verzenden" />
    </form>
    </p>

    en in beschikbaarheid.html heb ik wat style toegevoegd om wat te verfraaien:

    <style>

    .beschikbaar {
    font-size: 24px;
    font-weight: bold;
    color: green;
    }
    .bezet {
    font-size: 24px;
    font-weight: bold;
    color: red;
    }
    .pauze {
    font-size: 24px;
    font-weight: bold;
    color: orange;
    }

    </style>

    Misschien heb je er wat aan, hoef alleen maar je status aan te klikken met de selectbox
  • PMPosts: 879
    Leh schreef:: Denk je dat als er iedere x seconden gecheckt wordt of status.txt is gewijzigd dit dan een belasting kan betekenen voor de server van mijn host?
    Tja, iedere 5 sec is idd wel wat veel, zou je zeker terug kunnen zetten op iets wat jezelf aannemelijk vind om te checken. Maar die check op de .txt file kom je niet omheen. Wat wel nog mogelijk is, wat jezelf al aangaf, alleen ajax refresh als inhoud van .txt file is gewijzigd. Dus er moet een check plaatsvinden op de inhoud van the .txt file.
    Heb daar even op zitten googlen en lees dat je dat als volgt het beste kunt doen:
    De content van de .txt file zet je om in een hash en vervolgens doe je de check op die hash. Is de hash veranderd, dan ook weer AJAX de div laten refreshen.
    Moet zelf ook even gaan uitvogelen hoe dat gedaan moet worden...

  • 5 seconden is niet zoveel, uiteindelijk spreek je een bestandje aan van 0.05 kb of zo iets :D
    ikzelf zou het iets anders aanpakken.

    start een sessie en sla de inhoud van je txt bestand op in een php variable voor de index (of eender welke pagina) (waarom een txt bestand? omdat jullie het daarover hadden, ik zou gewoon iets uit de db doen)

    Spreek daarna het bestand aan waar Nuet het over had (maar met andere inhoud) via javascript, of mooier via een ajax request (voorbeeld werd al gegeven door Nuet!!) en zodra die variable veranderd t.o.v index (andere pagina) een redirect of eender wat...

    Zin om dit te maken, ja eigenlijk wel, maar de eersre week niet wegens teveel neven activiteiten ;-)
  • LehLeh
    bewerkt vr 27 feb 2015
    PMPosts: 11
    Aan de andere kant: het hele status.txt file'tje is 38 Bytes. Komt dus neer op 38 x 12=456 Bytes per minuut. Per jaar komt dat neer op 456 x 60 x 2( uur per dag) x 300 ( dagen per jaar) = 16.4 MBytes. Daar zal mijn host toch niet echt wakker van liggen!?
    Terwijl ik dit schrijf Zie ik de opmerking van vinTage binnenkomen...met dezelfde strekking.
  • bewerkt vr 27 feb 2015
    PMPosts: 879
    Ben aan de slag gegaan met de optie van @vinTage en heb dit nu ( zonder tekstbestand)

    De div waarin de reload plaatsvind:

    <script>
    function autoRefresh_div()
    {
    $("#ReloadThis").load("status.php", $("form").serialize());// laad content van status.php elke 5 sec
    }

    setInterval('autoRefresh_div()', 5000); // refresh div elke 5 sec
    </script>

    <div id="ReloadThis"></div>

    status.php

    <?php
    session_start();
    if(isset($_POST['status']))
    $_SESSION['status'] = $_POST['status'];

    if(!empty($_SESSION['status'])) {
    echo 'Status: '.$_SESSION['status'];
    }
    else
    echo "Status onbekend";
    ?>

    end de form om je status bij te werken:

    Wat is je status?
    <form method="post" action="status.php">
    <select name="status">
    <option value="">Selecteer...</option>
    <option value="beschikbaar">Beschikbaar</option>
    <option value="bezet">Bezet</option>
    <option value="pauze">Pauze</option>
    </select><br /><br />
    <input type="submit" name="submit" value="Verzenden" />
    </form>

  • bewerkt vr 27 feb 2015
    PMPosts: 415
    Dat werkt niet Nuet, dan zie je enkel de status die je zelf geset hebt.

    Wat ik bedoelde te zeggen is dat je in de sessie de beginwaarde van de status bijhoud.
    Zodra na een 'refresh' de waarde van de status niet meer overeen komt met de waarde in de sessie, weet je dat de bezoeker omgeleid kan/moet worden.

    Als je het een beetje deftig aanpakt, kun je zelfs een que maken, sla een timestamp op van het moment dat een bezoeker een gesprek wil (op de server en bij desbetreffende personen in een sessie).
    En stuur alleen de langst wachtende persoon een omleiding.
    Zo voorkom je tevens dat er twee (of meer) bezoekers gelijktijdig op die inbelpagina aankomen na een status update.
  • PMPosts: 879
    oke....ik snap nu je gedachtengang; dit werkt idd alleen als je zelf je status invoert
  • LehLeh
    PMPosts: 11
    Heb even van afstand toegekeken hoe het item zich ontwikkelde. De discussie ging ietwat over mijn hoofd heen.
    Ben nog steeds benieuwd naar nieuwe idee??n/ontwikkelingen/uitwerkingen van bestaande idee??n maar op dit moment werkt dat, wat tot nu toe door jullie voor mij is ontwikkeld, helemaal perfect. Een nette verbetering zou inderdaad nog zijn als de status.txt alleen uitgelezen en gedownload wordt als hij daadwerkelijk is veranderd. Niet vanwege de bytes die heen en weer gaan maar gewoon omdat het me een elegantere oplossing lijkt. Bovendien wordt mijn log erg onoverzichtelijk.
    Ik begrijp echter dat dat niet simpel is en zoals gezegd: voor nu werkt het.
    Ik heb bovendien veel geleerd dus: Dank,dank!

Login of Registreer om te reageren.