PHP + AJAX + MYSQL live result uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Allard Keij

Allard Keij

24/02/2012 16:15:56
Quote Anchor link
Hallo!

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,
 
PHP hulp

PHP hulp

25/12/2024 05:33:57
 
Obelix Idefix

Obelix Idefix

24/02/2012 16:23:07
Quote Anchor link
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?
 
Reshad F

Reshad F

24/02/2012 16:23:37
Quote Anchor link
ehm dit kan toch ook met alleen php denk ik? knop maken die elke keer dezelfde query uitvoert dus credit - 1 of credit + 1 en de pagina refreshen nadat het gedaan is?

Toevoeging op 24/02/2012 16:24:08:

@obelix je was me net voor! :P
 
Erwin H

Erwin H

24/02/2012 16:24:47
Quote Anchor link
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.
 
Allard Keij

Allard Keij

24/02/2012 16:31:37
Quote Anchor link
Hallo,

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.
 
Obelix Idefix

Obelix Idefix

24/02/2012 17:13:15
Quote Anchor link
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.
 
Reshad F

Reshad F

24/02/2012 17:15:57
Quote Anchor link
yep zoals obelix zegt, er moet een refresh aan te pas komen
 
Allard Keij

Allard Keij

24/02/2012 17:16:35
Quote Anchor link
Ik dacht dat ze daarvoor AJAX hadden uitgevonden.

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.
 
Obelix Idefix

Obelix Idefix

24/02/2012 17:27:56
Quote Anchor link
Daar wordt volgens mij continu een refresh uitgevoerd.
 
Allard Keij

Allard Keij

24/02/2012 17:34:17
Quote Anchor link
Aha,

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!
 
Erwin H

Erwin H

24/02/2012 17:39:08
Quote Anchor link
Nee, je kan het makkelijk met Ajax calls doen. Alleen je moet je wel beseffen dat als je het echt live wilt hebben, je heel erg veel calls naar je server (en database) gaat maken, wat je server misschien niet leuk gaat vinden.

Maar een simpele oplossing zou het volgende zijn.

Stel, je hebt een element op je pagina waarin dat totaal aantal staat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<span id="totaal_credits">35</span>


server side maak je een simpel php script ("credits_pagina.php") dat alleen maar het totaal aantal credits ophaalt en uitspuugt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
//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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}

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?

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
 
Allard Keij

Allard Keij

24/02/2012 17:49:49
Quote Anchor link
Erwin,

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

24/02/2012 17:57:45
Quote Anchor link
Erwin, moet je hoervoor niet setInterval gebruiken?
 
Erwin H

Erwin H

24/02/2012 17:59:00
Quote Anchor link
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.
 
Wouter J

Wouter J

24/02/2012 18:02:08
Quote Anchor link
@Ger, nee. Het zal nu niet precies elke minuut de request ophalen, maar wel ong. Met setInterval loop je continue door. Dus precies na 1 minuut wordt de volgende opgehaald en na 1 min. weer en weer en weer.
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.
 
Erwin H

Erwin H

24/02/2012 18:07:21
Quote Anchor link
Hmm, nu je dat zegt Wouter, denk ik dat het dan nog wel te verbeteren is. Wat je nu zegt zou alleen gelden als de setTimeout in de callback gebeurt, dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
function haal_totaal_op(){
  //laad het totaal vanaf de server direct in het span#totaal_credits
  $("#totaal_credits").load("credits_pagina.php", function(){
    //set een timer om over een minuut het weer te doen
    t = setTimeout("haal_totaal_op()",60000);
  });  
}
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

24/02/2012 18:16:54
Quote Anchor link
Zelfs ik ben niet te oud om te leren :P
 
Kris Peeters

Kris Peeters

24/02/2012 19:39:16
Quote Anchor link
Ja, met zo'n soort message loops altijd de volgende oproep doen in de callback, op het moment dat je zeker weet dat de request is uitgevoerd.

Zoals hier boven gezegd, dus :)
 
Erwin H

Erwin H

28/02/2012 09:40:17
Quote Anchor link
@Allard
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
 
Allard Keij

Allard Keij

28/02/2012 10:14:21
Quote Anchor link
Erwin bedankt! Ik ga er nu even in kijken. P.s. De code die je in je vorige post hebt gezet wilde niet werken helaas. Kreeg een syntax error.

Ik kijk nu even naar je link.

Alvast bedankt!
 
Erwin H

Erwin H

28/02/2012 10:21:15
Quote Anchor link
Allard Keij op 28/02/2012 10:14:21:
Kreeg een syntax error.

Dan moet je die oplossen....
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.