23. november 2005 - 15:54Der er
48 kommentarer og 1 løsning
Se om bruger er logget ind med den rigtige bruger ?
Ja, overrskriften siger vel det hele ? Det er bare fordi at man nu kan logge på som en bruger og derefter har man adgang til alles private ting. Så hvordan kan jeg tjekke om brugernavn og kodeordet er det som passer til den brugers profil som man kigger på ? id'et står i adresselinien hvis det skal bruges ?
Jamen problemet er jo at hvis jeg fx er logget ind som jens, så har jeg adgang til både admins,kurds,lises,peters og alle andres profiler.. forstår du ?
jeg forstår godt dit problem, men der findes flere tusinde forskellige login-scripts ude på nettet, og vi ved ikke hvilket et, du bruger... du er nødt til at give os lidt mere info... f.eks. din kildekode til loginscriptet
Jeg tror alle forstår problemet men der er tæt på 4 mill. måder at lave et login system, så hvis du vil have hjælp til dit, bliver du nød til at vise os hvad du har lavet indtil videre :)
Jeg vil gerne hjælpe men du forbryder dig mod et af de simpleste principper her på eksperten, kun et spørgsmål med samme emne adgangen. Jeg vil foreslå at du overvejer enten at lukke her eller lukke det andet spørgsmål, så vil jeg tilgengæld overveje at hjælpe :)
Jamen så må vi jo håbe jeg kan hjælpe overhovedet :), ellers er der sikkert andre der kan.
Du skal, så vidt jeg kan 'se', dele dine informationer op i to dele.
A.: Informationer alle skal kunne se. - og - B.: Informationer som kun den enkelte bruger kan se.
Visning af info i A er afhængig af om man er loget ind, info i B er afhængig af hvem der er loget ind.
Du har sikkert en 'users' database med informationer om brugerer og deres password. I denne database kan du udover disse to informationer også ligge alle de informationer der relaterer sig til den enkelte bruger. F.eks. adresse, telefon og hvad ved jeg.
Derved kan du jo så, via $_SESSION['username'], altid sørge for at de informationer du viser om en bruger kun relaterer sig til den enkelte bruger.
Så et kode eksempel kunne være :
NB ! adhoc-kode, not copy paste ! NB
<?php
if($_SESSION['username']!="") { $query=mysql_query("SELECT * FROM users WHERE user='".mysql_real_escape_string($_SESSION['username']."' LIMIT 1"); $row=mysql_fetch_assoc($query);
Hvis hele 'balladen' blot handler om at checke om en bruger er logget ind, så kan du bruge følgende :
<?php
if($_SESSION['brugernavn']!="" && $_SESSION['pwd']!="") { if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".mysql_real_escape_string($_SESSION['username'])."' AND pwd='".mysql_real_escape_string($_SESSION['pwd'])."'"))==1) { echo "Consider yourself logged in !"; } else { header("location: login.php"); }
MEN !, der er vise sikkerheds aspekter som du bør overveje...senere :), nu skal vi lige have din funktionalitet på plads så kigger vi på IT-forbryderne senere :)
Har lige prøvet det øverste, det virkede detsværre ikke, men det gav mig en god idé. Man kan jo tjekke om brugerens id er det samme som det som er i adresselinien i filerne ?
//Tjekker om man er logget ind if (isset($_SESSION['brugernavn']) && !empty($_SESSION['brugernavn'])) {
//Laver en query der finder ens brugerid i databasen $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_SESSION['brugernavn'] ."'") or die(mysql_error());
if(mysql_num_rows($query)==1) { //Man er logget ind, og kan derfor se det hemlige indhold
Det kode du viste i det andet spørgsmål var en kombination af forskellige dele. Nu prøver vi først at få din database query til at fungerer ordentligt.
For at ovenstående skal virke kræver det at du i din tabel brugere har følgende 'poster' :
mail, hjemmeside, interesser, alder og fritekst ud over naturligvis brugernavn.
Derved kan du, som jeg nævner ovenover, 'knytte' oplysningerne til brugeren og KUN til den enkelte bruger. Så hvis du til at starte med blot fylder nogle ting i din database f.eks. via phpMyAdmin og så prøver scriptet så lad mig høre om fejlmeddelelser :)
Den du skrev i 25/11-2005 15:37:25 virker næsten, jeg for ingen fejl i, men lige meget hvem man er logget ind som er siden blank, der kommer intet frem ?
//Tjekker om man er logget ind if (isset($_SESSION['brugernavn']) && !empty($_SESSION['brugernavn'])) {
//Laver en query der finder ens brugerid i databasen $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_SESSION['brugernavn'] ."'") or die(mysql_error());
if(mysql_num_rows($query)==1) { //Man er logget ind, og kan derfor se det hemlige indhold
Har lige prøvet den, den virkede heller ikke, nu er siden ikke blank, men den alle brugers hemmelige sider hvis man bare er logget ind med sin egen bruger. Altså står vi på det samme sted som før :)
Jeg fatter jeg ikke hvad $_GET['id'] laver i scriptet. Det virker som om du har gang i noget kode som du ikke viser.
Lad os se alt den kode du bruger til følgende :
Den side hvor bruger skriver sit brugernavn for at logge ind. (login.php eller hvad du nu kalder den)
Den side (login.php) linker til, som bør være den side der første gang sætter $_SESSION['brugernavn'].
Og vis den side som skal præsenterer brugerens informationer.
Jeg havde ikke glemt ovenstående, det var med vilje udeladt for at få konstateret hvorvidt din database struktur er iorden, og det bringer mig frem til den sidste ting du bliver nød til at vise, nemlig din database struktur. Du kan få et 'dump' af den fra phpMyAdmin.
---------------------------Check.php--------------------------- <?php //Helt i starten starter vi sessioner, og forbinder til vores database session_start(); include "mysql.php";
//Tjekker om både brugernavn og kodeord er indtastet. if(empty($_POST['brugernavn']) || empty($_POST['kodeord'])) { //Sender brugeren tilbage til login.php ved brug af en header header("location: login.php"); exit; } //Hvis både brugernavn og kodeord er sat, går vi videre. else { $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_POST['brugernavn'] ."'") or die(mysql_error()); //Tjekker om der er én række i databasen der har det indtasetde brugernavn //Dette gør dog, at flere brugere ikke må have samme brugernavn! if(mysql_num_rows($query) == '1') { //Laver databasekaldet om til et array $row = mysql_fetch_array($query); //Tjekker om kodeordet i databasen er lig med det indtastede kodeord if($row['kodeord'] == $_POST['kodeord']) { //Brugeren har indtastet rigtige oplysninger, nu skal han gemmes i sessioner $_SESSION['brugernavn'] = $_POST['brugernavn']; $_SESSION['loggetind'] = "yes"; //Derudover skal brugeren sendes til en hemlig side, hvorpå der bliver tjekket om vedkommene er logget ind header("location: logget_ind.php"); } else { //Brugernavnet fandtes ikke i databasen, derfor skal der udskrives en fejl. header("location: login.php"); exit; } } else { //Brugeren har skrevet et forkert brugernavn //Sender brugeren tilbage til login.php ved brug af en header header("location: login.php"); exit; } } ?> ---------------------------Slut---------------------------
//Tjekker om man er logget ind if (isset($_SESSION['brugernavn']) && !empty($_SESSION['brugernavn'])) { //Laver en query der finder ens brugerid i databasen $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_SESSION['brugernavn'] ."'") or die(mysql_error()); $row = mysql_fetch_assoc($query);
//Man er logget ind, og kan derfor se det hemlige indhold
mysql_query("UPDATE `brugere` SET `mail` = '$mail', `hjemmeside` = '$hjemmeside', `interesser` = '$interesser', alder ='$alder', fritekst ='$fritekst' WHERE id = '$mitId'");
} else { //Brugeren er ikke logget ind echo "Du er ikke logget ind. Gå til login side <a href=\"login.php\">her.</a>"; } ?> ---------------------------Slut---------------------------
Du prøvede at lave flere ting på en gang som kræver to arbejdsgange.
PHP er det der hedder serverside, det vil sige at output fra en php side bliver genereret på serveren og sendes derefter til din browser (klienten). Hos dig aktiveres HTML, CSS, javascript osv.
Så herunder der checker din server sammen med din database om du er logget ind ($_SESSION['brugeravn']!="") og laver så en <form> hvor du kan indtaste informationer om dig selv.
<? session_start();
include "mysql.php";
if(isset($_SESSION['brugernavn']) && !empty($_SESSION['brugernavn'])) { //Laver en query der finder ens brugerid i databasen $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='".$_SESSION['brugernavn']."'") or die(mysql_error());
$row = mysql_fetch_assoc($query);
//Man er logget ind, og kan derfor se det hemlige indhold
Formen i logged_ind.php sendes så tilbage til serveren når du har udfyldt den og så opdaterer denne fil som skal hedde validate.php din database med de informationer du har indtastet.
Du skulle gerne få 'Update var en sussec !' når siden er færdig.
$query=mysql_query("UPDATE brugere SET mail='".$mail."', hjemmeside='".$hjemmeside."', interesser='".$interesser."', alder='".$alder."', fritekst='".$fritekst."' WHERE brugernavn='".$_SESSION['brugernavn']."'");
if(mysql_affected_rows()==1) { echo "Update var en succes !"; die(); } else { echo "Update failed."; die(); } } else { echo "Session empty !"; die(); } ?>
Hvad skal jeg med den sidste kode du gav mig.. et eller andet med validate.php ?
(Har indsat alle dine koder, det blev mere overskueligt, men trods dit gode gåpå mod virker det stadig ikke :( ) man kan stadig gå ind i andres hemmelige sider, men det er måske mig som har gjort noget forkert ? har bare copy pastet dine koder ind i mine gamle :)
Jeg skriver brugernavn og kodeord, og derefter går jeg ind i min medlemsliste og klikker på en tilfældig bruger, dernæst klikker jeg på rediger profil og vupti, så kan jeg redigere i hans/hende personlige ting.
He he jamen du har jo ikke vist mig noget kode overhovedet der har med en medlemsliste at gøre.
Hvis du nu lige starter med at lade din menu være og istedet skriver nogle informationer i den form der er under din menu istedet. Så lad mig høre om du kan få en 'update var en succes' besked.
Som skrevet i 25/11-2005 21:12:45 spurgte jeg dig om hvad jeg skulle med den kode, det forstår jeg nemlig ikke. Du svarede mig aldrig på det :) skal den indsættes i logget_ind.php eller ?
Du kopierer den kode jeg har skrevet under validate.php og gemmer den i en fil du kalder validate.php som du gemmer i samme folder som login.php ligger i
Jamen, så hjalp din kode alligevel vel, for kan du huske da jeg skrev at du gav mig en god idé ? den idé arbejdede jeg videre med, og nu virker det :)
definerede disse sessions: brugerid,kodeord,brugernavn og tjekkede om de var som de skulle være ved hjælp af denne:
//Tjekker om man er logget ind som den korrekte bruger $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_SESSION['brugernavn'] ."'") or die(mysql_error()); $row = mysql_fetch_assoc($query);
if ($_SESSION['brugerid'] == $_GET[id]) {
//Man er logget ind, og kan derfor se det hemlige indhold
}else{ echo "Du er ikke logget ind som den korrekte bruger. Gå til login side <a href=\"login.php\">her.</a>"; exit; }
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.