Gå til innhold

Problemer med sessions


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet (endret)

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
Skrevet

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..."

Skrevet
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?

Skrevet

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é?

Skrevet
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
Skrevet (endret)

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
Skrevet

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.

Skrevet (endret)

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

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...