webForumDet fria alternativet

Session konstigheter

4 svar · 223 visningar · startad av henkeny

henkenyMedlem sedan maj 200152 inlägg
#1

Vid min inloggning har jag skapat en session "user_id" enligt nedanstående:

-------main.php----------

// Någon vill logga in
if (isset($_POST['login'])) {

//Letar efter angivet lösenord/användarnamn i databasen
$query = mysql_query("SELECT * FROM users WHERE username='{$_POST['username']}' AND password='{$_POST['password']}'");

if (mysql_num_rows($query) == 1)
{
$row = mysql_fetch_array($query) or die(mysql_error());
// Rätt användare och lösenord, logga in
$_SESSION['login'] = "true";
$_SESSION['user_id'] = $row['id'];

} else {

  // Felaktigt inloggning 
  echo '\<b\>\<p\>Felaktig inloggningsinformation!!\<br\>var god försök igen.\</b\>'; 

}

}

På en annan sida ska den hämta data om användaren efter vilken person som är inloggad. Har skrivit så här:

-------varsida.php----------

$sqlUser = "SELECT * FROM users WHERE username = '$user_id'";
$result=mysql_query("$sqlUser");

while ( $row = mysql_fetch_array($result) )
{ $forName = $row['foretagsnamn'];
$konPerson = $row['kontaktperson'];
$email = $row['email'];
$ptext = $row['prestext'];
}

print "<H3>Välkommen till $forName </H3><p>";

Eftersom jag inte alls är haj på detta fattar jag inte vad som är fel. Får inget felmeddelande. Antar att när min session sätts så får den inget värde. Därför hittar den ingen data och inget skrivs ut, eller?

SPiNMedlem sedan mars 20007 896 inlägg
#2

Du måste använda session_start () överst på båda sidorna, och session_register () när du sätter dina sessionsvärden.

Din kod borde se ut så här:
main.php

<?php
session_start ();
...
if (isset($_POST['login'])) {
     //Letar efter angivet lösenord/användarnamn i databasen
     $query = mysql_query("SELECT id FROM users WHERE username='{$_POST['username']}' AND password='{$_POST['password']}'");

     if (mysql_num_rows($query) == 1) {
          $row = mysql_fetch_array($query) or die(mysql_error());
          // Rätt användare och lösenord, logga in
          $login = "true";
          $user_id = $row[ 'id' ];

          session_register ( "login" );
          session_register ( "user_id" );
     } else {
          // Felaktigt inloggning
          echo '<b><p>Felaktig inloggningsinformation!!<br>var god försök igen.</b>';
     }
}
?>

varsida.php

<?php
session_start ();
...
$sqlUser = "SELECT * FROM users WHERE username = '" . $_SESSION[ 'user_id' ] . "'";
$result=mysql_query($sqlUser);

while ( $row = mysql_fetch_array($result) ) {
     $forName = $row['foretagsnamn'];
     $konPerson = $row['kontaktperson'];
     $email = $row['email'];
     $ptext = $row['prestext'];
}

print "<H3>Välkommen till $forName </H3><p>";
?>
henkenyMedlem sedan maj 200152 inlägg
#3

Tackar och bockar!!

Det märks att man är nybörjare på detta. Men nu funkar det kanon.

Tack igen!!

SPiNMedlem sedan mars 20007 896 inlägg
#4

Varsågod. :)

Ett litet tips på hur du kan göra din kod snyggare på varsida.php:

<?php
session_start ();
...
$sqlUser = "SELECT foretagsnamn, kontaktperson, email, prestext FROM users WHERE username = '" . $_SESSION[ 'user_id' ] . "'";
$result = mysql_query($sqlUser);

$forName = mysql_result ( $result, 0 );
$konPerson = mysql_result ( $result, 1 );
$email = mysql_result ( $result, 2 );
$ptext = mysql_result ( $result, 3 );

print "<H3>Välkommen till $forName </H3><p>";
?>

Loopen är onödig, eftersom att du bara hämtar data från en rad. :)

Som du märker har jag också plockat bort stjärnan ( * ) från dina SQL-frågor. Den behövs inte då du bara använder ett par fält, bättre att ange vilka fält man ska arbeta med. :)

henkenyMedlem sedan maj 200152 inlägg
#5

Tack så mycket igen :-)

Tack för tipsen. Alla tips är guld värda så här i början. Började med PHP-programmering i går så jag är inte så haj på det än :-)

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