webForumDet fria alternativet

Behöver hjälp med inloggningsscript

11 svar · 1 033 visningar · startad av PontusP

PontusPMedlem sedan juni 20096 inlägg
#1

Tjena, jag är alldeles ny inom php ämnet men har fått en hel del tips om
php.net och varit där och tagit del lite av deras kurser, anledningen till att
varför intresset ökade för php var för att jag själv tänkt starta en webb
adress senare i framtiden för att värva medlemmar där dom tar del av mina
spronosorer och då får billigare prdodukter osv, och ett medlemskap ska
kosta en viss summa och redan nu förstår man ju som läsare att jag måste ha
en typ av inloggnings (grej) eller va jag nu ska kalla det. Vidare till problemet,
jag har då skapat ett inloggningsscript men får inte till det, när jag kör den i
localhost/login.php funkar det alldeles utmärkt men när jag då ska logga in så
behöver jag varken, fylla i, stava rätt osv för att komma in utan den skicka
mig direkt till inloggningssidan :/ ... kan lägga över hur jag fått ihop det, som
sagt är nybörjare och det kan vara ett jätteenkelt problem för er eller kanske
inte ens ett problem men jag tackar så mkt för all tid ni kan lägga ner på
denna tråd! =)

min kodning:

<?PHP
$strUsername = "Admin";
$strPassword = "uJkrWloS";
if (isset($_POST['username']))
{
if ( ($_POST['username'] == $strUsername) && ($_POST
['password'] == $strPassword) )
{
echo "Du har angivit rätt värden, du är nu inloggad.";
}
else
{
Header("Location: login.php");
die();
}
}
?>

<form action="logon.php" method="post">
<p>
<font face="Tahoma" size="2">Användarnamn</font> :<br />
<input type="text" name="username" />
<br />
<font face="Tahoma" size="2">Lösenord:<br />
</font>
<input type="password" name="password" />
<br />
<br />
<input type="submit" value="Logga in" />
</p>
</form>

MeddaMedlem sedan juni 200913 inlägg
#2

du kan ju sätta action="login.php"

PontusPMedlem sedan juni 20096 inlägg
#3

Medda skrev:

du kan ju sätta action="login.php"

japp, men då kommer jag ju till samma sida oavsett om det är rätt eller fel uppgifter ://

nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

Hej och välkommen till webForum! :)
Till att börja med så kan jag tipsa om de kod-taggar vi har på wF som gör att koden ser snyggare ut. Du kan välja mellan [highlight=php]Klistra in koden här eller [php]Klistra in koden här som båda färgar koden och skriver ut den med ett typsnitt med fixerad bredd. (Vilket gör koden enklare att läsa)

<?PHP
$strUsername = "Admin";
$strPassword = "uJkrWloS";
if (isset($_POST['username']))
{
if ( ($_POST['username'] == $strUsername) && ($_POST
['password'] == $strPassword) )
{
echo "Du har angivit rätt värden, du är nu inloggad.";
}
else
{
            Header("Location: login.php");
            die();
}
}
?>

<form action="logon.php" method="post">
    <p>
        <font face="Tahoma" size="2">Användarnamn</font>&nbsp;:<br />
        <input type="text" name="username" />
        <br />
        <font face="Tahoma" size="2">Lösenord:<br />
        </font>
        <input type="password" name="password" />
        <br />
        <br />
        <input type="submit" value="Logga in" />
    </p>
</form>

Så till din kod... Jag tycker du ska kolla lite på sessions. En session i PHP låter dig definiera variabler som följer med en viss användare. En session funkar ungefär som en cookie men är säkrare då det lagras på servern, och användaren kan alltså inte mixtra hursomhelst med värdena. Först kallar du på session_start(); för att komma åt din session, sedan kan du ändra saker i $_SESSION som är en array. T ex:

<?PHP
session_start(); // Initiera sessions

$strUsername = "Admin";
$strPassword = "uJkrWloS";
if (isset($_POST['username']))
{
if ( ($_POST['username'] == $strUsername) && ($_POST
['password'] == $strPassword) )
{
            echo "Du har angivit rätt värden, du är nu inloggad.";
            $_SESSION['loggedin'] = true;  // Visa att användaren är inloggad
            $_SESSION['username'] = $strUsername;  // Spara användarnamnet
}
else
{
            $_SESSION['loggedin'] = false; // Logga ut användaren
            unset($_SESSION['username']);  // Ta bort användarnamnet
            header("Location: login.php");
}
}
?>

Sedan kan du kontrollera om användaren är inloggad varsomhelst i koden.

<?PHP if ($_SESSION['loggedin'] ) { ?>
Välkommen, <?PHP echo($_SESSION['username']); ?> - <a href="editprofile.php">Redigera din profil</a>
<?PHP }else{ ?>
Registrera ett konto för att skapa en profil!
<?PHP } ?>

Gör den kollen varje gång du ska utföra eller skriva ut något som kräver att man är inloggad. (Liknande kontroller kan göras för att kolla att användaren t ex har admin-rättigheter.) Att som du tänkte (?) ha som enda säkerhet att rikta om användaren till en annan sida rekommenderas inte, då vem som helst som kan namnet på den sidan ändå kan komma åt den bara genom att skriva in namnet i webbläsaren.

PontusPMedlem sedan juni 20096 inlägg
#5

Så om jag nu förstår dig rätt så är en session nåt liknande som spara dina
uppgifter, nåt som följer med, registera vad användaren gör osv? jag hoppas
förstått att jag är nybörjare och alltid som nybörjare e massa koder ett WOW
för alla, ja mena det verka till en början att vara hur komplicerat som helst
men inom kort tid är det ett "skämt" om jag kan uttrcka mig så, det var den
upplevelsen jag fick via html iaf! Jag sitter o försöker plugga in det du säger
nu men det du skrev, det är alltså svaret på min fråga? varför jag inte skickas
tillbaka till login.php, jag vill inte vara tjatig o sitta o ta steg för steg utan
förklara du något komplicerat är jag typen som gärna plugga in det i huvudet
och ta del av tipset och sen kommer med dom kvarstående frågorna, så den
typen att bara läsa det och inte förstå nåt nytt o sen ställa samma frga är
jag inte! jag tacka så mkt för tipset iaf, behöver ju mer men, som sagt jag
pluggar =)!

nitro2k01Medlem sedan aug. 20039 342 inlägg
#6

Sessions är inte till för att spara saker permanent, utan tillfälligt. När du ska lagra något permanent, som när en användare skapar ett konto så bör du lagra detta i en databas. (För PHP använder man ofta MySQL) En session å andra sidan är knutet till en dator, inte en användare, så att en användare t ex kan fortsätta vara inloggad till dagen efter. Om användaren loggar in på en annan dator kommer en ny session skapas för den användaren, som är knuten till den datorn.
Om du förstår vad jag menar. :)

Om ditt huvudsakliga mål är att få upp en sida som har en viss funktion, så kan det vara en bra idé att bygga vidare på någon existerande CMS-mjukvara eller forum-mjukvara för att undvika buggar i grundläggande komponenter, såsom inloggning och behörighet.

CMS'er:
http://drupal.org/
http://www.joomla.org/

Forum:
http://www.phpbb.com/

Det bör finnas bra guider för hur man kommer igång med dessa om du googlar.

PontusPMedlem sedan juni 20096 inlägg
#7

nitro2k01 skrev:

Sessions är inte till för att spara saker permanent, utan tillfälligt. När du ska lagra något permanent, som när en användare skapar ett konto så bör du lagra detta i en databas. (För PHP använder man ofta MySQL) En session å andra sidan är knutet till en dator, inte en användare, så att en användare t ex kan fortsätta vara inloggad till dagen efter. Om användaren loggar in på en annan dator kommer en ny session skapas för den användaren, som är knuten till den datorn.
Om du förstår vad jag menar. :)

Om ditt huvudsakliga mål är att få upp en sida som har en viss funktion, så kan det vara en bra idé att bygga vidare på någon existerande CMS-mjukvara eller forum-mjukvara för att undvika buggar i grundläggande komponenter, såsom inloggning och behörighet.

CMS'er:
http://drupal.org/
http://www.joomla.org/

Forum:
http://www.phpbb.com/

Det bör finnas bra guider för hur man kommer igång med dessa om du googlar.

Jag tro jag börja förstå lite det här med session och du ska va stolt över ditt tydliga språk faktiskt, jag gör så att jag ladda ner detta du tipsar mig om och så ska jag försöka bygga vidare kunskaper på det. Men jag är igentligen bara ute efter varför den skickar mig till sidan där man är inloggad, även om du inte fyllt i rätta uppgifter.. jag har ju kodat allt som peka mot att den ska skicka dig tillbaka till login.php! tack så mkt!

nitro2k01Medlem sedan aug. 20039 342 inlägg
#8

Hmm, jag vet inte om du kanske har missuppfattat en sak ang hur formulär och redirects fungerar.
Som du har det upplagt nu så gör din kod detta:
Vid rätt lösenord
Sidan med formuläret -> Sidan med PHP-koden (Man stannar alltså kvar på samma sida där PHP-koden finns)

Vid fel lösenord
Sidan med formuläret -> Sidan med PHP-koden (Genom en redirect, alltså header-kommandot) -> login.php

I en if-sats så körs det som kommer efter else om villkoret är falskt. (Till skillnad från det som kommer direkt efter if)

Jag byter lite namn på saker i koden för att förtydliga:

Denna fil kallas formular.php

<form action="kollalogin.php" method="post">
    <p>
        <font face="Tahoma" size="2">Användarnamn</font>&nbsp;:<br />
        <input type="text" name="username" />
        <br />
        <font face="Tahoma" size="2">Lösenord:<br />
        </font>
        <input type="password" name="password" />
        <br />
        <br />
        <input type="submit" value="Logga in" />
    </p>
</form>

Denna fil kallas kollalogin.php

<?PHP
$strUsername = "Admin";
$strPassword = "uJkrWloS";
if (isset($_POST['username']))
{
if ( ($_POST['username'] == $strUsername) && ($_POST
['password'] == $strPassword) )
{
            // Rätt lösenord, skicka vidare till medlemssidan.
            Header("Location: duarnuinloggad.php");
            die();
}
else
{
            // Fel lösenord, skicka tillbaka till formuläret.
            Header("Location: formular.php");
            die();
}
}
?>

Sedan kan du kombinera dessa två så att koden för båda finns på en enda sida. Det där var bara för att visa tydligt hur saker funkar. Detta gör du genom att placera koden för båda två på samma sida samt inte göra en redirect när användaren skriver in fel lösenord. (Då forsätts resten av sidan att skriva ut och formuläret visas.)

PontusPMedlem sedan juni 20096 inlägg
#9

nitro2k01 skrev:

Hmm, jag vet inte om du kanske har missuppfattat en sak ang hur formulär och redirects fungerar.
Som du har det upplagt nu så gör din kod detta:
Vid rätt lösenord
Sidan med formuläret -> Sidan med PHP-koden (Man stannar alltså kvar på samma sida där PHP-koden finns)

Vid fel lösenord
Sidan med formuläret -> Sidan med PHP-koden (Genom en redirect, alltså header-kommandot) -> login.php

I en if-sats så körs det som kommer efter else om villkoret är falskt. (Till skillnad från det som kommer direkt efter if)

Jag byter lite namn på saker i koden för att förtydliga:

Denna fil kallas formular.php

<form action="kollalogin.php" method="post">
    <p>
        <font face="Tahoma" size="2">Användarnamn</font>&nbsp;:<br />
        <input type="text" name="username" />
        <br />
        <font face="Tahoma" size="2">Lösenord:<br />
        </font>
        <input type="password" name="password" />
        <br />
        <br />
        <input type="submit" value="Logga in" />
    </p>
</form>

Denna fil kallas kollalogin.php

<?PHP
$strUsername = "Admin";
$strPassword = "uJkrWloS";
if (isset($_POST['username']))
{
if ( ($_POST['username'] == $strUsername) && ($_POST
['password'] == $strPassword) )
{
            // Rätt lösenord, skicka vidare till medlemssidan.
            Header("Location: duarnuinloggad.php");
            die();
}
else
{
            // Fel lösenord, skicka tillbaka till formuläret.
            Header("Location: formular.php");
            die();
}
}
?>

Sedan kan du kombinera dessa två så att koden för båda finns på en enda sida. Det där var bara för att visa tydligt hur saker funkar. Detta gör du genom att placera koden för båda två på samma sida samt inte göra en redirect när användaren skriver in fel lösenord. (Då forsätts resten av sidan att skriva ut och formuläret visas.)

ja, ja förstår dig bra men lixom som du ser själv kan du inte hitta något fel i koden som tyder på att det inte ska funka, jag har suttit här sen 10 i morse och försökt lösa problemet o börja tappa kontrollen, jag förstår inte mig på det, det ska ju funka? det jag gör är att jag öppnar ett text dokument, jag kodar det och sen spara det som "login.php" och sen placera ja det i C:/wamp/www.. sen kör jag "http://localhost/login.php" och då kommer allt fram men hur jag en beter mig i skrivfälten så kommer jag vidare, börja bli riktigt sur på det och jag har bankat och slått lite överallt hehe, det tar kol på mig alltså! Du ska ha tack för hjälpen, ja hoppas d förstår det.. de kan vara jag som e lite korkad o inte förstår exakt allt men som sagt är nybörjare

nitro2k01Medlem sedan aug. 20039 342 inlägg
#10

Zippa ihop kod-filerna som de ser ut nu och ladda upp dem här. (Klicka gå till avancerad under svarsfältet, sedan hantera bifogade filer)

PontusPMedlem sedan juni 20096 inlägg
#11

jag har följt phpsidans kurser och det var i förrigår jag började med det, där stod det att jag behövde ladda ner massa, som tex, wamp, editplus3 osv.. men det stod inget om att jag behöver köra något igenom cmd elr nåt vidare för att de ska funka, nu lägger jag till detta för att d inte ska komma med ett svar sen som att ahh men du behöver ju kö sidan med nån running elr nåt.. jag lägger ut det så får du kika på det, funkar det för dig så e det nåt program jag behöver skulle jag tro! annars, ah då bör de nog inte funka för dig helle.. tack för att du tar din tid!!

PeddaMedlem sedan juni 20006 032 inlägg
#12

Filerna du laddade upp fungerar som dom ska. (Efter att jag ändrat action till formular.php då kollalogin.php var tom)

/red
Vet inte vad du har installerat, men för att köra php på din egna dator behöver du en webbserver och PHP.
Så har du inte installerat det så gör du det enklast genom att installera wamp så får du allt det plus mysql installerat.

/red 2
La till lite session hantering så har du något att bygga vidare på.

140 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)