Avatar billede delphiuser Mester
24. september 2006 - 19:59 Der er 45 kommentarer og
1 løsning

login problem

Hej eksperter...

Jeg har så mange problemer med mit login system så det halve bare kunne være nok...

Nå men det ser ud til at virke godt nok bortset fra at det ikke vil sende brugeren videre til den index side der skal bruges...
jeg får ikke nogen fejlmedelse så kan ikke give jer nogen info hvad det angår... i kan jo prøve at teste det på http://www.joy-palaze.dk/test

brugernavn: test
adgangskode: 1234

mer her kommer min do_login.php

<?php
session_start();
require('inc/data.php');
if(isset($_POST['login'])) {
$sql = mysql_query("SELECT id, navn, user, pass FROM bruger WHERE user = '$user' AND pass = '$pass'") or die(mysql_error());
if(mysql_num_rows($sql) == "1" ) {
while($row = mysql_fetch_array($sql)) {
$_SESSION['id'] = $row['id'];
$_SESSION['user'] = $row['user'];
$_SESSION['navn'] = $row['navn'];
mysql_query("INSERT INTO online SET id =". $_SESSION['id'] ." AND navn =". $_SESSION['navn'] ."") or die(mysql_error());
header("location:bruger/index.php");
}
} else {
header("location:login.php");
}
}
?>

håber i kan fortælle mig hvad problemet er...
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:07 #1
Nu bruger du jo "GET" i formens metode - det da dumt? - så kan andre personer se hvad du har indtastet, men anyways - det var ikke det der blev spurgt om.

Prøv følgende;

<?php
session_start();

include("inc/data.php");
if( isset ( $_POST["login"]) )
{
  $sql = mysql_query("SELECT `id`, `navn`, `user`, `pass` FROM `bruger` WHERE `user` = '" . $_GET['user'] . "' AND `pass` = '" . $_POST['pass'] . "'") or die( mysql_error() );
 
if( mysql_num_rows( $sql ) == 1 )
{
$row = mysql_fetch_assoc($sql);

$_SESSION["id"] = $row["id"];
$_SESSION["user"] = $row["user"];
$_SESSION["navn"] = $row["navn"];

mysql_query("INSERT INTO `online` SET `id` = '". $_SESSION['id'] ."' AND `navn` = '". $_SESSION['navn'] ."'") or die( mysql_error() );

header("Location: bruger/index.php");
} else {
header("Location: login.php");
}
}
?>
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:09 #2
-- og måske ændre;
if( isset ( $_POST["login"]) )

til

if( isset ( $_GET["navn"]) && isset ( $_GET["pass"] ) )
Avatar billede delphiuser Mester
24. september 2006 - 20:10 #3
der sker ikke noget... desværre
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:13 #4
Nå - nu bruger du POST igen :-)
Så skal du også lige rette $_GET til $_POST i stedet.
Avatar billede delphiuser Mester
24. september 2006 - 20:13 #5
det har jeg rettet :)
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:15 #6
Hvad går der galt? - får du nogle fejl? - hvornår går det galt?

Beskriv lige hvad du gør, hvornår det sker, om du får fejl, o.lign - så vi bedre kan hjælpe dig med problemet
Avatar billede delphiuser Mester
24. september 2006 - 20:18 #7
Jeg får ikke nogen fejl... det kan du se ved selv at prøve at logge på...

med de info jeg gave i starten... Problemet er at der jo ikke kommer nogen fejl
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:21 #8
Prøv lige

<?php
session_start();

include("inc/data.php");
if( !isset ( $_POST["navn"]) && !isset ( $_POST["pass"] ) )
{
  $sql = mysql_query("SELECT `id`, `navn`, `user`, `pass` FROM `bruger` WHERE `user` = '" . $_POST['user'] . "' AND `pass` = '" . $_POST['pass'] . "'") or die( mysql_error() );

if( mysql_num_rows( $sql ) == 1 )
{
$row = mysql_fetch_assoc($sql);

$_SESSION["id"] = $row["id"];
$_SESSION["user"] = $row["user"];
$_SESSION["navn"] = $row["navn"];

mysql_query("INSERT INTO `online` SET `id` = '". $_SESSION['id'] ."' AND `navn` = '". $_SESSION['navn'] ."'") or die( mysql_error() );

//header("Location: bruger/index.php");
echo "bliver fint kørt: " . $_SESSION['id'] . $_SESSION['user'];
} else {
echo "fejl..";
//header("Location: login.php");
}
}
?>


-- hvad siger den?
Avatar billede delphiuser Mester
24. september 2006 - 20:23 #9
stadigvæk blank skærm... den skriver intet
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:28 #10
Ret din form's action til

<form action="do_login.php?sender=true" method="post" enctype="multipart/form-data">

Og sæt denne kode ind;

<?php
session_start();

include("inc/data.php");
if( !isset ( $_GET["sender"]) )
{

$sql = mysql_query("SELECT `id`, `navn`, `user`, `pass` FROM `bruger` WHERE `user` = '" . $_POST['user'] . "' AND `pass` = '" . $_POST['pass'] . "'") or die( mysql_error() );

if( mysql_num_rows( $sql ) == 1 )
{
$row = mysql_fetch_assoc( $sql ) ;

$_SESSION["id"]  = $row["id"];
$_SESSION["user"] = $row["user"];
$_SESSION["navn"] = $row["navn"];

mysql_query("INSERT INTO `online` SET `id` = '" . $_SESSION['id'] . "' AND `navn` = '" . $_SESSION['navn'] . "'") or die( mysql_error() );

//header("Location: bruger/index.php");
echo "bliver fint kørt: " . $_SESSION['id'] . $_SESSION['user'];
} else {
echo "fejl..";
//header("Location: login.php");
}
}
?>
Avatar billede delphiuser Mester
24. september 2006 - 20:34 #11
jeg ved ikke lige hvad der er galt. Men der er stadigvæk blank skærm
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:35 #12
Øøøh.. hvorfor bruger du desuden også en enctype ???

Har du overvejet at fjerne det ? :)

<form action="do_login.php?sender=true" method="post" enctype="multipart/form-data">

til

<form action="do_login.php?sender=true" method="post">
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:43 #13
Prøv lige ret til denne kode, og udskriv alt outputtet:

<?php
session_start();

include("inc/data.php");
echo "SIDEN KALDT! <br />";

if( !isset ( $_GET["sender"]) )
{

echo "DEBUG #0 - TEST: Vi er inde <br >";
echo "Start debugger: <br />";
print_r($_POST);

$sql = mysql_query("SELECT `id`, `navn`, `user`, `pass` FROM `bruger` WHERE `user` = '" . $_POST['user'] . "' AND `pass` = '" . $_POST['pass'] . "'") or die( mysql_error() );

echo "DEBUG #1 - SQL: " . $sql;
echo "<br />";

echo "DEBUG #2 - antal: " . mysql_num_rows($sql);

if( mysql_num_rows( $sql ) == 1 )
{
$row = mysql_fetch_assoc( $sql ) ;

$_SESSION["id"]  = $row["id"];
$_SESSION["user"] = $row["user"];
$_SESSION["navn"] = $row["navn"];

echo "DEBUG #3 - SESSION NAVNE: <br />";
print_r($_SESSION);
echo "<br />DEBUG #4: ROW NAVNE: <br />";
print_r($row);
mysql_query("INSERT INTO `online` SET `id` = '" . $_SESSION['id'] . "' AND `navn` = '" . $_SESSION['navn'] . "'") or die( mysql_error() );

//header("Location: bruger/index.php");
echo "bliver fint kørt: " . $_SESSION['id'] . $_SESSION['user'];
} else {
echo "fejl..";
//header("Location: login.php");
}
}
?>
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:44 #14
Desuden - når jeg opretter en bruger og logger ind, kan jeg sagtens komme ind?

Det må være forkert brugernavn og password så :-)
Avatar billede delphiuser Mester
24. september 2006 - 20:49 #15
har lige fået den til at virke...
Avatar billede webudvikleren Nybegynder
24. september 2006 - 20:51 #16
Nå - okay.. Hvad gjorde du så?
Avatar billede delphiuser Mester
24. september 2006 - 21:01 #17
Jeg måtte lave en almindelig login side i stedet for at have min form som den var før...
Avatar billede delphiuser Mester
24. september 2006 - 21:03 #18
men tilgengæld har jeg et problem med at den opretter bare et tomt felt i min online tabel. den skriver ikke id nummeret fra den bruger der logger på eller navnet.
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:03 #19
Okay, så kan jeg ikke rigtigt se at min hjalp gav nogle kabale..
Avatar billede delphiuser Mester
24. september 2006 - 21:03 #20
jo din hjælp gav meget....
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:03 #21
Se om din database, har udfyldt 'id' rigtigt. Om den overhovedet indeholder noget
Avatar billede delphiuser Mester
24. september 2006 - 21:06 #22
den opretter en tom række hvor der står
id 0 navn det er tomt
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:06 #23
Så tillader jeg mig, at smide et svar
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:07 #24
Prøv lige export din 'user' tabel. Jeg tror du har lavet lidt fejl i din id-kolonne
Avatar billede delphiuser Mester
24. september 2006 - 21:08 #25
hvordan export?
Avatar billede delphiuser Mester
24. september 2006 - 21:08 #26
CREATE TABLE `bruger` (
  `id` bigint(20) NOT NULL auto_increment,
  `user` varchar(25) NOT NULL default '',
  `pass` varchar(25) NOT NULL default '',
  `navn` varchar(50) NOT NULL default '',
  `mail` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:09 #27
I PhpMyAdmin, ved menuerne;
StrukturStruktur      SQL        Eksport      Søg        Foresp. via eks.          Operationer        SletSlet     

Tryk Eksport og vælg din user tabel
Avatar billede yHec Novice
24. september 2006 - 21:10 #28
Er du sikker på, at du har sat id til auto_increment?

/y
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:10 #29
Kan du finde ud af at rette de forskellige kolonner, ellers slet din tabel, og indsæt den nye i SQL-menuen:

CREATE TABLE `bruger` (
  `id` int(11) NOT NULL auto_increment,
  `user` varchar(25) NOT NULL default '',
  `pass` varchar(25) NOT NULL default '',
  `navn` varchar(50) NOT NULL default '',
  `mail` varchar(100) NOT NULL default '',
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 ;
Avatar billede delphiuser Mester
24. september 2006 - 21:12 #30
så er den blevet rettet
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:13 #31
Så opret dine nye brugere igen - så skulle det gerne fungere igen :-)
Avatar billede delphiuser Mester
24. september 2006 - 21:16 #32
den skriver stadigvæk ikke noget i min online tabel
andet end en tom række
Avatar billede delphiuser Mester
24. september 2006 - 21:20 #33
kan der ikke være en fejl i denne line

mysql_query("INSERT INTO `online` SET `id` = '". $row['id'] ."' AND `navn` = '". $row['navn'] ."'") or die( mysql_error() );
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:21 #34
Ups.. min fejl endnu engang..

Det fordi du indsætter til 'id'

Lav et ekstra felt i online-databasen, og indsæt 'fid' istedet for id, og brug følgende;

mysql_query("INSERT INTO `online` (`fid`, `navn`) VALUES ('" . $_SESSION['id'] . "','" . $_SESSION['navn'] . "')") or die( mysql_error() );

-- id bruges jo normalt til at udtrække id'et på kolonnerne ud på.
Desuden havde du en
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:21 #35
Cut lige "Desuden havde du en"

Der skulle stå;

Desuden brugte du en UPDATE-syntax til en INSERT INTO syntax.
Avatar billede delphiuser Mester
24. september 2006 - 21:22 #36
fid skal den være varchar eller int?
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:23 #37
int(11), og den skal _IKKE_ være "auto_increment"!
Avatar billede delphiuser Mester
24. september 2006 - 21:23 #38
ok
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:24 #39
`fid` int(11) NOT NULL default '0',
Avatar billede delphiuser Mester
24. september 2006 - 21:27 #40
kan man lave en logud side sådan her?

<?php
session_start();
include("inc/data.php");

$sql = mysql_query("DELETE FROM online WHERE navn =". $_SESSION['navn'] ." AND fid=". $_SESSION['id'] ."");

session_destroy();

header("location:index.php");

?>
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:28 #41
Sagtens!
Avatar billede hmortensen Nybegynder
24. september 2006 - 21:28 #42
Der bliver konsekvent testet på !isset($var), altså om den IKKE er sat, hvilket er forkert.

<?php
session_start();

include("inc/data.php");
if( !isset ( $_GET["sender"]) )
{
  if( mysql_num_rows( $sql ) == 1 )
  {
    echo "bliver fint kørt: " . $_SESSION['id'] . $_SESSION['user'];
  } else {
    echo "fejl..";
  }
}
?>

Som det kan ses, hvis først if sætning er falsk, vil der ingenting ske, derfor blank skærm.

Envidere var hans SQL rigtig med primær nøgle, så igen grund til at lave den til unik nøgle i stedet.
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:29 #43
Men det kan du vel selv afprøve - det jo også et spørgsmål for sig selv :-)

Held og lykke med det, og tak for points :)
Avatar billede delphiuser Mester
24. september 2006 - 21:30 #44
Men den vil ikke slette fra min online tabel :(
Avatar billede webudvikleren Nybegynder
24. september 2006 - 21:32 #45
Du mangler ' rundt om navn, ellers vil den tro det er:
WHERE navn = peter alfen

man bruger normalt ikke ' rundt om tal ( integer ), for det bliver jo;
WHERE fid = 1

og derfor ingen mellemrum, som mysql tror kommer til at blive noget helt andet

Prøv:

<?php
session_start();
include("inc/data.php");

mysql_query("DELETE FROM `online` WHERE `navn` ='". $_SESSION['navn'] ."' AND `fid`=". $_SESSION['id'] ."");

session_destroy();

header("location:index.php");

?>
Avatar billede delphiuser Mester
24. september 2006 - 21:39 #46
tak min ven nu virker det
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester