Door
Hans Zijlstra
op 30-10-2018 20:04
gewijzigd op 17-12-2019 10:17
9.275 views
Hallo allemaal,
ik ben bezig om een stempagina te maken voor een school zodat binnenkort ook digitaal gestemd kan worden. Ik heb hiervoor tutorials gelezen over sql en php. Vervolgens heb ik een login gezocht in php die ik ook heb gevonden. daarna een stemsysteem die ik ook heb gevonden wat prima is voor het doel waarvoor deze gebruikt moet worden.
Echter nu moeten ouders stemmen en kan dat niet vanaf dezelfde computer vanwege een cookie die gemaakt wordt. Ik heb getracht dit weg te laten maar ik blijf tegen het probleem aanlopen.
Daarnaast heb ik een S_SESSION('username') aangemaakt om deze te valideren om te kijken of deze user gestemd heeft of niet. Ik kan dit echter niet goed testen omdat ik de foutmelding steeds krijg dat ik heb gestemd. Ik heb nieuwe users in de database toegevoegd om het te testen maar die hebben allemaal al gestemd.
ook heb ik de cookie naar time() -3600 gezet zodat deze verwijderd werd maar niets hielp.
het doel is dus te controleren of de user die inlogt gestemd heeft en maar een keer kan stemmen.
ik ben nieuw hier dus ik hoop dat iemand mij de juiste richting op wil wijzen. ervaring met PHP etc is beginnend.
Thomas, ik had deze info gisteren om 18.56 ook al gepost. Helaas heb je dat toen niet gezien. Ik ben echter na jou opmerking verder gegaan met de user_info en ben net tot de volgende query gekomen waarmee het werkt.
$query = " UPDATE ".$SETTINGS["USERS"]." SET gestemd = gestemd+1 WHERE id={$_SESSION['user_info']['id']}";
Het hele idee van SQL-code eerst in een variabele stoppen ($query) in plaats van deze rechtstreeks voeren aan mysql(i)_query() is bedoeld om te kunnen zien welke query er uiteindelijk wordt uitgevoerd. Maak hier gebruik van (door $query weer te geven op je scherm) en controleer of alles in de goede vorm richting database gaat.
Tevens, ook zoals al eerder aangehaald, als het de bedoeling is dat er twéé (of X) queries daadwerkelijk worden uitgevoerd dan zullen er ook evenveel (X) aanroepen van mysql(i)_query() moeten zijn. Zoals gezegd, $query is simpelweg een "string" (een lap tekst). Deze doét verder niets van zichzelf.
er zullen twee query's uitgevoerd moeten worden als de stemknop wordt ingedrukt. maar omdat jullie schreven dat als er twee query's achter elkaar komen alleen de laatste wordt uitgevoerd.
Toch alleen als je maar 1x een aanroep van mysql(i)_query() doet...
Misschien wordt het op de volgende manier duidelijker:
<?php
$sql = 'xxx'; // <-- hier wordt een waarde toegekend aan de variabele $sql
mysql_query($sql); // <-- hier wordt een SQL-query - die in $sql is gedefinieerd - uitgevoerd
$sql = 'yyy'; // <-- hier overschrijf je de inhoud van $sql met een andere waarde
mysql_query($sql); // <-- hier wordt een tweede query uitgevoerd met de nieuwe waarde van $sql
?>
Niets weerhoudt je er trouwens ook van om simpelweg het volgende te doen:
$query = " UPDATE ".$SETTINGS["USERS"].", ".$SETTINGS["kandidaat"]." SET gestemd = gestemd+1, aantal = aantal+1 WHERE id={$_SESSION['user_info']['id']} AND kandidaten={$_POST['kandidaat']}";
alleen krijg ik weer een error
heinArray ( [kandidaat] => hein [stem] => stem ) request "Could not execute SQL query" UPDATE php_users_login, kandidaten SET gestemd = gestemd+1, aantal = aantal+1 WHERE id=2 AND kandidaten=hein: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'de Jong' at line 1
Dat heeft er niks mee te maken. De fout zit in het gebruik van de aanhalingstekens. Is het niet slim om eerst eens wat basis-beginselen van het programmeren te leren?
maar omdat ik exact dezelfde quoting gebruik bij beide queries en toch een fout krijg vraag ik mij af of het niet met Array ( [kandidaat] => hein [stem] => stem ) met stem te maken hebben?
heb nu bijna alle variaties quoting wel gehad maar de foutmelding blijft :-(