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.

dank alvast
Ben van Velzen op 15/11/2018 02:03:24

Doe dan eens een print_r($_SESSION); vlak voor je de query opstelt. Kijk wat daar in staat.


Ben,

dit was de uitkomst van de print_r$_SESSION);

Array ( [user_info] => Array ( [id] => 1 [email] => [email protected] [password] => pass [name] => Demo 1 [phone] => +0123456789 [content] => text content for Demo1 user. [last_login] => 2018-11-15 01:11:46 [pogingen] => 22 [gestemd] => 0 ) ) 


[size=xsmall]Toevoeging op 15/11/2018 16:43:16:[/size]

Thomas, bedankt voor de inspiratie.

En om mijzelf dan maar te quoten :).
Thomas van den Heuvel op 15/11/2018 00:26:27
Het user id staat waarschijnlijk in $_SESSION['user_info']['id'], niet in $_SESSION['id'].


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']}";


nu alleen de $POST['kandidaat'] met 1 verhogen.
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.
Thomas,

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.

of heb ik dit verkeerd begrepen?
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:
<?php
mysql_query('xxx');
mysql_query('yyy');
?>

Beide codefragmenten hebben hetzelfde effect.
ow ok, dat had ik niet zo begrepen.

ik was al bezig met een query

$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

ik zal jouw manier eens proberen.
Je mist quotes om je waarden. Ongetwijfeld dus ook escaping. Alle waarden vereisen quotes EN escaping om het veilig te houden.
>> ik zal jouw manier eens proberen.

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?
Hallo Ozzie,

dat is wel slim.

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 :-(

Reageren