Auto Refresh

Status
Niet open voor verdere reacties.

RikXP

Gebruiker
Lid geworden
6 mrt 2009
Berichten
789
Beste helpers,

Ik wil graag als ik bijvoorbeeld een record toevoeg in de database, dit automatisch op de PHP pagina komt te staan. Ik wil dus niet dat ik handmatig de pagina moet vernieuwen, of de pagina om de x aantal seconden automatisch vernieuwd wordt. Alleen als er een actie in de database wordt gedaan.

Kan dit met PHP, of moet dit me AJAX of JS?

Alvast bedankt.
 
Laatst bewerkt:
Alles wat je wilt doen zonder dat je een pagina refresh gaat via Javascript.

Als je het via een AJAX-call laat invoeren in de database kun je via een callback vanaf de AJAX-call (Dat de insert gelukt is of niet) de formulier-waardes gebruiken om een HTML-element te vullen.
 
Oke, en hoe doe ik dat? Werkt dat ook als ik in PHPMyAdmin wat invoer, dat het in de pagina (bijv. test.php) zonder refresh weergegeven wordt?
 
zo als jij het wilt,
Dan moet je een session aanmaken waar je de aantal record in de table in opslaat.
via een ajax-call laat je testen of de aantal records in de table anders is dan het aantal die je hebt opgeslagen.
Als er een verandering is, dan doe je een pagina refresh en anders gebeurt er nix
 
en hoe doe ik dat dan precies? Met php moet het wel lukken, maar ik ben niet echt thuis in ajax. is er misschien een goed voorbeeld ergens?
 
Ik zou met Jquery gaan werken,
Als je door deze video tuts werk, dan kom je ook de werking van ajax tegen.
VIDEO TUTS
Het is alleen wel in het engels. Ik geloof dat in deel 3 of 4 ajax aanbod komt.
 
Bedankt voor de video's! Maar in jQuery ben ik wel aardig thuis.
De video biedt een goed voorbeeld van ajax, maar er staat niet beschreven hoe een row dat je in phpmyadmin toevoegt, automatisch zonder browser-refresh in je test.php verschijnt.
 
met de ajax voer je een php script uit, dat returnd een true or false.(ik weet niet hoe het zal reageren als je op die pagina een header("location index.php") zou uitvoeren)
Aan de hand daarvan laat je in javascript :location.reload(true) uitvoeren.
Of met jquery laat je een element opnieuw vullen.
 
Laatst bewerkt:
Dat snap ik. Maar dat werkt alleen als ik in test.php via een inputfield een row toevoeg in de database. Maar nu wil ik dat er een row zichtbaar wordt in test.php als ik een row toevoeg in phpmyadmin. Ik voer dus geen actie uit in test.php maar toch moet test.php een soort signaal krijgen als er een row in de database in ingevoerd.
 
dat gaat je niet lukken met php.
Php zal geen trigger uitdoen naar browsers, ook een database zal dat niet doen.
Daarom zal je in de browser, via een timer, een check laten doen via een countRows.php.
Het werkt in principe net als een chatbox.
 
Inderdaad, even op zoek naar de implementatie van setInterval() en clearInterval() ;)
Daar vervolgens de jQuery-functie load() in gebruiken om een bepaalde pagina op te vragen waarop de resultaten op staan.

Maar goed, is het functioneel? Hoe vaak zet je iets in de database en is het dan de moeite waard om daarvoor elke x seconden een AJAX-call te doen?
 
Vraag ik me ook af, in een chatroom okey, maar verder weet ik zo geen nu ervoor.
Maar als hij het nodig acht, willen we hem wel op weg helpen, toch!
 
Bedankt voor jullie hulp! Dus het is mogelijk om via een Setinterval continu een aanroep te doen naar bijv. Db_connect.php (het bestand dat de rows uit de database laadt). Daar kan ik wel wat mee denk ik!:thumb:

Bedankt voor jullie hulp!:thumb: ik ga het proberen.
 
Het is gelukt! Ik zal de vraag op opgelost zetten!
 
Als je het doet raad ik je aan om een super licht script te maken, want anders trek je met 10 bezoekers die je pagina op de achtergrond open hebben staan je webserver onderuit.

Het beste kun je bij elke inschrijf van de database een random value schrijven naar een platte tekst file, en je callback vanuit je browser laten kijken of de waarde van die file overeen komt met de vorige waarde die uitgelezen is, en zo nee, dán pas een database call te doen voor nieuwe info.

Dat bespaart je enorm veel database verbindingen en queries en andere complexe script onderdelen en maakt je website een stuk efficienter.
 
@Frats, Maar hij geeft aan dat het ook moet werken als hij via mysqladmin gegevens invoer.
en dan wordt er toch nix naar een txt file geschreven.
Maar is een call voor een row count dat zo zwaar? en voor de refresh, die query word hoe dan toch uitgevoerd.
 
Bedankt voor jullie opmerkzaamheid. Ik zat ook een beetje te denken dat al die calls naar mysql wel net eens teveel zou kunnen zijn.

Ik zou zoals Frats al zei, idd wel een random file kunnen maken. Heeft iemand een script, of een goed trefwoord voor google?
 
Ik denk dat je in phpMyAdmin ook wel hooks kunt maken... zo niet dan zou ik overwegen om (als je meer dan een tiental gebruikers hebt) toch maar een eigen invoerscherm te maken.

Een call count voor rows opzich, is niet zwaar. Maar als de site bij 100 bezoekers open staat, die elke 10 seconden dat ding aanroepen, dan gaat dat hard optellen. Dan kun je problemen beter voor zijn en het gelijk goed doet.

Is ook goede oefening voor als je op wat grotere projecten gaat :P

Een random file maken is niet zo moeilijk:

PHP:
file_put_contents( 'file.txt', md5( rand() ) );

De truc is om bij het laden van de pagina die file in te lezen en de inhoud ergens in een hidden field weg te schrijven zodat je wat hebt om bij latere reads tegen te vergelijken. Als je merkt dat het niet hetzelfde is, dan overschrijf je de oude value, en daarna haal je de nieuwe data op (of je doet een page refresh)
 
Oke. Ik heb even zitten puzzelen, en dan zou ik dus zioets moeten doen:

PHP:
if(file_get_contents('rand.txt') == $_POST['hiddenfield']) {
    file_put_contents('rand.txt', md5(rand()));
}

Maar hij kan alleen maar de rand.txt checken bij het aanroepen van de pagina.
Dus ik moet altijd de pagina refreshen als ik de rand value wil checken.
 
Laatst bewerkt:
Je moet een AJAX call maken die via php de file inleest (of het zelf doet, nog makkelijker) en ze dan vergelijken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan