webForumDet fria alternativet

Användarlogin i php

15 svar · 690 visningar · startad av inkfish

inkfishMedlem sedan sep. 200251 inlägg
#1

Hallå jag håller på och försöker göra en avändar login men det värkar inte funka. Det jag gjoirt just nu är:

<?
session_start();
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<?
session_register("username");
session_register("password");

$link = mysql_connect ("localhost");
        mysql_select_db("inkfishave", $link);

$sql = mysql_query("SELECT password FROM users WHERE username = '$username'");
$fetch_em = mysql_fetch_array($sql);
$numrows = mysql_num_rows($sql);

if($numrows != "0" & $password == $fetch_em["password"]) {
	$valid_user = 1;
}
else {
	$valid_user = 0;
}

if (!($valid_user)) {
	session_unset(); 
	session_destroy(); 
	header("Location: index.php");
}
else {
	header("Location: admin.php");
}
?>
</body>
</html>
<?
exit();
?>

Om man har rätt lösenord så ska man komma till: admin.php men om man inte har det, tillbaka till index.php.

Detta funkar inte för när jag skriver in mitt användarnamn och lösenord som jag vet finns kommer jag till index.php ändå.

Några lösningar eller förslag på hur jag ska göra istället för såhär?

Tack på förhand.

MVH.
M. Lundberg

pimmeMedlem sedan sep. 20011 086 inlägg
#2

if($numrows != "0" & $password == $fetch_em["password"]) {

borde väl vara if($numrows != 0 && $password == $fetch_em["password"]) {

inkfishMedlem sedan sep. 200251 inlägg
#3

kommer fortfarande bara tillbaka, kollat så att mitt användarnamn och lösenord verkligen stämmer och det gör det. Ingen som kan testa scriptet själv och se om ni åker på samma problem?

TACK! =))

dectgapMedlem sedan sep. 20021 655 inlägg
#4

Du försöker skicka iväg en header efter att du redan har skrivit grejen till den genererade php-filen. Det går nämligen inte.

Eftersom användaren alltid ska skickas vidare, antingen till index.php eller admin.php, är det inte lönt att skriva ut någon html-kod.

Testa med

<?php
session_start();
session_register("username");
session_register("password");

$link = mysql_connect ("localhost");
        mysql_select_db("inkfishave", $link);

$sql = mysql_query("SELECT password FROM users WHERE username = '$username'");
$fetch_em = mysql_fetch_array($sql);
$numrows = mysql_num_rows($sql);

if($numrows != "0" & $password == $fetch_em["password"]) {
    $valid_user = 1;
}
else {
    $valid_user = 0;
}

if (!($valid_user)) {
    session_unset(); 
    session_destroy(); 
    header("Location: index.php");
}
else {
    header("Location: admin.php");
}
?>
inkfishMedlem sedan sep. 200251 inlägg
#5

Yay! =) Det fungerade, tackar vi för.

Nu på de sidorna som användarna behöver vara inlogga på, kan jag bara kolla om det finns en session vid namn username då lr? Eller måste jag göra om samma procedur som här igen?

Och när jag loggar ut, kör jag bara: session_unset(); och session_destroy(); då?

Tack!

inkfishMedlem sedan sep. 200251 inlägg
#6

Inte för att vara jobbig men nu helt plötsligt kommer dessa felmdeleanden när jag skickas till login.php

Warning: open(/tmp\sess_3fbcda669fb6b9f48a834f27bcd97cbd, O_RDWR) failed: No such file or directory (2) in d:\webdesign\webroot\inkfishave\login.php on line 2

Warning: Session object destruction failed in d:\webdesign\webroot\inkfishave\login.php on line 22

Warning: Cannot add header information - headers already sent by (output started at d:\webdesign\webroot\inkfishave\login.php:2) in d:\webdesign\webroot\inkfishave\login.php on line 23

dectgapMedlem sedan sep. 20021 655 inlägg
#7

Jag har aldrig använt sessions, men för att registrera "username" som en session måste du ju även ha satt något värde på "username" (samma sak med "password"); var gör du det?

inkfishMedlem sedan sep. 200251 inlägg
#8

Dom får värden genom formuläret på en annan sida, sen skickar formuläret en till login.php.

inkfishMedlem sedan sep. 200251 inlägg
#9

Jag blir galen! Får aldrig login script att fungera! När jag försöker logga in först så skickas jag bara tillbaka till index.php fast jag skriver in rätt login och lösen, sen om jag försöker logga in igen så kommer bara de felmedelandena jag skrev innan.

=(

MatteMedlem sedan aug. 20002 975 inlägg
#10

I din php.ini bör det nu stå: session.save_path = /tmp

Felmeddelandet säger att denna katalog ('/tmp') inte existerar. Skapa den eller byt till en befintlig katalog.
Glöm inte att katalogen måste ha skrivrättigheter.

inkfishMedlem sedan sep. 200251 inlägg
#11

Var ska jag skapa den katalogen da?
Jag använder windows.

MatteMedlem sedan aug. 20002 975 inlägg
#12

På samma enhet som du har php-skriptet.

Om den ligger på c: så blir det c:\tmp

inkfishMedlem sedan sep. 200251 inlägg
#13

varför ska jag behöva göra en sådan mapp??

Det funkade inte när jag gjort denna mapp heller. Asså när ni kollar på koden, ser ni något fel med den?
jag fattar inte.

MatteMedlem sedan aug. 20002 975 inlägg
#14

Ditt felmeddelande löd:

Warning: open(/tmp\sess_3fbcda669fb6b9f48a834f27bcd97cbd, O_RDWR) failed: No such file or directory (2) in d:\webdesign\webroot\inkfishave\login.php on line 2

I php.ini ställer man in vilken katalog som sessionerna ska lagras i.
Och som jag tolkar felmeddelandet (jag kan ha fel), så försöker PHP lägga sessionen i katalogen /tmp, men hittar ingen sådan katalog.

Då ligger valet på dig om du vill ändra i php.ini till en katalog som finns på disken, eller om du istället skapar katalogen /tmp.

I vilket fall måste katalogen ha skrivrättigheter.

MatteMedlem sedan aug. 20002 975 inlägg
#15

Fast du kanske istället får skriva i din php.ini:

session.save_path = c:\tmp

inkfishMedlem sedan sep. 200251 inlägg
#16

login.php ligger i ../inkfishave/login.php
om jag bara skapar en mapp: ../inkfishave/tmp/
Får den skrivarrättigheter då direkt? Eller hur ger jag den deT? =)
Jag har sidan lokalt nu alltså, inte på någon server.

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