setTimeout() - Een vertraging maken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
elseif ($p == 'wijzigennaam'){ // Als de pagina gelijk is aan wijzigennaam
if ($e < 25){ // Als het aantal diamanten lager is dan 25 (Deze optie kost 25 Diamanten op mijn spel)
echo 'Je hebt tekort Diamanten!'; // De echo
} // if afsluiten
elseif ($e > 24) { // Als het aantal diamanten groter is dan 24 (Dus 25 of hoger)
if(isset($_POST['Wijzigen'])){ // Controle of er op de submit knop is gedrukt
echo '<script type="text/javascript"> // en nu gaat het fout
var check = function(){
if(condition){
}
else {
setTimeout(check, 1000);
}
}
</script>';
$usp = $_POST['nieuwenaam'];
echo 'Processen uitvoeren... Even geduld...';
echo "<br>";
check(); // Ik wil hier een vertraging van 1 of 2 seconden
$duww = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='$uname'";
if(mysql_query($duww)){
echo "Er zijn 25 diamanten afgeschreven... Even geduld...";
echo "<br>";
}
check(); // En hier ook - Er moet pas later dit worden uitgevoerd en komen te staan
$duw = "UPDATE WD_USER_LOGIN SET user = '$usp' WHERE user='$uname'";
if(mysql_query($duw)){
echo 'De naam is veranderd... Even geduld...';
echo "<br>";
check(); // En hier opnieuw.
echo 'Je bent uitgelogd, wij leiden je door naar de login pagina...';
session_destroy();
header('Refresh: 3; url=');
echo "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
}
}
?>
Alles staat in het script beschreven. Ik wil dus dat na 1 of 2 seconden de volgende query moet worden uitgevoerd. Aangezien ik denk dat dit met Javascript moet gebeuren, post ik het in deze categorie.
elseif ($p == 'wijzigennaam'){ // Als de pagina gelijk is aan wijzigennaam
if ($e < 25){ // Als het aantal diamanten lager is dan 25 (Deze optie kost 25 Diamanten op mijn spel)
echo 'Je hebt tekort Diamanten!'; // De echo
} // if afsluiten
elseif ($e > 24) { // Als het aantal diamanten groter is dan 24 (Dus 25 of hoger)
if(isset($_POST['Wijzigen'])){ // Controle of er op de submit knop is gedrukt
echo '<script type="text/javascript"> // en nu gaat het fout
var check = function(){
if(condition){
}
else {
setTimeout(check, 1000);
}
}
</script>';
$usp = $_POST['nieuwenaam'];
echo 'Processen uitvoeren... Even geduld...';
echo "<br>";
check(); // Ik wil hier een vertraging van 1 of 2 seconden
$duww = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='$uname'";
if(mysql_query($duww)){
echo "Er zijn 25 diamanten afgeschreven... Even geduld...";
echo "<br>";
}
check(); // En hier ook - Er moet pas later dit worden uitgevoerd en komen te staan
$duw = "UPDATE WD_USER_LOGIN SET user = '$usp' WHERE user='$uname'";
if(mysql_query($duw)){
echo 'De naam is veranderd... Even geduld...';
echo "<br>";
check(); // En hier opnieuw.
echo 'Je bent uitgelogd, wij leiden je door naar de login pagina...';
session_destroy();
header('Refresh: 3; url=');
echo "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
}
}
?>
Alles staat in het script beschreven. Ik wil dus dat na 1 of 2 seconden de volgende query moet worden uitgevoerd. Aangezien ik denk dat dit met Javascript moet gebeuren, post ik het in deze categorie.
Waarom wil je het vertragen? Voor de eye-candy??
Verder doet deze code me denken aan de pan met spaghetti die ik vanavond gekookt heb, voordat het nog in de zakjes zaten.... ;-)
Gewijzigd op 22/09/2013 20:53:35 door - Ariën -
Als ik sleep(1); er tussenzet, laad mijn hele script gewoon die ene seconde langzamer, zonder dat de regels met komen te staan.
(Btw, smaakte de spaghetti?)
In mijn ogen is vertraging gewoon onnodig. Iedereen heeft ADSL of snel kabelinternet, waarbij downloads als een speer door het internetlijntje vliegen.....
Ondanks dat je het 'Niet echt een reden' vind, zou je me toch willen helpen?
Php is server side. Dus een vertraging in php is een vertraging van de server, wat dus resulteert in een langere laadtijd. Wat jij wilt is een vertraging in het renderen van de tekst in de browser. Dat moet met javascript. Waarschijnlijk is mootools/jQuery icm ajax de beste keuze.
Ik had dit geprobeerd, echter komt die regel er niet te staan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
if(isset($_POST['Wijzigen'])){
$usp = $_POST['nieuwenaam'];
echo 'Processen uitvoeren... Even geduld...';
echo "<br>";
echo '<script type="text/javascript">
var tmFunc = function(){ exec(); };
setTimeout(tmFunc, duration);
function exec(){';
$duww = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='$uname'";
if(mysql_query($duww)){
echo "Er zijn 25 diamanten afgeschreven... Even geduld...";
echo '}</script>';
echo "<br>";
}
$duw = "UPDATE WD_USER_LOGIN SET user = '$usp' WHERE user='$uname'";
if(mysql_query($duw)){
echo 'De naam is veranderd... Even geduld...';
echo "<br>";
echo 'Je bent uitgelogd, wij leiden je door naar de login pagina...';
session_destroy();
header('Refresh: 3; url=');
echo "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
}
}
?>
<form method="post" actio
if(isset($_POST['Wijzigen'])){
$usp = $_POST['nieuwenaam'];
echo 'Processen uitvoeren... Even geduld...';
echo "<br>";
echo '<script type="text/javascript">
var tmFunc = function(){ exec(); };
setTimeout(tmFunc, duration);
function exec(){';
$duww = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='$uname'";
if(mysql_query($duww)){
echo "Er zijn 25 diamanten afgeschreven... Even geduld...";
echo '}</script>';
echo "<br>";
}
$duw = "UPDATE WD_USER_LOGIN SET user = '$usp' WHERE user='$uname'";
if(mysql_query($duw)){
echo 'De naam is veranderd... Even geduld...';
echo "<br>";
echo 'Je bent uitgelogd, wij leiden je door naar de login pagina...';
session_destroy();
header('Refresh: 3; url=');
echo "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
}
}
?>
<form method="post" actio
Dat gaat niet werken. Eerst wordt de PHP door de server uitgevoerd, en daarna de Javascript door de browser.
Hoe moet ik het dan doen?
"Dat moet met javascript. Waarschijnlijk is mootools/jQuery icm ajax de beste keuze."
Wanneer moet er gewacht worden? 1 keer 3 seconden of meerdere keren ?
Kan je een tijdslijn tonen. Met de tekst die je op het scherm wil zien, en telkens hoe veel tijd je tussen elke lijn wil zien
Gewijzigd op 23/09/2013 10:39:53 door Kris Peeters
Als eerst moet de regel: 'Processen uitvoeren... Even geduld...' komen te staan, vanaf het begin. Één seconde later moet komen te staan (Eronder:) "Er zijn 25 diamanten afgeschreven... Even geduld...". Dan weer een seconde later, komt daaronder te staat: 'De naam is veranderd... Even geduld...'. En weer na 1 seconde komt er te staan: 'Je bent uitgelogd, wij leiden je door naar de login pagina...'.
Dus, ik ga uit van 1 Ajax call. Daarmee moet je maar alles regelen wat er op de server te regelen valt.
Waarschijnlijk wil je daar die andere query ook uitvoeren.
De messages worden gewoon met een setTimeout in de tijd verdeeld
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['ajax'])) {
$sql = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='" . mysql_real_escape_string($_POST['uname']) . "'";
if(mysql_query($sql)) {
echo 1;
exit;
}
}
?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
var messages = new Array(
'Processen uitvoeren... Even geduld...',
'Er zijn 25 diamanten afgeschreven... Even geduld...',
'De naam is veranderd... Even geduld...',
'Je bent uitgelogd, wij leiden je door naar de login pagina...'
);
var pointer = 0; // naald van de "plaat", die naar de juiste tekst wijst.
$('#set_user').on('submit', function(e) {
e.preventDefault(); // dit zorgt dat het formulier niet wordt verzonden op klassieke manier
var data = $(this).serialize(); // $(this) is hier het formulier. serialize zet de gegevens van het formulier om in een object
// Ajax verzoek starten
$.ajax({
url: 'index.php?ajax=1',
type: 'post',
data: data,
success: function(message) { // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd. 'message' is de respons van de server
setTimeout(showMessages, 1000);
}
});
// Na het Ajax-verzoek zetten we een berichtje
$('#messages').html(messages[0]);
pointer++;
});
// recursieve functie. Zolang er berichten in de playlist staan, wordt deze functie opnieuw getriggerd
function showMessages() {
$('#messages').append('<div>' + messages[pointer] + '</div>');
pointer++;
if (pointer < messages.length) {
setTimeout(showMessages, 1000);
}
}
});
</script>
<form id="set_user" action="" method="post">
<div><input name="uname" value="15"> uname </div>
<div><input name="nieuwenaam" placeholder="Nieuwe gebruikersnaam"></div>
<div><input type="submit" value="GO"></div>
</form>
<div id="messages"></div>
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['ajax'])) {
$sql = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='" . mysql_real_escape_string($_POST['uname']) . "'";
if(mysql_query($sql)) {
echo 1;
exit;
}
}
?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
var messages = new Array(
'Processen uitvoeren... Even geduld...',
'Er zijn 25 diamanten afgeschreven... Even geduld...',
'De naam is veranderd... Even geduld...',
'Je bent uitgelogd, wij leiden je door naar de login pagina...'
);
var pointer = 0; // naald van de "plaat", die naar de juiste tekst wijst.
$('#set_user').on('submit', function(e) {
e.preventDefault(); // dit zorgt dat het formulier niet wordt verzonden op klassieke manier
var data = $(this).serialize(); // $(this) is hier het formulier. serialize zet de gegevens van het formulier om in een object
// Ajax verzoek starten
$.ajax({
url: 'index.php?ajax=1',
type: 'post',
data: data,
success: function(message) { // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd. 'message' is de respons van de server
setTimeout(showMessages, 1000);
}
});
// Na het Ajax-verzoek zetten we een berichtje
$('#messages').html(messages[0]);
pointer++;
});
// recursieve functie. Zolang er berichten in de playlist staan, wordt deze functie opnieuw getriggerd
function showMessages() {
$('#messages').append('<div>' + messages[pointer] + '</div>');
pointer++;
if (pointer < messages.length) {
setTimeout(showMessages, 1000);
}
}
});
</script>
<form id="set_user" action="" method="post">
<div><input name="uname" value="15"> uname </div>
<div><input name="nieuwenaam" placeholder="Nieuwe gebruikersnaam"></div>
<div><input type="submit" value="GO"></div>
</form>
<div id="messages"></div>
Gewijzigd op 23/09/2013 17:07:59 door Kris Peeters
Bedankt voor de code. Ik heb zelf helemaal geen ervaring met Ajax en Javascript, daarom heb ik enkele vragen:
Wat doet: && isset($_GET['ajax']) ? (Regel 2)
Waarom echo je 1? (Regel 5)
Wat doet var pointer = 0; ? (Regel 19)
Wat betekenen de regels en wat moet ik hieraan veranderen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$.ajax({
url: 'index.php?ajax=1',
type: 'post',
data: data,
success: function(message) { // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd. 'message' is de respons van de server
setTimeout(showMessages, 1000);
url: 'index.php?ajax=1',
type: 'post',
data: data,
success: function(message) { // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd. 'message' is de respons van de server
setTimeout(showMessages, 1000);
Er komt bij mij nu 1 regel te staan, namelijk de eerste regel. Klopt dit?
Daarom is het altijd interessant om te beginnen met kleine voorbeelden.
Wie nog nooit twee bakstenen op mekaar heeft gezet, zal ook niet meteen begrijpen hoe je een kathedraal moet bouwen.
Daarom begint men altijd met een klein muurtje.
Frank Martens op 23/09/2013 19:26:07:
Wat betekenen de regels en wat moet ik hieraan veranderen: ...
$.ajax({ ...
$.ajax({ ...
Zoals je ongetwijfeld zelf kan raden, is dat het Ajax deel.
Dus, wat is Ajax?
Je vraagt javascript om contact te nemen met de server.
Dat gebeurt met een verzoek;
Dus, javascript gaat (achter de rug van de gebruiker) surfen naar een pagina op de server. Dus, bv. index.php?ajax=1
Daar, op de server, kan gelijk wat geregeld worden. Je kan daar de database aanpassen; ke kan dingen uploaden; je kan een feed aan berichten halen (bv. om de 10 seconden ga je nieuwe Twitter berichten halen).
Tijdens een Ajax verzoek kan je trouwens ook met de zelfde SESSION en COOKIES werken; je kan POST en GET verzoeken doen ...
Eens de server zijn ding heeft gedaan en een bericht terug stuurt, wordt bij javascript een functie getriggerd.
Namelijk die
success: function(data) {
}
-------
Frank Martens op 23/09/2013 19:26:07:
Wat doet: && isset($_GET['ajax']) ? (Regel 2)
Omdat je misschien nog iets anders van plan bent (met POST).
Ik regel alles op 1 bestand, zijnde index.php. GET-variabelen zijn een goed instrument om de code naar de juiste logische block te sturen.
Je kan dit even goed regelen op verschillende bestanden. bv. alles van Ajax regelen op "ajax.php".
Frank Martens op 23/09/2013 19:26:07:
Waarom echo je 1? (Regel 5)
1 is een symbool voor geslaagd / true.
Dit is een berichtje dat de server terug stuurt naar javascript. Ik doe daar voorlopig niets mee.
Je kan daar even goed andere dingen echo'en en die echo terug tonen ergens op het scherm.
Voorbeeldje: Probeer dit zeker eens uit
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
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['ajax'])) {
...
echo 'database aangepast voor: ' . htmlentities($_POST['uname']);
?>
...
success: function(message) { // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd. 'message' is de respons van de server
$('#messages2').html(message);
setTimeout(showMessages, 1000);
}
...
<div id="messages2"></div>
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['ajax'])) {
...
echo 'database aangepast voor: ' . htmlentities($_POST['uname']);
?>
...
success: function(message) { // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd. 'message' is de respons van de server
$('#messages2').html(message);
setTimeout(showMessages, 1000);
}
...
<div id="messages2"></div>
Gewijzigd op 24/09/2013 11:29:05 door Kris Peeters