PHP + AJAX + MYSQL live result uit database
Ik heb even een vraagje. Ik ben compleet nieuw met AJAX en ik zal er ook zelf echt niet uit gaan komen.
Toch lijkt mijn vraag in mijn ogen aardig simpel.
Wat ik nodig heb is een live update wat er in de database staat. Vervolgens een knop die dit live aan kan passen.
Oftewel in de database:
Naam van colum: credits | Value van "credits" = 36
Op mijn (php) pagina dus: Huidig aantal credits: 36
Daaronder moet een button komen met ( in dit geval ): Verwijder 1 credit.
Zodra hier op geklikt word moet het getal (LIVE!) veranderen naar 35 en tevens een query uitvoeren.
Zoals ik al aangaf. Ik ben compleet nieuw met Ajax dus ik hoop dat iemand me verder kan helpen. Alvast mijn grote dank!
Regards,
Je kunt toch een link aan die button maken, waarmee je e.e.a. doorvoert en dan de pagina weer tonen?
Toevoeging op 24/02/2012 16:24:08:
@obelix je was me net voor! :P
Als je JQuery gebruikt dan is het bijzonder simpel door een call te maken naar een php pagina op je server middels functies als $.ajax of load(). Het laatste zal je denk ik niet nodig hebben, tenzij je het aantal credits dat er na de actie komt te staan uit de database wil hebben.
Dat is hem precies Erwin.
Het gebeurd allemaal live. Het is niet voor 1 persoon, dan is PHP inderdaad genoeg.
Het gaat over een aantal credits die voor elke gebruiker hetzelfde is. Deze moet live gezien worden. Dus ook als een ander -1 credit doet moeten alle andere gebruikers dit live zien.
Erwin, bedankt voor de load() e.d. maar daar weet ik helaas niks van af. Heb je misschien een handig tutorialtje? Mijn dank!
Toevoeging op 24/02/2012 17:01:41:
Waar het dus eigenlijk op neer komt is een live result uit de database. Zonder te refreshen een record laten zien ook als deze geupdate word door iemand anders terwijl jij de pagina NIET refresht moet het ge-update getal direct te zien zijn.
Allard Keij op 24/02/2012 16:31:37:
Deze moet live gezien worden. Dus ook als een ander -1 credit doet moeten alle andere gebruikers dit live zien.
Ben benieuwd hoe je dat wilt gaan doen zonder refresh.
yep zoals obelix zegt, er moet een refresh aan te pas komen
Het is mogelijk toch? Tenminste als ik een voorbeeld neem aan http://www.bidson.com/nl/ bijv. Daar bestaat het uit niks anders dan live updates.
Daar wordt volgens mij continu een refresh uitgevoerd.
Is er dan misschien een goede manier om het "on-op-vallend" te refreshen? Het gaat dus eigenlijk over 1 resultje.
Toevoeging op 24/02/2012 17:37:41:
Nevermind.. Ik denk dat ik het al heb.
Toevallig word de pagina waar de mysql query's + results gebeuren gebruikt dmv een include. Ik ga ook gewoon dat stukje refreshen na een submit dmv een location.
Mocht iemand toch nog goede oplossingen hebben hoor ik het nog altijd graag!
Bedankt!
Maar een simpele oplossing zou het volgende zijn.
Stel, je hebt een element op je pagina waarin dat totaal aantal staat:
server side maak je een simpel php script ("credits_pagina.php") dat alleen maar het totaal aantal credits ophaalt en uitspuugt:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
//haal totaal uit database, ik doe het nu even hardcoded
$totaal = 36;
//echo het totaal
echo $totaal;
?>
//haal totaal uit database, ik doe het nu even hardcoded
$totaal = 36;
//echo het totaal
echo $totaal;
?>
Dan hebben we alleen nog een klein client side scriptje nodig om elke minuut het totaal op te halen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$(document).ready(function(){
//bij start pagina, begin de loop om elke minuut het totaal op te halen
haal_totaal_op();
});
function haal_totaal_op(){
//laad het totaal vanaf de server direct in het span#totaal_credits
$("#totaal_credits").load("credits_pagina.php");
//set een timer om over een minuut het weer te doen
t = setTimeout("haal_totaal_op()",60000);
}
//bij start pagina, begin de loop om elke minuut het totaal op te halen
haal_totaal_op();
});
function haal_totaal_op(){
//laad het totaal vanaf de server direct in het span#totaal_credits
$("#totaal_credits").load("credits_pagina.php");
//set een timer om over een minuut het weer te doen
t = setTimeout("haal_totaal_op()",60000);
}
Dit werkt dus wel met JQuery dat je nodig zult moeten laden!!
Toevoeging op 24/02/2012 17:43:49:
Als je overigens ook een +1 of -1 wilt doen dan kan je bijna hetzelfde als hierboven gebruiken, alleen zou je dan de load url als volgt kunnen opmaken:
credits_pagina.php?credit=1
of
credits_pagina.php?credit=-1
en dan server side lees je eerst uit of er een credit parameter bestaat, zo ja dan doe je eerst een update op je database voor je het totaal ophaalt en uitspuugt.
Toevoeging op 24/02/2012 17:46:18:
Obelix en Idefix op 24/02/2012 16:23:07:
Waarom moet dat met AJAX?
Je kunt toch een link aan die button maken, waarmee je e.e.a. doorvoert en dan de pagina weer tonen?
Je kunt toch een link aan die button maken, waarmee je e.e.a. doorvoert en dan de pagina weer tonen?
Dit lijkt me het perfecte voorbeeld om Ajax te gebruiken. Ik erger me altijd wezenloos aan pagina's die voor het minste of geringste compleet refreshen. Voor alleen een plus of min wil ik niet op een pagina refresh wachten.
Gewijzigd op 24/02/2012 17:40:15 door Erwin H
Erg bedankt voor je oplossing!
Ik zal hier eens naar kijken. Ik ben idd geen fan van het refreshen. Vooral fijn als je server een keertje traag reageerd *sarcasm*.
Maar wat kan ik aan bandwidth verwachten met je scriptje @ 5.000 gebruikers per dag, 75.000+ "-1" tjes?
Thanks!
Gewijzigd op 24/02/2012 17:50:11 door Allard Keij
Erwin, moet je hoervoor niet setInterval gebruiken?
Die vraag heb ik eerder gezien en eerlijk gezegd kan ik er geen onderbouwd antwoord op geven. Ik gebruik bovenstaande in meerdere scripts en het werkt. Of het 100% juist is durf ik niet te zeggen. Misschien is setInterval ook goed, of beter.
Met kleine dingen als CSS aanpassen is dat nog wel te overzien, maar AJAX request kunnen wel eens langzaam gaan en dan hoopt het aantal functies op en je dat wil je niet.
Dus bij dingen die lang kunnen duren, als AJAX, kun je beter setTimeout gebruiken i.p.v. setInterval.
Zelfs ik ben niet te oud om te leren :P
Zoals hier boven gezegd, dus :)
In een nieuw topic vraag je om een live update, waarbij indien mogelijk het totaal elke seconde of milliseconde wordt geupdate. Uiteraard zou je in mijn bovenstaande oplossing de timer op 1 (milliseconde) kunnen zetten, maar dat zou ik echt afraden. Echter, ik kwam net wel langs een interessante pagina over streaming, waarbij je via een Ajax call de verbinding met de server continu in stand laat en op die manier mogelijk live updates kunt genereren. Ik heb er zelf nog niet mee gespeeld, maar misschien is dit een oplossing voor je vraag:
http://ajaxpatterns.org/HTTP_Streaming
Ik kijk nu even naar je link.
Alvast bedankt!
Allard Keij op 28/02/2012 10:14:21:
Kreeg een syntax error.
Dan moet je die oplossen....