21. marts 2007 - 14:35Der er
7 kommentarer og 1 løsning
Validering af form uden at slette alt
Hej alle eksperter.
Jeg er i gang med noget validering af en form. Jeg har lavet det i php, men når man så trykker på "Opret" knappen, og en af inputfelterne ikke er udfyldt rigtigt, kommer der en fejl hvor der f.eks står: "Du skal skrive et brugernavn.". Og så forsvinder alt det man har skrevet i alle input felterne. Kan man ikke lave det så alt sammen ikke forsvinder?
Her er min kode:
<? if($_POST['ok']){
if($_POST['kodeord'] == $_POST['kodeordto']){
if(!$_POST['brugernavn']) { echo "<br/><br/><b class='b1'>Du skal skrive et brugernavn.</b>"; } elseif(!$_POST['kodeord']) { echo "<br/><br/><b class='b1'>Du skal skrive et kodeord.</b>"; } elseif(!$_POST['kodeordto']) { echo "<br/><br/><b class='b1'>Du skal skrive et kodeord.</b>"; } elseif(!$_POST['email']) { echo "<br/><b class='b1'>Du skal skrive en email.</b>"; }
else{ echo "<br/><b class='b1'>Brugeren er oprettet! Du kan nu logge ind med dit brugernavn og kodeord.</b>"; $_POST["kom"] = str_replace("<", "<", $_POST["kom"]); $_POST["kom"] = str_replace(">", ">", $_POST["kom"]); $_POST["kom"] = str_replace("\\", "\\\\", $_POST["kom"]); $dato = date('d/m/Y'); $ip = getenv(REMOTE_ADDR);
Du har da ingen validering i dén kode. Du checker bare, om de pågældende variabler er sendt til serveren ... men overhovedet ikke, om de indeholder valide data (= de data/datatyper, du må forvente for den pågældende variabler).
Søg på Google på ordene 'php sql injection', hvis du vil lære bare en anelse om sikkerhed ;o)
Nu viser jeg det blot ved at bruge $_POST["navn"], men den bør du naturligvis validere (må kun indeholde små/store bogstaver, bindestreger og mellemrum) og fylde den i en anden variabel ;o)
JS-validering bør man altid lave af hensyn til brugeren (hvad man selv synes om popups, er ikke relevant i den forbindelse - og man kan sagtens skrive på siden med JS).
Når man har taget hensyn til brugeren, bør man på serveren tage hensyn til sig selv og sikkerheden - og foretage endnu en validering ;o)
Mange tak for den hurtige hjælp! Jeg acceptere, men har bare endnu et spørgsmål... Forstår ikke helt Hvad dette script gør.. Søgte på google efter "php sql injection". På wikipedia kommer der dette script frem:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) $result = mysql_query("SELECT * FROM users WHERE username=$matches[0]"); else // we don't bother querying the database echo "username not accepted";
Altså den tjekker om bogstaverne er fra A-til W og hvad så? Hvad skal den i databasen?
Så vidt jeg kan se så checker scriptet først indholdet i $_GET['username']. preg_match() er en sammenligning af en streng med et regular expression. Reg_exp siger at hvis 'strengen' består af 8 til 20 karaktere fra \w 'gruppen' er det fint. (Kort fortalt)
Hvis preg_match var sand :
Udføres mysql query'en med resultatet fra preg_match
Hvis ikke sand :
echo "username not accepted.";
Grunden til at 'den' går i databasen er for at hente f.eks. det korrekte kodeord som senere kan sammenlignes med det kodeord brugeren har skrevet.
Mvh. Johan
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.