07. februar 2006 - 09:21Der er
19 kommentarer og 1 løsning
Simpel kotrol af brugernavn og password i gæstebog
Kan man ikke gøre det sådan, at man inden man skriver en besked i en gæstebog, indtaster et brugernavn og et password, som så bliver kontrolleret med en database. Hvis det passer sammen, så får man lov at skrive sin besked og ellers får man en fejlmelding. Havde overvejet noget med:
Jeg ved bare ikke hvordan jeg kontrollerer med databasen! Som det er nu, er det lige meget hvad man skriver som brugernavn og password, da den ikke tjekker det nogen steder. Jeg har sådan set ikke brug for en session hvor man skal logge ind og ud. Den skal bare lige tjekke username og password inden man skriver.
Du skal lave et kald ned i databasen efter det brugernavn og password som er blevet angivet.
SQL'en kunne f.eks. være noget i den her retning:
SELECT * FROM bruger_db WHERE username = $_POST['username'] AND password = $_POST['password'];
Derefter kan du lave et check på hvor mange rækker du får tilbage. Hvis du ikke får nogen rækker tilbage er der ikke nogen med det brugernavn og password, hvis du får 1 række tilbage er der en bruger med det brugernavn og password. Hvis du får mere end 1 række tilbage er der noget galt :)
Kan godt se ideen i det, men det virker ikke helt. Lige nu kommer der bare en helt blank side. Der bliver slet ikke loadet noget som helst af siden ind! Har lavet følgende kode:
<? $db = mysql_connect("localhost","******","******"); mysql_select_db("******", $db); if(isset($_POST['skriv'])){ $query = "SELECT * FROM users WHERE username = $_POST['username'] AND password = $_POST['password']"; $result = mysql_query($query, $db) or die('error making query'); $affected_rows = mysql_num_rows($result);
Så er første del afsluttet :), jeg tror, er ikke sikker, men tror, at hvis du kigger i source koden i din browser, så er action attributen tom på din originale kode.
Kan ikke se den store forskel i min og din form, bortset fra at du har sat en masse " ind, som vel ikke burde være nødvendige. Lige meget hvad, så er siden stadig blank og alt hvad der står i Source koden er:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD> <BODY></BODY></HTML>
Og det på trods af, at der altså står en masse ud over min php kode i det dokument. Der burde være en del tabeller og lign. som skulle blive udskrevet, da de intet har med min php kode at gøre.
Attributers værdier bør altid skrives imellem "..." det er muligt det virker i IE og måske andre browsere men det er stadig forkert at udelade dem.
Hvis du loader din form i din browser og så kigger i kildekoden, hvad står der så i action attributen, med din originale kode ?
Den eneste måde ovenstående kode ikke laver output er hvis $_POST['skriv'] ikke er sat, og det går jeg jo udfra at du har testet. Så du bliver nok nød til at vise noget mere af din kode.
Hvis jeg var dig, ville jeg lade den del som gememr i DB være en seperart fil, som redirecter tilbage til formen. SÅ undgår du også dobbeltindlæg. Altså, en fil med form og indlæg, der poster til en fil, som kun laver tjek, og gemmer hvis korrekt bruger og pass, og altid redirecter til formen
// TILFØJ TIL DB if(isset($_POST['skriv'])){ $query = "SELECT * FROM users WHERE username = '$_POST[username]' AND password = '$_POST[password]'"; $result = mysql_query($query, $db) or die('error making query'); $affected_rows = mysql_num_rows($result);
if($affected_rows == 1) { echo "Så er der fundet en række.<br><br>"; $dato_array = getdate(); $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"]; $navn = $_POST["navn"]; $email = $_POST["email"]; $besked = convert_links($_POST["besked"]); if(mysql_query("INSERT INTO gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')")) { echo "Og INSERT virkede også fint."; } else { echo "Desværre mislykkedes INSERT i tabellen."; } } } } ?>
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.