Tijdens while loop veldwaarden vergelijken uitlog script
onder Firefox tegen waardoor het geheel aangepast moest worden. Het is een uitlog
script onder php & jquery ajax. Het eerste deel werkt nu, het tweede deel niet.
Het tweede gedeelte & punt waar het om draait.
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
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
<?php
session_start();
include("conn.php");
$id = $_SESSION['id'];
$sql = "SELECT id, servtijd, speltijd, nickname FROM spelers";
if($result = mysqli_query($link, $sql)) {
while($rij = mysqli_fetch_array($result)) {
$servje = $rij['servtijd']; //ijkveld
$spelje = $rij['speltijd']; //controleveld
//Controle of velden gelijk zijn, zo nee uitloggen via query
if ($servje > $spelje) { //Heb zo het idee dat dit een blunder is
$query="UPDATE spelers SET saw = '-',room = '-',enz='..' WHERE id ='$id'";
if(mysqli_query($link, $query)){
header("uitlog.html");
}else {
echo "foutje3" . mysqli_error($link);
}
}
}
mysqli_free_result($result);
}
mysqli_close($link);
?>
session_start();
include("conn.php");
$id = $_SESSION['id'];
$sql = "SELECT id, servtijd, speltijd, nickname FROM spelers";
if($result = mysqli_query($link, $sql)) {
while($rij = mysqli_fetch_array($result)) {
$servje = $rij['servtijd']; //ijkveld
$spelje = $rij['speltijd']; //controleveld
//Controle of velden gelijk zijn, zo nee uitloggen via query
if ($servje > $spelje) { //Heb zo het idee dat dit een blunder is
$query="UPDATE spelers SET saw = '-',room = '-',enz='..' WHERE id ='$id'";
if(mysqli_query($link, $query)){
header("uitlog.html");
}else {
echo "foutje3" . mysqli_error($link);
}
}
}
mysqli_free_result($result);
}
mysqli_close($link);
?>
Werkt het geheel niet vanwege het gegeven dat je in een while lus met meerdere rijen
werkt? In dat geval zou het logsch zijn. In welke richting moet je de oplossing dan
zoeken?
- zouden deze queries niet in een transactie moeten staan?
- controleer welke queries uitgevoerd worden
- wat bedoel je in hemelsnaam met "werkt geheel niet": wat verwacht je wat deze code doet, en wat is het (ongewenste) resultaat?
- je header is fout; waarschijnlijk bedoel je header('Location: uitlog.html');
- daarnaast kan de UPDATE query meerdere keren worden uitgevoerd omdat header('Location: ...') je niet direct automagisch transporteert naar de nieuwe locatie, dit gebeurt pas aan het einde van het script
Ga voor jezelf eerst na wat dit script zou moeten doen, en ga dan pas dingen aanpassen.
Je hebt gelijk. Zal het geheel eerst wat fatsoeneren & het hele verhaal hier neerzetten. Is dat mogelijk?
Thomas van den Heuvel op 26/03/2016 14:30:25:
- daarnaast kan de UPDATE query meerdere keren worden uitgevoerd omdat header('Location: ...') je niet direct automagisch transporteert naar de nieuwe locatie, dit gebeurt pas aan het einde van het script
Hetgeen eenvoudig op te lossen is door er een exit; achter te zetten.
Frank Nietbelangrijk op 26/03/2016 16:36:17:
Hetgeen eenvoudig op te lossen is door er een exit; achter te zetten.
Dat zou ik pas doen als duidelijk is wat het script zou moeten doen. Mogelijk wil je die header (met exit) pas na de while-loop aanroepen.
Na een eerdere post is het geheel gefatsoeneerd en aangepast en heb wat aangereikte ideetjes
uitgeprobeerd zoals een mysqli_multi_query of transaction. In combinatie met een session gaat
dit geheid een keer mis, sessie valt een keer weg, gevolg een empty_string en lege velden in
een tabel. Dit is niet tegen te gaan maar het abstractie niveau stijgt ineens want er spelen
nog meer problemen. In hetzelfde script blokkeert het verhaal en met 1 veld is er geen kader
ter referentie op te zetten. Dus je zult twee velden aan moeten maken in een tabel,de eerste
als ijkwaarde genaamd servtijd en de tweede als controlewaarde genaamd speltijd.
De opzet zoals hij nu is werkt, heb eerst de reset van beide velden in elkaar geknutseld, het
ding heet tijd0.php, volgens het bottom-up systeem opgebouwd vanwege het abstracte en om de
daarop volgende problemen tegen te gaan. De opbouw kan daarom nogal vreemd overkomen.
De opbouw is nu tijd1 -> redirect tijd0.php(reset) of tijd2.php ->(uitloggen) komt.
Dit is tijd1.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
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
<?php
session_start();
include("cnnc.php");
$id = $_SESSION['id'];
$sql = "SELECT MAX(servtijd) FROM spelers";
if($result = mysqli_query($link, $sql)) {
while($rij = mysqli_fetch_array($result)) {
$klok = $rij['MAX(servtijd)'];
}
mysqli_free_result($result);
} else {
echo "Oeps1:\n" . mysqli_error($link);
}
if($klok >= 9999) {
header("location:tijd0.php");
} else {
$query = "UPDATE spelers SET servtijd = '$klok', speltijd = '$klok' WHERE id = $id'";
if(!mysqli_query($link, $query)) {
echo "Oeps2:\n" . mysqli_error($link);
}
$doei1 = $klok-1;
$sql = "SELECT servtijd, speltijd FROM spelers WHERE speltijd = 'doei1' AND status = 'online'";
if(mysqli_query($link, $sql)) {
$_SESSION['klok'] = $klok;
header("location:tijd2.php");
} else {
echo "Oeps3:\n" . mysqli_error($link);
}
}
?>
session_start();
include("cnnc.php");
$id = $_SESSION['id'];
$sql = "SELECT MAX(servtijd) FROM spelers";
if($result = mysqli_query($link, $sql)) {
while($rij = mysqli_fetch_array($result)) {
$klok = $rij['MAX(servtijd)'];
}
mysqli_free_result($result);
} else {
echo "Oeps1:\n" . mysqli_error($link);
}
if($klok >= 9999) {
header("location:tijd0.php");
} else {
$query = "UPDATE spelers SET servtijd = '$klok', speltijd = '$klok' WHERE id = $id'";
if(!mysqli_query($link, $query)) {
echo "Oeps2:\n" . mysqli_error($link);
}
$doei1 = $klok-1;
$sql = "SELECT servtijd, speltijd FROM spelers WHERE speltijd = 'doei1' AND status = 'online'";
if(mysqli_query($link, $sql)) {
$_SESSION['klok'] = $klok;
header("location:tijd2.php");
} else {
echo "Oeps3:\n" . mysqli_error($link);
}
}
?>
Als de klok zijn max heeft behaald redirecten naar tijd0.php, beide velden resetten naar 0 en
terugverwijzen naar tijd1.php waardoor er automagisch een loop of lus ontstaat. Tijd0.php;
Code (php)
Is de maxtijd niet behaald maar zit er wel verschil tussen de ijk en controlewaarde dan door
sturen middels een redirect naar tijd2.php, de moeilijkheid is hier het moment van inloggen
onder een client & de daarbij behorende variabelen; client reageert niet meer of is de netwerk
verbinding is traag? Dit is de reden van een $doei2 als maximale grens....Tijd2.php;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
session_start();
include("cnnc.php");
}
$klok = $_SESSION['klok'];
$doei2 = $klok-5;
$query = "UPDATE spelers SET servtijd='0', speltijd='0', room='none', saw='-',status='offline',
type='0', gstat='0' WHERE speltijd='$doei2'";
if(!mysqli_query($link, $query)) {
echo "Oeps4:\n" . mysqli_error();
}
mysqli_close($link);
?>
session_start();
include("cnnc.php");
}
$klok = $_SESSION['klok'];
$doei2 = $klok-5;
$query = "UPDATE spelers SET servtijd='0', speltijd='0', room='none', saw='-',status='offline',
type='0', gstat='0' WHERE speltijd='$doei2'";
if(!mysqli_query($link, $query)) {
echo "Oeps4:\n" . mysqli_error();
}
mysqli_close($link);
?>
Hoe spreek je je dit verhaal onder Jquery - ajax aan?
Thomas van den Heuvel op 26/03/2016 14:30:25:
- spring eerst je code eens fatsoenlijk in, dit is onleesbaar
En je springt nog steeds niet in
Wie denk jij nu wel niet dat je bent? Zolang als het werkt, werkt het & ik laat me door jou echt niet de les lezen!
Gewijzigd op 08/04/2016 12:52:31 door Yoop Overmaat
Yoop, als je fatsoenlijke antwoorden wil krijgen is medewerking van jouw kant wel belangrijk. Als je gevraagd wordt je onleesbare brei om te zetten naar iets leesbaars zodat je geholpen kan worden hoef je niet zo extreem te reageren. Daarnaast zul je zelf een hoop fouten al kunnen herkennen als je netjes inspringt.
Ben van Velzen op 08/04/2016 13:30:50:
Als je gevraagd wordt je onleesbare brei om te zetten naar iets leesbaars zodat je geholpen kan worden
Yoop, kijk eens in de documentatie van je editor. Hier zijn functies voor.
Yoop Overmaat op 08/04/2016 12:49:52:
Zolang als het werkt, werkt het & ik laat me door jou echt niet de les lezen!
Maar blijkbaar moet je toch 'de les lezen' want het werkt niet..
Je mag er ook op rekenen dat mensen die je helpen verstand hebben van zaken en praktische tips hebben.
Ik heb mijn onleesbare brij naar een leesbaar en werkend iets omgezet op aangeven van de aanwezigen op dit forum, dus?
Heb alleen de oplossing voor het verhaal hier neergezet zodat mocht er iemand hetzelfde probleem tegenkomen hij/zij niet
opnieuw het wiel uit hoeft te vinden.
@Randy vsf
Editor? Daar heb ik me nog nooit aan gewaagd. Ik programmeer source from scratch op een nano onder Linux, het /var/apache/error-log is mijn kompas in deze.
Toevoeging op 08/04/2016 15:09:00:
Doe me een lol en lees nu eens de vraag aan het einde van het verhaal, hoe spreek je dit aan onder een jquery - ajax?
Heb er zelf ook een handje van, lees te snel en plemp maar iets.....
Ik heb even je code omgetoverd tot leesbare code, dit zal de medemensen op dit forum ook helpen..
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
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
<?php
session_start();
include "conn.php";
$id = $_SESSION['id'];
$sql = "SELECT id, servtijd, speltijd, nickname FROM spelers";
if ($result = mysqli_query($link, $sql)) {
while ($rij = mysqli_fetch_array($result)) {
$servje = $rij['servtijd']; //ijkveld
$spelje = $rij['speltijd']; //controleveld
// Controle of velden gelijk zijn, zo nee uitloggen via query
if ($servje > $spelje) { // Heb zo het idee dat dit een blunder is
$query = "UPDATE spelers SET saw = '-', room = '-', enz='..' WHERE id ='" . $id . "'";
if (mysqli_query($link, $query)) {
header("uitlog.html");
} else {
echo "foutje3 " . mysqli_error($link);
}
}
}
mysqli_free_result($result);
}
mysqli_close($link);
?>
session_start();
include "conn.php";
$id = $_SESSION['id'];
$sql = "SELECT id, servtijd, speltijd, nickname FROM spelers";
if ($result = mysqli_query($link, $sql)) {
while ($rij = mysqli_fetch_array($result)) {
$servje = $rij['servtijd']; //ijkveld
$spelje = $rij['speltijd']; //controleveld
// Controle of velden gelijk zijn, zo nee uitloggen via query
if ($servje > $spelje) { // Heb zo het idee dat dit een blunder is
$query = "UPDATE spelers SET saw = '-', room = '-', enz='..' WHERE id ='" . $id . "'";
if (mysqli_query($link, $query)) {
header("uitlog.html");
} else {
echo "foutje3 " . mysqli_error($link);
}
}
}
mysqli_free_result($result);
}
mysqli_close($link);
?>
Verder denk ik dat je in je eerste query het id uit de session mee moet geven en niet een while-loop moet gebruiken, zodat je één rij krijgt.
Gewijzigd op 09/04/2016 12:44:39 door Marthijn Buijs