Gå til innhold

Problemer med $_SESSION


Anbefalte innlegg

Heisann, har kommet over et problem som jeg ikke klarer å forstå. Har ordnet til slik at jeg henter inn informasjon fra databasen ved hjelp av $_SESSION, men virker som at det ikke lagrer seg slik at jeg kan vise det på neste siden som dukker opp. Fokuser mest på den tykke skriften :), Setter opp rekkefølgen nedenfor:

 

index.php

------------------------------------------------------------

<form action="Logg_inn.php">

<strong>Brukernavn: </strong><br> <input type="text" name="brukernavn" maxlength="15"/><br>

<strong>Passord: </strong><br> <input type="password" name="passord" maxlength="15"/><br>

<input type="submit" value="Logg inn" /><br><br>

<input type="submit" value="Registrering" />

</form>

--------------------------------------------------------------

 

Logg_inn.php

-------------------------------------------------------------

<?php session_start(); ?>

 

$db_host = "riktig";

$db_navn = "riktig";

$db_brukernavn = "riktig";

$db_passord = "riktig";

 

//Connection to the Database

$connection = mysql_connect($db_host, $db_brukernavn, $db_passord);

if (!$connection) {

die ("Could not connect to the database: ".mysql_error());

}

 

//Selecting the Database

$db_select=mysql_select_db($db_navn);

if (!$db_select)

{

die ("Could not select the database: ".mysql_error());

}

 

$Xbrukernavn = $_POST['brukernavn'];

$Xpassord = $_POST['passord'];

$Registrert = false;

 

$query = "SELECT Brukernavn FROM personer";

$result = mysql_query($query);

 

while ($row = mysql_fetch_array($result))

{

extract($row);

if (strtolower($brukernavn) == strtolower($Xbrukernavn))

{

$Registered = true;

break;

}

}

if (!$Registered)

{

echo "Dette brukernavnet er ikke registrert!";

}

 

if ($Registered)

{

$query = "SELECT * FROM personer WHERE Brukernavn='$Xbrukernavn'";

$result = mysql_query($query) or die("Feil brukernavn!");

$row = mysql_fetch_array($result, MYSQL_ASSOC);

extract($row);

if ($Passord == $Xpassord)

{

$_SESSION['S_Navn'] = $Navn;

$_SESSION['S_Adresse'] = $Adresse;

$_SESSION['S_Postboks'] = $Postboks;

$_SESSION['S_By'] = $By;

$_SESSION['S_Telefonnummer'] = $Telefonnummer;

$_SESSION['S_Brukernavn'] = $Brukernavn;

$_SESSION['S_Passord'] = $Passord;

header("Location: Hovedside.php");

exit;

echo "Du er nå innlogget, <strong>$Navn</strong>";

}

else echo "Du har skrevet inn feil passord, vennligst prøv igjen";

}

?>

-------------------------------------------------------------

 

Hovedside.php

-------------------------------------------------------------

<?php session_start(); ?>

<!DOCTYPE.....

<body>

<?php echo "$S_Navn"; ?> <---- Denne kommer ikke opp

<?php include("Function.php"); ?>

<table width="100%">

<tr>

<td><div align="center"><?php Overskrift(); ?></div>

.......

--------------------------------------------------------------

Databasen inneholder følgende: Navn, Adresse, Postboks, By, Telefonnummer, Brukernavn, Passord. Og tabellen kalles for 'personer'

 

Jeg sammenlignet dette også med sidene jeg laget før som virket, og de var satt opp nøyaktig slik.

Lenke til kommentar
Videoannonse
Annonse

Ser ikke noen åpenbare feil, men du kan jo droppe "header("Location: Hovedside.php");" og kjøre en echo av de ulike variablene, for å se om det faktisk er sessions det er noe rart med, eller om det er hentingen av data som glipper litt.

Lenke til kommentar
Ser ikke noen åpenbare feil, men du kan jo droppe "header("Location: Hovedside.php");" og kjøre en echo av de ulike variablene, for å se om det faktisk er sessions det er noe rart med, eller om det er hentingen av data som glipper litt.

 

 

Ja, tenkte selv på det, men det oppstod en feil da, denne meldingen kommer da:

Warning: extract() [function.extract]: First argument should be an array in C:\wamp\www\Kunstbutikken\Logg_inn.php on line 46

 

45: $row = mysql_fetch_array($result, MYSQL_ASSOC);

46: extract($row);

47: if ($Passord == $Xpassord)

 

Litt usikker på hva jeg må gjøre for å ordne det

Lenke til kommentar

Logg_inn.php

<?php session_start(); ?>

Skal det virkelig være en "?>" der?

 

Query feiler ikke hvis det ikke får noen rader tilbake.

$result = mysql_query($query) or die("Query failed!");
if (!$row = mysql_fetch_array($result, MYSQL_ASSOC)) {
exit('Could not find the user');
}

Lenke til kommentar

Kjør spørringen "$query = "SELECT * FROM personer WHERE Brukernavn='$Xbrukernavn'" manuelt med samme brukernavn og se om du faktisk får når det du er på jakt etter.

 

extract() sier at $row ikke er en gyldig array, men det skulle i grunnen mysql_fetch_array() fortalt i forveien hvis det var tilfellet. Prøv;

 

$row = mysql_fetch_array($result, MYSQL_ASSOC);

if ($row[Passord] == $Xpassord) { ...

 

Du burde deklarere en session til som forteller om brukeren er innlogget eller ikke, for å kjøre en sjekk ved ver sidevisning. Her kan jo hovedside.php vises selv om du ikke er innlogget - og det er nok helt sikkert derfor di ikke får opp noen navn heller.

Lenke til kommentar

Da har jeg testet ut ved å kjøre spørringen manuelt, fjernet extract() og skrev inn; if ($row[Passord] == $XPassord), men siden ble fortsatt helt tom da, med adressen: Logg_inn.php?brukernavn=Kenito&passord=Secret, hehe....

 

Skal prøve å deklarere en session til angående innlogget, så får vi se :)

Lenke til kommentar
Kjør spørringen "$query = "SELECT * FROM personer WHERE Brukernavn='$Xbrukernavn'" manuelt med samme brukernavn og se om du faktisk får når det du er på jakt etter.

 

Du burde deklarere en session til som forteller om brukeren er innlogget eller ikke, for å kjøre en sjekk ved ver sidevisning. Her kan jo hovedside.php vises selv om du ikke er innlogget - og det er nok helt sikkert derfor di ikke får opp noen navn heller.

 

Hmmm... sliter kanskje litt med å sette opp den session som forteller om brukeren er innlogget eller ikke. Har faktisk aldri gjort det før, hehe...

Laget en ny rute i databasen som kalles for "Innlogget", alle består av "Nei".

Nye jeg skriver inn består av fet skrift.

Sikkert feil med hvordan jeg starter regner jeg med, er fortsatt en stor amatør rundt slikt, hehe...

Men hvordan skal jeg fortsette egentlig?

--------------------------------------------------------------------------------------------

if ($Passord == $Xpassord) {

 

$query = "INSERT INTO Innlogget FROM personer WHERE Brukernavn='Xbrukernavn' AND Passord='XPassord' value ('Ja');

 

$_SESSION ['S_Navn'] = $Navn;

osv....

---------------------------------------------------------------------------------------------

Lenke til kommentar

Tips, denne kan du gjøre enklere

 

$query = "SELECT Brukernavn FROM personer";

$result = mysql_query($query);

$query = "SELECT Brukernavn FROM personer";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result))

{

extract($row);

if (strtolower($brukernavn) == strtolower($Xbrukernavn))

{

$Registered = true;

break;

}

}

if (!$Registered)

{

echo "Dette brukernavnet er ikke registrert!";

}

 

til

 

if(mysql_num_rows(mysql_query("SELECT Brukernavn FROM personer WHERE Brukernavn='$Xbrukernavn'"))==false)

echo 'Brukernavn finnes ikke';

 

Tror den ble rett.. :) Mulig du må flytte "==false" ett hakk..

Lenke til kommentar
Tips, denne kan du gjøre enklere

 

$query = "SELECT Brukernavn FROM personer";

$result = mysql_query($query);

$query = "SELECT Brukernavn FROM personer";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result))

{

extract($row);

if (strtolower($brukernavn) == strtolower($Xbrukernavn))

{

$Registered = true;

break;

}

}

if (!$Registered)

{

echo "Dette brukernavnet er ikke registrert!";

}

 

til

 

if(mysql_num_rows(mysql_query("SELECT Brukernavn FROM personer WHERE Brukernavn='$Xbrukernavn'"))==false)

echo 'Brukernavn finnes ikke';

 

Tror den ble rett.. :) Mulig du må flytte "==false" ett hakk..

 

Du og Eirikkkkk fikk meg nå til å se 2 problemer med det jeg hadde skrevet og glemt, hehe... Takker så mye for det, det første jeg la merke til med en gang var at jeg nå så at variabelen Registrert var feil. Den første var på Norsk og de andre var skrevet på Engelsk, pluss at jeg hadde glemt å skrive på "method = POST".

 

Skal bare prøve å rette opp disse feilene og sjekke ut om alt virker da som det skal, deretter skal jeg teste ut den enkle metoden som jeg ser at du har skrevet her :)

Endret av FreeZeMan
Lenke til kommentar

Hvis brukeren har logget inn, kjører du en: $_SESSION[innlogget] = true;

 

Og ved ver sidevisning kan du ha en

 

" if(!$_SESSION[innlogget]) { echo("UPS!"); exit; } "

 

if($variabel) sjekker om variabelen er satt til true, mens if(!$variabel) sjekker om variabelen ikke er satt til true.

 

Du trenger ikke ha noe verdi i databasen, sålangt at du ikke vil ha en mer avansert "remeber me"-funksjon på siden din.

Lenke til kommentar
Hvis brukeren har logget inn, kjører du en: $_SESSION[innlogget] = true;

 

Og ved ver sidevisning kan du ha en

 

" if(!$_SESSION[innlogget]) { echo("UPS!"); exit; } "

 

if($variabel) sjekker om variabelen er satt til true, mens if(!$variabel) sjekker om variabelen ikke er satt til true.

 

Du trenger ikke ha noe verdi i databasen, sålangt at du ikke vil ha en mer avansert "remeber me"-funksjon på siden din.

 

Jeg fikk ordnet resten av problemene og fikset sidevisningen du skrev her, men likevel så dukket det ikke opp noe her.

 

Satt inn "$_SESSION[innlogget] = true;" i lag med resten av $_SESSION listen jeg har, og skrev inn " if(!$_SESSION[innlogget]) { echo("UPS!"); exit; } "på Hovedsiden.php, men fortsatt ingenting som dukket opp.

 

Skal lese gjennom alt til punkt til prikke, det må være en feil et sted på en av sidene mine her, hehe

Lenke til kommentar

1. Lær hva mysql_query og mysql_fetch_array returnerer ved feil eller ingen resultat.

2. Du spør etter hele listen med personer for å loope igjennom, deretter spørre på nytt med det brukernavnet. Men du har jo allerede brukernavnet du skal spørre etter.

3. Du har en echo etter exit.

4. Hvis du vil vite korfor mysql_real_escape_string er der, søk opp SQL Injection.

5. Brukernavn og passord bør være case sensitive.

 

if ((!$brukernavn = $_POST['brukernavn']) || (!$passord = $_POST['passord'])) {
die('Missing username or password');
}

$query = "SELECT * FROM personer where Brukernavn = '" . mysql_real_escape_string($brukernavn) . "'";
$result = mysql_query($query) or die('Problem with database');
if ($bruker = mysql_fetch_array($result)) {
if ($bruker['passord'] === $passord) {
	// unset($bruker['passord'];
	$_SESSION['bruker'] = serialize($bruker);
	//for å få det ut:
	// $bruker = unserialize($_SESSION['bruker']);
	header("Location: Hovedside.php");
	exit();
	//Logget inn;
} else {
	else echo "Du har skrevet inn feil passord, vennligst prøv igjen";
}
} else {
echo "Dette brukernavnet er ikke registrert!";
}

Lenke til kommentar
<?php echo "$S_Navn"; ?> <---- Denne kommer ikke opp

 

Fant denne linjen i Hovedside.php -- skal det ikke være $_SESSION['Navn']; - jeg ser ikke at du lager $S_Navn variabelen noe sted...

<?php echo $_SESSION['S_Navn']; ?>
eller
<?php $bruker = unserialize($_SESSION['bruker']); echo $bruker['Navn']; ?>

Lenke til kommentar
<?php echo "$S_Navn"; ?> <---- Denne kommer ikke opp

 

Fant denne linjen i Hovedside.php -- skal det ikke være $_SESSION['Navn']; - jeg ser ikke at du lager $S_Navn variabelen noe sted...

<?php echo $_SESSION['S_Navn']; ?>
eller
<?php $bruker = unserialize($_SESSION['bruker']); echo $bruker['Navn']; ?>

 

Grunnen til at jeg skrev det slik: $S_Navn er grunnet at jeg brukte det før i tiden, rart, men da fungerte det perfekt, hehe... Men skal slutte med det nå :)

 

Grunnen med at jeg også hadde echo bak exit var rett og slett for at jeg ikke visste helt hva exit'en var for, før nå selvsagt, hehe... Og grunnen til Case sensitiviteten var bare grunnet at dette er prøvelser før jeg forandrer alt til slik som er det beste.

 

Har også nettopp fikset noe med databasen siden det alltid stod en feil der med noe som het for mcrypt der også, men det hjelpet heller ikke. For å være ærlig så virker det som om at jeg ikke klarer å lagre noe inn på $_SESSION, har tatt noen småe tester rundt det. Har også lest igjennom alt som står om $_SESSION på 2 bøker jeg har, men det er synd at det ikke står noe om hvordan man lagrer innhold fra databasen der.

 

For ca. 1 uke siden så brukte jeg denne som virket:

while ($result_row = mysql_fetch_row(($result))) {

echo 'Navn: '.$result_row[1] . '<br />';

echo 'Brukernavn: '.$result_row[6] . '<br />';

osv...

 

Testet den ut og den virker fortsatt

Lenke til kommentar

Da klarte jeg å få det lagret på $_SESSION :)

 

$_SESSION['S_Navn'] = $result_row[1];

 

Det viser vel at koden er feil skrevet slik at det ikke er mulig å skrive inn f.eks: $Navn, $Passord, $Brukernavn og tro at det er siktet til tabellen's lister i databasen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...