Gå til innhold

Problemer med sessions


Anbefalte innlegg

Har et login-script som ser sånn ut:

 

<?php

session_start();

$id = $_POST['ID'];
$password = $_POST['Passwd'];

include('connect.php');

$query = "SELECT * FROM users WHERE id='$id' and Passwd='".md5($password)."'";
$result= mysql_query($query) or die ("Could not execute query : $query." . mysql_error());

if (mysql_num_rows($result) == 0)
{

echo('Brukernavnet og/eller passordet er feil. Vennligst prøv igjen.');

}
else
{
$r=mysql_fetch_array($result);
$login_username=$r["id"];
$_SESSION['login_username'] = $login_username;
Header("Location: main.php");
}

  /* Lukker forbindelse */
  mysql_close($link);

?>

 

Når jeg skal logge inn får jeg:

 

Notice: Undefined index: id in D:\Programfiler\Apache Group\Apache2\htdocs\Treningsdagbok\login.php on line 22

 

Warning: Cannot modify header information - headers already sent by (output started at D:\Programfiler\Apache Group\Apache2\htdocs\Treningsdagbok\connect.php:15) in D:\Programfiler\Apache Group\Apache2\htdocs\Treningsdagbok\login.php on line 24

 

Noen tips?

Lenke til kommentar
Videoannonse
Annonse

Problemet ligger i henting av data fra $_POST

 

Du kan f.eks gjøre det slik :shrug:

$id = empty($_POST['ID']) ? false : $_POST['ID'];
$password = empty($_POST['Passwd']) ? false : $_POST['Passwd'];

if($id !== false && $password !== false)
{
 // kjør sql query, login etc her
}
else
{
 // vis feilmelding om at password/id mangler?
}

 

Edit: endret litt på koden

Endret av FuLu
Lenke til kommentar

Hmm, glemte å se på linje som koden feilet på eller hvor den fikk notice.

$login_username=$r["id"]; bør helst være ['id'].. men du er 100% sikker på at den heter 'id' og ikke 'ID' i databasen? Hvis du blir kvitt dette problemet, så vil du også bli kvitt meldingen om "Headers already sent..."

Lenke til kommentar
men du er 100% sikker på at den heter 'id' og ikke 'ID' i databasen? Hvis du blir kvitt dette problemet, så vil du også bli kvitt meldingen om "Headers already sent..."

Uuuuups....

 

Men hvorfor vil den ikke forwarde til main.php?

Lenke til kommentar

Har nå koden:

 

<?php

session_start();

$id = $_POST['id'];
$password = $_POST['Passwd'];

include('connect.php');

$query = "SELECT * FROM users WHERE id='$id' and Passwd='".md5($password)."'";
$result= mysql_query($query) or die ("Could not execute query : $query." . mysql_error());

if (mysql_num_rows($result) == 0) {

echo('Brukernavnet og/eller passordet er feil. Vennligst prøv igjen.');

}
else {

$r=mysql_fetch_array($result);
$login_username=$r['id'];
$_SESSION['login_username'] = $login_username;
Header("Location: main.php");
exit();
}

  /* Lukker forbindelse */
  mysql_close($link);

?>

 

Feilmeldingen nå er:

 

Parse error: parse error, unexpected '<' in D:\Programfiler\Apache Group\Apache2\htdocs\Treningsdagbok\main.php on line 19

 

Noen idé?

Lenke til kommentar
Feilen ligger hvertfall ikke i koden du pastet nå, den ligger i main.php ;) Paste koden derfra du.

Feilen i main.php var bagatellmessig.

 

Men har et nytt problem:

 

<?php

session_start();
if ($_SESSION['login_username']=="") {
header("Location: login.html");
exit();
}

else {
header("Location: main.php");
exit();
}
?>

 

Gir feilmeldingen:

 

Warning: Cannot modify header information - headers already sent by (output started at D:\Programfiler\Apache Group\Apache2\htdocs\Treningsdagbok\menu.php:4) in D:\Programfiler\Apache Group\Apache2\htdocs\Treningsdagbok\menu.php on line 5
Lenke til kommentar

Ok, du må passe på at header() og session_start() alltid kommer først, aldri etter du har echo'a ut tekst til nettleseren, dette vil krølle til med header opplegg, siden dette skal alltid komme først ;)

 

Struktur jeg pleier å ha er:

  • logikk/header/login/sjekking av $_POST osv først
  • annen logikk som innbærer layout/grafisk/visuelt kommer til slutt

Endret av FuLu
Lenke til kommentar

Har også et søke-script:

 

<?php
error_reporting (E_ALL ^ E_NOTICE);

session_start();
if($_SESSION['login_username']=="") {
echo('Du må logge inn først');
}

else {

$id = $_SESSION['login_username'];
$database = 'treningsdagbok';
$table = 'data';

echo('
<html>
<head>
<title>GSF: Treningsdagbok</title>
</head>

<body>

<h1>Søk etter oppføring</h1>

<form action="search.php" method="POST">

Søketekst: <input name="search" type="text">

<input type="submit">

</form>
');

if($_POST['search']!="") {

$search = $_POST['search'];

include 'connect.php';

$query = "SELECT * FROM $table WHERE MATCH (Erfaringer) AGAINST ('$search')";
$result = mysql_query($query) or die("Spørring feilet : " . mysql_error());

  /* Skriver ut resultatet til HTML */
echo "<table border>\n<tr>";

$fields = mysql_list_fields($database, $table);
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++)
  { echo "<th>" . mysql_field_name($fields, $i) .  "</th>"; }

echo "</tr>";

  while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
      print "\t<tr>\n";
      foreach ($line as $col_value) {
          print "\t\t<td>$col_value</td>\n";
      }
      print "\t</tr>\n";
  }
  print "</table>\n";

   /* Lukker forbindelse */
  mysql_close($link);

}

echo('
</body>
</html>
');

}

?>

 

Noen peiling på hvorfor det ikke vil virke? Det returnerer aldri noen oppføringer...

 

Sikkert en enkel sak. Har surret mye unødig i dag.

Lenke til kommentar

Det er mulig du må ha spørringen din i en annen rekkefølge:

$columns = mysql_num_fields($fields);
$query = "SELECT * FROM $table WHERE MATCH (Erfaringer) AGAINST ('$search')";
$result = mysql_query($query) or die("Spørring feilet : " . mysql_error());
for ($i = 0; $i < $columns; $i++)

Endret av FuLu
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...