PHP + AJAX + MYSQL live result uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Allard Keij

Allard Keij

28/02/2012 10:30:00
Quote Anchor link
Ja precies dat zou verstandig zijn al deed ik dat ;-)! Probleem is dat ik er niet uitkom. Ik heb geen verstand van dit stukje code dus weet zo niet precies hoe dit op te lossen valt.. De error:

Parse error: syntax error, unexpected '(', expecting T_VARIABLE or '$' on line (4 in de code hieronder)

De error begrijp ik wel, maar de oplossing niet, ik kan niet zomaar $tjes e.d. erin gaan gooien als ik niet weet waar ik mee aan het spelen ben.

Code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function haal_totaal_op(){
  //laad het totaal vanaf de server direct in het span#totaal_credits
  $("#totaal_credits").load("amount.php", function(){
    //set een timer om over een minuut het weer te doen
    t = setTimeout("haal_totaal_op()",5000);
  });  
}

?>
Gewijzigd op 28/02/2012 10:33:36 door Allard Keij
 
PHP hulp

PHP hulp

23/11/2024 17:25:19
 
Erwin H

Erwin H

28/02/2012 11:10:22
Quote Anchor link
Uhm, dit is een stuk javascript (of beter, JQuery), geen php, dat had je wel al door?
 
Allard Keij

Allard Keij

28/02/2012 11:31:57
Quote Anchor link
Tuurlijk had ik dat door! * kruipt heel erg ver weg in een donker hoekje om zich te verschuilen *

Thnx, Anyways, ook met een <script> tag doet hij het ook niet.

Kan natuurlijk weer aan mij liggen..

Wat ik nu doe is:
<script>
function haal_totaal_op(){
//laad het totaal vanaf de server direct in het span#totaal_credits
$("#totaal_credits").load("amount.php", function(){
//set een timer om over een minuut het weer te doen
t = setTimeout("haal_totaal_op()",1000);
});
}
</script>

In amount.php staat op het moment even: Test

Vervolgens in mijn code zet ik <div id="totaal_credits"></div>

Vervolgens doet het script niks. Geen errors maar ook geen "Test".

echo 'Chances left'.$amount.'';

Toch moet ik er bij vermelden dat ik een stukje code zoals dit ook ergens gevonden had die inderdaad deze functie deed en amount.php elke 5 seconde uitlas. Nu was het probleem dat ik het niet voor elkaar kreeg om ''.$amount.'' ook functioneel te laten zijn. $amount had ik in dat geval dus in de amount.php gezet, het probleem is dus waarschijnlijk dat hij die pagina wel leest maar NIET verwerkt waar de div staat. De oplossing zou in dat geval zijn om het gehele script in amount.php uit te laten voeren maar dan krijg je weer het feit dat het alsnog zo ongeveer de gehele pagina refreshd.

$amount zit momenteel in een "while" vervolgens een echo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
 [code]<?php
    $sql
="SELECT * FROM products WHERE prodclass = '$prodclass'";
    $result=mysql_query($sql);
                                ?>
            
      <?
        while($show = mysql_fetch_array($result))
         {

?>
Gewijzigd op 28/02/2012 11:34:35 door Allard Keij
 
Erwin H

Erwin H

28/02/2012 11:48:46
Quote Anchor link
Omdat je dit stukje javascript bent vergeten mee te nemen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$(document).ready(function(){
  //bij start pagina, begin de loop om elke minuut het totaal op te halen
  haal_totaal_op();
});

Dit is de trigger om de loop te starten die elke minuut de data ophaalt van de server.
 
Reshad F

Reshad F

28/02/2012 11:57:15
Quote Anchor link
aanvulling op erwin, of je zet je jquery stukje net voor je </body> tag dan hoef je geen document.ready te gebruiken :)

@erwin moet hij die functie niet ook in een (function... )(); zetten zodat deze automatisch al gaat werken?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/02/2012 12:03:38
Quote Anchor link
Allard, welke gegevens haal je op met de SQL, lijk mij dat je dit misschien ook wel met een SUM() af kan.

Toevoeging op 28/02/2012 12:07:28:

@reshadd, vaak worden fucties in js-jquery in een apart bestandje gezet. Vandaar de document.ready. Dit roept de functie haal_totaal_op aan die telkens zichzelf weer aanroept.
 
Erwin H

Erwin H

28/02/2012 12:13:10
Quote Anchor link
@Ger en @Reshadd
Inderdaad, je kan het in je HTML voegen, maar ik kies er altijd voor alles apart te houden. Dus geen styling in mijn HTML document en geen (of zo min mogelijk in elk geval) javascript in mijn HTML document. En in een apart document heb je die document ready altijd nodig.

Verder moet ik eerlijk toegeven dat ik me nog nooit zo in closures heb verdiept en het daarom ook niet ga aanbevelen. Als jij het wel weet mag je een goed werkend voorbeeld geven, ik waag me daar niet aan.
 
Wouter J

Wouter J

28/02/2012 12:17:39
Quote Anchor link
Erwin H:
En in een apart document heb je die document ready altijd nodig.

Dit is niet zo. Als je het document vlak voor </body> 'included' dan heb je het niet nodig. Zeg maar zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<!doctype html>
<meta charset=utf-8>
<title>Hello World</title>
<body>
<!-- document -->

<script src="assets/js/scripts.min.js"></script>
</body>


Ger van Steenderen:
vaak worden fucties in js-jquery in een apart bestandje gezet. Vandaar de document.ready.

Als je hier doelt op jQuery plugins, deze worden vaak in een anonymous self-executing function gezet.
 
Reshad F

Reshad F

28/02/2012 12:21:30
Quote Anchor link
ik heb via een tutorial die ik gevolgd heb ( learn jQuery in 30 days ) geleerd dat als je die functie ook tussen haakjes zet dat deze runt wanneer de pagina volledig geladen is. dus je hoeft niet ergens op te klikken o.i.d.

voorbeeld stukje code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
  (function()    {  
      $('dd').filter(':nth-child(n+4)').addClass('hide');

      $('dl').on('mouseenter', 'dt', function()    {
          $(this)
              .next()
                  .slideDown(200)
                  .siblings('dd')
                      .slideUp(200);
      });
  })();

</script>
 
Erwin H

Erwin H

28/02/2012 12:22:23
Quote Anchor link
Wouter J op 28/02/2012 12:17:39:
Dit is niet zo. Als je het document vlak voor </body> 'included' dan heb je het niet nodig. Zeg maar zo:

Ok, maar ook wat mij betreft is ook dat iets wat ik niet wil hebben. Dan heb ik alsnog script tags in mijn body wat ik niet wil. Persoonlijke keuze inderdaad.
 
Reshad F

Reshad F

28/02/2012 12:25:05
Quote Anchor link
je hebt helemaal gelijk erwin, jou manier is wel een stuk netter maar het is net wat je voorkeur is.

ik doe het liever op dezelfde pagina omdat ik dan geen document.ready hoef te gebruiken en alles op een pagina heb.
 
Allard Keij

Allard Keij

28/02/2012 12:28:01
Quote Anchor link
Hallo, bedankt voor alle actieve reacties weer!

Ik heb het even geprobeerd met het stukje erbij wat ik vergeten was. Done, but with errors.. Alsnog geen werkend script..

Ik dacht misschien even jQuery loaden.
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

Geen succes helaas.

<script>
$(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("amount.php");

//set een timer om over een minuut het weer te doen
t = setTimeout("haal_totaal_op()",5000);
}
</script>
<div id="totaal_credits"></div>

amount.php: Test

Error:
Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Timestamp: Tue, 28 Feb 2012 11:30:05 UTC


Message: Object expected
Line: 49
Char: 1
Code: 0
Gewijzigd op 28/02/2012 12:30:48 door Allard Keij
 
Reshad F

Reshad F

28/02/2012 12:32:36
Quote Anchor link
heb je al zoiets geprobeerd? gebruik a.u.b. code tags overigens :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
<script>
 $(document).ready(function() {
      $("#responsecontainer").load("response.php");
   var refreshId = setInterval(function() {
      $("#responsecontainer").load('response.php?randval='+ Math.random());
   }, 9000);
   $.ajaxSetup({ cache: false });
});
</script>
</head>
<body>
 
<div id="responsecontainer">
</div>
</body>
Gewijzigd op 28/02/2012 12:34:29 door Reshad F
 
Erwin H

Erwin H

28/02/2012 12:38:08
Quote Anchor link
Die error op deze manier kan ik weinig mee helaas....
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/02/2012 12:49:29
Quote Anchor link
t = setTimeout("haal_totaal_op()",5000);
Moeten die quotes niet weg?
 
Erwin H

Erwin H

28/02/2012 12:58:54
Quote Anchor link
Als ik dat doe bij mijn scripts werkt het niet meer, anderen zeggen juist weer van wel....
 
Allard Keij

Allard Keij

28/02/2012 18:53:56
Quote Anchor link
Grrr.. Doet het met en zonder quotes niet. Kom er echt niet meer uit helaas :(.

Als ik de code boven de body zet dan krijg ik geen errors, maar ook geen result.. Ik blijf nog even spelen.
Gewijzigd op 28/02/2012 18:55:38 door Allard Keij
 
Erwin H

Erwin H

28/02/2012 19:06:33
Quote Anchor link
Plaats dan weer eens je hele code, misschien dat wij er een fout in kunnen vinden.
 
Allard Keij

Allard Keij

28/02/2012 19:12:01
Quote Anchor link
Hallo allemaal,

Het is helemaal gelukt zoals ik wilde! Ik zal hieronder de code zetten voor mensen die met dezelfde vraag zitten en toevallig op dit toppic uitkomen.

Mijn laatste vraag is nog wel, kan ik met dit onderstaande script een mega bandwidth verwachten of valt dit wel mee? Er kunnen tot wel 10 producten op 1 pagina staan die allemaal de amount.php laden en om de 500 miliseconde refreshen.

Nogmaals allemaal hartelijk bedankt!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
var auto_refresh = setInterval(
function()
{
$('#<?echo"$productid";?>').load('amount.php?pid=<?echo"$productid";?>');
}, 500);
</script>

Toevoeging: Het # is een div die je vervolgens in de code moet zetten, deze div's heb ik tevens mijn $productid gemaakt omdat ik meerdere keren dit script op 1 pagina wilde laten draaien, dit is de oplossing.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo"<div id=\"$productid\"></div></font> <br>";

Toevoeging: In dit geval is de div een echo, dit werk natuurlijk ook zonder echo. Daarbij omdat ik in het javascript div's de productnummers liet zijn worden nu die div's dus 1 voor 1 opgebouwd ( aangezien het in een while gebeurd )

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$prodid
= $_GET['pid'];

$sql = "SELECT * FROM `products` WHERE `id` = '$prodid'";

$result = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_array($result)){

 $cost = $row['cost'];
 $sold = $row['sold'];
 
 $total = $cost - $sold;
 
 
 echo "$total / <font color=\"blue\" size=\"5\">$cost</font>";

}
  

?>

Hier haal ik mijn getal op. Dit is amount.php. Deze pagina inhoud word dus elke 500 MS opgehaald en ververst.

Met een beetje spelen is het me helemaal gelukt zoals ik wou.

Ik heb wel de jQuery scripts in de header gezet. Of dit noodzakelijk is weet ik niet zeker maar ik heb ze er toch in. Oftewel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="http://code.jquery.com/jquery-latest.js"></script>
Gewijzigd op 29/02/2012 14:52:22 door Allard Keij
 

Pagina: « vorige 1 2



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.