The Prodigy Skrevet 16. mars 2008 Del Skrevet 16. mars 2008 Hei, Jeg har laget en forms med registrering, og der ønsker jeg en form for random sikkerhetsspørsmål som registrereren må svare riktig for å kunne blir registrert i databasen... Noen som har anbefaling til hvordan jeg kan lage random spørsmål samt hvordan jeg validerer denne..? Takk Lenke til kommentar
sygard Skrevet 16. mars 2008 Del Skrevet 16. mars 2008 Hva med å lage deg en table i databasen med spørsmål og svar, hent et tilfeldig spørsmål samt database id'en til det spørsmålet og send id'en sammen med med resten av verdiene som en "hidden value" i formet? Når du skal teste i "excecution" scriptet henter du svaret til det spørsmålet fra databasen ved å bruke id'n sendt sammen med form'et. Sjekk så om databasens svar er det samme som brukeren har skrevet (bruk enkle spørsmål og svar...) En bruker vil neppe fylle inn alle verdiene i registrerings-formet gjentatte ganger hvis han/hun svarer feil... Evt, bruk et array i php med spørsmål og svar. Send id på samme måte med form'et til "excecution" scriptet. Hvis du vil ha enda bedre sikkerhet kan du MD5'e id'en før den skrives til registrerings-formet. "Excecution" scriptet må da ha en liste over alle md5'er for så å sammenligne (evt. regne de ut i farten). /Sygard. Lenke til kommentar
The Prodigy Skrevet 17. mars 2008 Forfatter Del Skrevet 17. mars 2008 Jeg forstår tankegangen din, og det er netop det jeg vil også.. Men hvordan henter jeg et tilfeldig spørsmål fra database og inn på formen..? Jeg har bare en form med forskjellige input i en php fil, og selve insert to mysql databasen i en annen php fil. <form action='reg.php' method='post' name='form'> Navn:<br> <input name='name' type='text' size='30' maxlength='30'><br><br> Email:<br> <input name='email' type='text' size='30' maxlength='30'><br><br> Brugernavn:<br> <input name='brugernavn' type='text' size='30' maxlength='30'><br><br> Et annet spørsmål: Hvordan kan jeg skjekke om en email adr allerede er registrert i databasen..? Lenke til kommentar
olzorg_ Skrevet 17. mars 2008 Del Skrevet 17. mars 2008 Et annet spørsmål: Hvordan kan jeg skjekke om en email adr allerede er registrert i databasen..? enkel måte å sjekke om epostadressen allerede er registrert på: $sql = "SELECT epost FROM tabell WHERE epost='".$_POST['epost']."'"; if(mysql_num_rows(mysql_query($sql)) == 0) { echo "epost ikke registrert"; } else { echo "epost er allerede registrert"; } PS: ikke hugg hue av meg hvis dette er en tungvindt måte å gjøre det på og det finnes enklere måter Lenke til kommentar
sygard Skrevet 18. mars 2008 Del Skrevet 18. mars 2008 (endret) beklager sent svar, lange dager... OK, lagde en kjapp klasse for å gjøre det du ønsker. <?php /** * Created on Mar 18, 2008 by Sygard. * * Class for handling user submitted answers to a given question * */ class Qanda{ private $db_address; // mysql db address (usually "localhost") private $db_user; // mysql username private $db_pass; // mysql password private $db_base; // mysql database private $db_table; // table wh ere q and a are stored, 3 fields (id, question, answer) private $db; // database object /** * constructor * */ public function __construct(){ $this->db_address = "localhost"; $this->db_user = "%your db username%"; $this->db_pass = "%your db password%"; $this->db_base = "%your db database%"; $this->db_table ="%your db table%"; $this->db = mysql_connect($this->db_address,$this->db_user,$this->db_pass) or die ("Error connecting to database."); mysql_select_db($this->db_base,$this->db) or die ("Couldn't select the database."); } /** * function which returns a question and its id * * @return array where [0] is the id and [1] is the question */ function getQuestionAndID(){ $sql = "SELECT Qid, question FROM `$this->db_table` ORDER BY RAND()"; $qry = mysql_query($sql, $this->db); $result = mysql_fetch_assoc($qry); $id = $result['Qid']; $question = $result['question']; //$q_and_id = array(array("id"=>"$result['Qid']"), array("question"=>"$row['question']")); $QandID = array($id, $question); return $QandID; } /** * function for validation of user submitted answer * * @param id question id * @param answer user submitted answer * * @return true if user has answered correctly */ function validateAnswer($id, $answer){ $sql = "SELECT answer FROM `$this->db_table` WHERE Qid='$id'"; $qry = mysql_query($sql, $this->db); $result = mysql_fetch_assoc($qry); if(strcasecmp($answer, $result['answer']) == 0) return true; else return false; } } ?> Legg denne i egen fil som du kaller et eller annet lurt (jeg kalte den Qanda.php). Bruk den første funksjonen der du trenger et spørsmål samt id, og den andre der du trenger å sammenligne et brukergitt svar med et fasitsvar. Du må bytte ut disse strengene med ditt oppsett: %your db username% %your db password% %your db database% %your db table% Her er et eksempel på bruk: <?php require_once("Qanda.php"); /** * code for getting a question with ID for use in form * */ $questionObject = new Qanda(); $resQO = $questionObject->getQuestionAndID(); // $resQO[0] is the id for this question // $resQO[1] is the question isself echo "Question ID : $resQO[0] <br/>Question : $resQO[1]"; /** * code for answer validation in excecution script * */ $answerObject = new Qanda(); if($answerObject->validateAnswer("id recieved from POST", "answer recieved from POST")) echo "<p>Riktig!</p>"; else echo "<p>FEIL!</p>"; ?> Si ifra hvis du ikke får det til. /Sygard. edit: tabellen må forresten være på formen: id = INT (primary, auto_increment) question = text (jeg brukte MEDIUMTEXT) answer = text (jeg brukte MEDIUMTEXT) Endret 18. mars 2008 av sygard Lenke til kommentar
The Prodigy Skrevet 19. mars 2008 Forfatter Del Skrevet 19. mars 2008 Flott, tak for koden sygard.. skal teste og kommer tilbake, Takk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå