Der sker ingenting.. Og nej bare rolig.. Vi har så vidt jeg ved ikke rigtig nogle computerhajer
- rettelse.. Det ser ud til at jeg bare ikke kunne vente med at prøve
Men tilgengæld er jeg bange for at vi har folk der har lyst til at stemme flere gange, og på alle svarmulighederne.. Er det muligt at filtrere dem sådan at det kun er det første svar en elev afgiver der bliver modtaget? Altså sådan at den går ind og tjekker om navn og klasse er på listen i forvejen?
Haha man ved aldrig om de kan komme men okay så
- Så funktionen virker?
Sagtens. Her er en ny indsendsvar.
<?php
//Konfiguration af database
$mysqlbrugernavn = "HSP";
$mysqlpassword = "HSP";
$mysqldatabase = "DatabaseNavn";
//Vidersendelsesadresse - Hvor skal brugeren hen bagefter?
$adresse = "http://www.hsp.dk";
//I langt de fleste tilfælde localhost, men hvis andet angivet af din host, skriv det her.
$mysqlhost = "localhost";
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// Ændre ikke under denne linje ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
if(isset($_POST['navn']) && isset($_POST['svar'])) {
//Forbinder til databasen
mysql_connect($mysqlhost, $mysqlbrugernavn, $mysqlpassword);
mysql_select_db($mysqldatabase);
//Bemærk brugen af mysql_real_escape_string så du ikke får nogle nasty MySQL Injections i din database fra nogle frække elever ;)
$navn = mysql_real_escape_string($_POST['navn']);
$besvarelse = mysql_real_escape_string($_POST['svar']);
//Tjekker om brugeren allerede har afgivet et svar
if(mysql_num_rows(mysql_query("SELECT * FROM Besvarelser WHERE Navn = '" . $navn . "'"))==0) {
//Indsætter besvarelsen i databasen
mysql_query("INSERT INTO Besvarelser (Navn, Svar, IP) VALUES ('" . $navn . "', '" . $besvarelse . "', '" . $_SERVER['REMOTE_ADDR'] . "')");
}
//Altid husk at lukke sin database pænt efter brug
mysql_close();
}
//Afslut altid ved at vidersende brugeren
header("location: " . $adresse);
?>
Den ignorerer simpelthen besvarelsen hvis der allerede er afgivet svar.
- En smart elev kunne dog godt sætte et ekstra mellemrum i og få et svar med alligevel..... Omg jeg er for besat af paranoia, men tog udfordringen op og her er en version jeg godt gad se den gennemsnitlige folkeskole elev nare
<?php
//Konfiguration af database
$mysqlbrugernavn = "HSP";
$mysqlpassword = "HSP";
$mysqldatabase = "DatabaseNavn";
//Vidersendelsesadresse - Hvor skal brugeren hen bagefter?
$adresse = "http://www.hsp.dk";
//I langt de fleste tilfælde localhost, men hvis andet angivet af din host, skriv det her.
$mysqlhost = "localhost";
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// Ændre ikke under denne linje ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
if(isset($_POST['navn']) && isset($_POST['svar'])) {
//Forbinder til databasen
mysql_connect($mysqlhost, $mysqlbrugernavn, $mysqlpassword);
mysql_select_db($mysqldatabase);
//Bemærk brugen af mysql_real_escape_string så du ikke får nogle nasty MySQL Injections i din database fra nogle frække elever ;)
$navn = mysql_real_escape_string($_POST['navn']);
$besvarelse = mysql_real_escape_string($_POST['svar']);
//Her fjerner vi alle mellemrum i starten og slutningen af navnet, og vi fjerner også alle "dobbelte mellemrum"
$navn = preg_replace('/\s+/', ' ', trim($navn));
//Tjekker om brugeren allerede har afgivet et svar
if(mysql_num_rows(mysql_query("SELECT * FROM Besvarelser WHERE Navn = '" . $navn . "'"))==0) {
//Indsætter besvarelsen i databasen
mysql_query("INSERT INTO Besvarelser (Navn, Svar, IP) VALUES ('" . $navn . "', '" . $besvarelse . "', '" . $_SERVER['REMOTE_ADDR'] . "')");
}
//Altid husk at lukke sin database pænt efter brug
mysql_close();
}
//Afslut altid ved at vidersende brugeren
header("location: " . $adresse);
?>
Hvis jeg husker korrekt er der stadig visse måder at snige sig uden om for en dygtig elev (Der findes fx bogstaver i andre enkodninger som ligner vores egne men ikke er det.)Må lære at tro noget mere på mig selv, det gjorde jeg. Fx en NULL byte ind i besvarelsen og den passerer tjekket.Men så ville jeg anbefale hele lærestaben på den skole at stoppe med at bruge onlinebetalinger !
- Uanset hvad, sikkerhed kan altid omgåes, men lille Sofie i 3. Klasse omgår altså ikke det der.
For et eksempel.
Det er ligegyldigt om jeg skriver
"Henrik Pedersen 9.C"
"Henrik PeDeRSen 9.c"
" HENRIK PEDERSEN 9.c"
"Henrik Pedersen 9.C"
Jeg kunne blive ved i en uendlighed. Det eneste i måske ville kunne se et problem med så er vel børn med mangle mellemnavne som hvis jeg brugte
mit mellemnavn det ene sted og ikke på den næste besvarelse. I så fald kan det kun besejres med en elevliste
Indlæg senest redigeret d. 18.01.2011 16:34 af Bruger #14381