Ben weer eens aan het knutselen met een eind jaren 90 site en kom een JS bugreport
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.
<?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);
?>
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?
- spring eerst je code eens fatsoenlijk in, dit is onleesbaar
- 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('[color=#ff0000]Location:[/color] 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.
De oplossing was nog al een puzzel maar is gevonden.
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.
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;
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;
Ow? Dus als jij in de sloot springt moet ik er maar achter aan springen?
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!
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.
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.