Avatar billede vejgaard82 Nybegynder
26. april 2007 - 10:05 Der er 24 kommentarer og
1 løsning

Login system laver fejl ved videresendelse til ny side.

Hej alle

Jeg er ny inden for programering. Men er i gang med at lave noget jeg ikke kan få til at fungere. Det skal nemlig logge ind på en nyside.

Jeg har lavet et login script som jeg ved virker hvis url ser sådan her ud:
www.minhjemmeside.dk/login.php
Sånår man logger ind går den videre til:
www.minhjemmeside.dk/cms/forside.php

Nu har jeg lavet en sidde med dette link da den selfølig er inden i noget andet.
www.minhjemmeside.dk/?p=login
Når jeg logger ind går den ikke videre den tjekker ikke mit script.

jeg smider mit script her nede. Skal lige sige min action ser således ud. action='?p=prov_login'
Det er det samme script som jeg bruger til min anden login system.

<?php
session_start();
include('connection.php');

if (isset($_GET["p"]) && $_GET["p"] == "prov_login") {
//definere bruger og kode
$bruger = $_POST['bruger'];
$kode = $_POST['kode'];
//Tjekker om Bruger eller Kodeord er tomme
if(empty($bruger) || empty($kode))
{
//Sender brugeren tilbage til login start
exit;
}
//Hvis bruger og kode er sat ind gå man videre til.
else
{
//Definerer det rigtige kodeord og det rigtige brugernavn.
//query
$query = mysql_query("SELECT * FROM $CMSusers WHERE bruger='". $_POST['bruger'] ."'") or die(mysql_error());
//Tjekker om der er én rækker i databasen der har det indtasetde brugernavn
//Dette gør dog, at flere brugere ikke må have samme brugernavn!
if(mysql_num_rows($query) == '1')
{
//Laver databasekaldet om til en liset (et array) i php.
$row = mysql_fetch_array($query);
//Tjekker om kodeordet i databasen er lig med det indtastede kodeord
if($row['kode'] == md5($_POST['kode'])){
//Brugeren har indtastet rigtige oplysninger, nu skal han gemmes i sessioner
$_SESSION['bruger'] = $_POST['bruger'];
$_SESSION['kode'] = $_POST['kode'];
//Derudover skal han sendes til en hemlig side, hvorpå der bliver tjekket om han er logget ind
header("location: cms/forside.php");
}
}
}
}
?>

Tak for dem der gider at hjælpe og læse det igennem.
Avatar billede vejgaard82 Nybegynder
26. april 2007 - 10:06 #1
Avatar billede lesp Nybegynder
26. april 2007 - 11:27 #2
Vil du betale for hjælp?
Avatar billede nixir Nybegynder
26. april 2007 - 13:39 #3
lesp >> tror du har misforstået hvordan denne side fungerer. Dette er ikke job-ansøgning, det er hjælp.

Man hjælper hvis man har tid/lyst/har brug for point - ikke for at tjene penge. Søg job andre steder.

Mvh.
Avatar billede vejgaard82 Nybegynder
26. april 2007 - 21:12 #4
Nej jeg vil gerne selv lære det lesp.
Tak for kommentar nixir.

Håber da at der er nogle der kan hjælpe.
Avatar billede nixir Nybegynder
29. april 2007 - 23:53 #5
Du gemmer variablen $bruger og $kode - men du bruger den kun 1 gang - i alle andre tilfælde benyttes $_POST['xx'] ... Der synes jeg næsten du må vælge ;)

SELECT * FROM $CMSusers ....
>> er du sikker på $CMSusers udskriver den rigtige tabel?

Du har ingen fejlhåndtering og kan derfor ikke se hvor fejlen sker ... til sidst afsluttes en masse l logiske test, men ingen af dem udskriver en fejl hvis der sker en fejl (forkert bruger, forkert pass, etc...)

Overvej evt. at lave et hurtigere tjek (vil virke så længe du ikke vil tjekke for om brugeren findes, men password er forkert):
mysql_query("SELECT * FROM $CMSusers WHERE bruger='". $bruger ."' kode='". md5($kode) ."'")

Husk tal ikke behøver at være angivet som strenge:
if(mysql_num_rows($query) == '1') {  =>  if(mysql_num_rows($query) == 1) {

Tjek det ... ud ...

Mit forslag til ændring af sidste 4 "}":
} else { echo "Forkert password"; exit; }
} else { echo "Forkert brugernavn"; exit; }
} else { echo "Både brugernavn og password skal udfyldes"; exit; }
}

Se om det kan hjælpe dig - og skriv gerne lidt om hvad den gør når du forsøger at logge ind - og den ikek virker ..
Avatar billede vejgaard82 Nybegynder
01. maj 2007 - 22:07 #6
SELECT * FROM $CMSusers ja det er jeg sikker på.

Kan se et problem i starten. Har jo lavet en exit; ved hvis der ikke er indtastet noget. Det virker ikke.
//Tjekker om Bruger eller Kodeord er tomme
if(empty($bruger) || empty($kode))
{
//Sender brugeren tilbage til login start
exit;

Har smidt
} else { echo "Forkert password"; exit; }
} else { echo "Forkert brugernavn"; exit; }
} else { echo "Både brugernavn og password skal udfyldes"; exit; }
}
ind men virker ikke med det nederest. Den har jeg taget væk.

Omkring det med at tjekke for fejl igennem om det er indtastet osv ved jeg ikke helt hvordan man gør.
Avatar billede nixir Nybegynder
02. maj 2007 - 00:03 #7
Kunne lyde som om det er her der er en fejl:

if(empty($bruger) || empty($kode))
{
//Sender brugeren tilbage til login start
exit;
}


Forsøg med hele denne kode (den skulle gerne udskrive noget i ALLE tilfælde - dermed kan vi se hvor fejlen sker):

if (isset($_GET["p"]) && $_GET["p"] == "prov_login") {
  $bruger = $_POST['bruger'];
  $kode = $_POST['kode'];
  if(empty($bruger) || empty($kode)) {
      echo "Brugernavn og password skal udfyldes!";
      exit;
  } else {
      $query = mysql_query("SELECT * FROM $CMSusers WHERE bruger='". $bruger ."'") or die(mysql_error());
      if(mysql_num_rows($query) == 1) {
        $row = mysql_fetch_array($query);
        if($row['kode'] == md5($kode)){
            $_SESSION['bruger'] = $bruger;
            $_SESSION['kode'] = $kode;
            // header("location: cms/forside.php");
                echo "Err1"; // Temp
            exit;
        } else {
            echo "Forkert password";
            exit;
        }
      } else {
        echo "Forkert brugernavn";
        exit;
      }
  }
}
echo "Err2"; // Temp
?>


"// Temp" + "//" foran "header("location: cms/forside.php");" fjernes hvis det hele bare virker :)
Avatar billede vejgaard82 Nybegynder
02. maj 2007 - 07:49 #8
Den skriver ingen fejl ved noget af det. Hellere ikke hvis jeg ikke skriver noget ind. Men der står Err2 oppe i toppen.
Avatar billede nixir Nybegynder
05. maj 2007 - 22:53 #9
if (isset($_GET["p"]) && $_GET["p"] == "prov_login") {

den går galt ...

tjek først om du skriver din URL rigtigt (fil.php?p=prov_login).

Prøv evt. med:
if ($_GET["p"] == "prov_login") {

Burde ikke ændre noget, men du laver sådan lidt dobbelt-tjek som egentlig bare tager serverkraft ...
Avatar billede vejgaard82 Nybegynder
20. maj 2007 - 19:15 #10
Mit problem er stadig at den ikke gider at åbne den anden side. Jeg er lige glad med om den laver en popup vindu med login. Men tror på grund af p så går den ikke videre.
Avatar billede vejgaard82 Nybegynder
20. maj 2007 - 19:44 #11
hvis jeg sætter direkte link ind i browser.
www.minhjemmeside.dk/login.php

Når jeg så logger ind går den videre til
www.minhjemmeside.dk/cms/forside.php

Hvis jeg smider den ind med p
www.minhjemmeside.dk/?p=login
Skriver den bare
www.minhjemmeside.dk/?p=prov_login
uden at gå videre.
Avatar billede nixir Nybegynder
20. maj 2007 - 22:39 #12
Jeg forstår ikke lige helt hvad du skriver...

Men det der går galt er som sagt at p ikke er = prov_login når du kører scriptet. Hvis p ikke er det, så bliver login jo ikke udført...

Jeg kan ikke se hvor p = login kommer ind i billedet :/ ?
Avatar billede vejgaard82 Nybegynder
20. maj 2007 - 23:16 #13
Det jeg prøver er at når jeg skriver mit script tjekker den om bruger og pass er rigtigt. Hvis det er det skal den åbne en ny side hvor man er logget ind.
Avatar billede nixir Nybegynder
21. maj 2007 - 00:47 #14
men når du poster dit login, hvor fører din action så hen? Altså, prøv at skriv dit form-tag for login...
Avatar billede vejgaard82 Nybegynder
21. maj 2007 - 08:27 #15
sådan her ser de hele ud.

<?php
session_start();
include('connection.php');

if ($_GET["p"] == "prov_login") {
  $bruger = $_POST['bruger'];
  $kode = $_POST['kode'];
  if(empty($bruger) || empty($kode)) {
      echo "Brugernavn og password skal udfyldes!";
      exit;
  } else {
      $query = mysql_query("SELECT * FROM $CMSusers WHERE bruger='". $bruger ."'") or die(mysql_error());
      if(mysql_num_rows($query) == 1) {
        $row = mysql_fetch_array($query);
        if($row['kode'] == md5($kode)){
            $_SESSION['bruger'] = $bruger;
            $_SESSION['kode'] = $kode;
            header("location: cms/index.php");
            exit;
        } else {
            echo "Forkert password";
            exit;
        }
      } else {
        echo "Forkert brugernavn";
        exit;
      }
  }
}
?>
<tr>
<td width="700" align='center'>
<br>For at benytte denne siden kræver vi at du har en bruger.<br>Login via formen herunder.<br>

<form name='login' method='post' action='?p=prov_login'>
<table border='0' cellspacing='0' cellpadding='0'>
<tr>
<td width='50%' align='right' class='bread_normal'>Brugernavn:</td>
<td><input name='bruger' type='text' value='' size='28'></td>
</tr>
<tr>
<td align='right' class='bread_normal'>Password:</td>
<td><input name='kode' type='password' value='' size='28'></td>
</tr>
<tr>
<td colspan='2' align='center'><input type='submit' name='submit' value='Login'> <input type='reset' name='reset' value='Nulstil'> <input name='login' type='hidden' value='login'>
</td>
</tr>
</table>
</form>
</td>
</tr>
Avatar billede nixir Nybegynder
21. maj 2007 - 13:14 #16
Sorry ...

Kan ikke se hvorfor det ikke skulle virke ...

hvad indeholder variablen $CMSusers ?? Den bliver ikke sat på noget tidspunkt i dit dokument, så kan ikke lige se hvordan den skal kunne blive hentet? Er du sikker på der ikke blot skal stå "CMSusers" uden "$" foran?
<?php
session_start();
include('connection.php');

if ($_GET["p"] == "prov_login") {
  $bruger = $_POST['bruger'];
  $kode = $_POST['kode'];
  if(empty($bruger) || empty($kode)) {
      echo "Brugernavn og password skal udfyldes!";
      exit;
  } else {
      $query = mysql_query("SELECT * FROM ".$CMSusers." WHERE bruger='". $bruger ."'") or die(mysql_error());
      if(mysql_num_rows($query) == 1) {
        $row = mysql_fetch_array($query);
        if($row['kode'] == md5($kode)){
            $_SESSION['bruger'] = $bruger;
            $_SESSION['kode'] = $kode;
            // header("location: cms/forside.php");
                echo "Err1"; // Temp
            exit;
        } else {
            echo "Forkert password";
            exit;
        }
      } else {
        echo "Forkert brugernavn";
        exit;
      }
  }
}
echo "Err2"; // Temp
?>

<form name='login' method='post' action='?p=prov_login'>
<table border='0' cellspacing='0' cellpadding='0'>
<tr>
<td width='50%' align='right' class='bread_normal'>Brugernavn:</td>
<td><input name='bruger' type='text' value='' size='28'></td>
</tr>
<tr>
<td align='right' class='bread_normal'>Password:</td>
<td><input name='kode' type='password' value='' size='28'></td>
</tr>
<tr>
<td colspan='2' align='center'><input type='submit' name='submit' value='Login'> <input type='reset' name='reset' value='Nulstil'> <input name='login' type='hidden' value='login'>
</td>
</tr>
</table>
</form>
Avatar billede vejgaard82 Nybegynder
22. maj 2007 - 08:38 #17
<?php
mysql_connect("localhost", ".....", "....");
mysql_select_db("...");

// ### Table settings
$CMSusers = "cms_brugere";
?>
Avatar billede vejgaard82 Nybegynder
22. maj 2007 - 08:40 #18
Jeg ved det er med $ da jeg bruger det hvis det er et normalt link.
Avatar billede nixir Nybegynder
22. maj 2007 - 17:16 #19
Hvad udskriver den oppe i toppen hvis du bruger mit script ??
Avatar billede nixir Nybegynder
22. maj 2007 - 17:19 #20
<?php
session_start();
include('connection.php');

if ($_GET["p"] == "prov_login") {
  $bruger = $_POST['bruger'];
  $kode = $_POST['kode'];
  if(empty($bruger) || empty($kode)) {
      echo "Brugernavn og password skal udfyldes!";
      exit;
  } else {
      $query = mysql_query("SELECT * FROM ".$CMSusers." WHERE bruger='". $bruger ."'") or die(mysql_error());
      if(mysql_num_rows($query) == 1) {
        $row = mysql_fetch_array($query);
        if($row['kode'] == md5($kode)){
            $_SESSION['bruger'] = $bruger;
            $_SESSION['kode'] = $kode;
            // header("location: cms/forside.php");
                echo "Err1"; // Temp
            exit;
        } else {
            echo "Forkert password";
            exit;
        }
      } else {
        echo "Forkert brugernavn";
        exit;
      }
  }
  echo "Err3"; // Temp

}
echo "Err2"; // Temp
?>
Avatar billede vejgaard82 Nybegynder
22. maj 2007 - 18:06 #21
http://www.serviceakademiet.dk/test/?p=login

inden jeg trykker noget ind skriver den Err2

Når jeg trykker info ind går den bare videre til en side uden noget på.
Avatar billede nixir Nybegynder
22. maj 2007 - 22:26 #22
hvilken kode benytter du nu?

hvis du bruger min med "Err" meddellelser, burde det være klart hvor det går galt...
Avatar billede vejgaard82 Nybegynder
23. maj 2007 - 07:20 #23
jeg bruger din kode.
Avatar billede nixir Nybegynder
23. maj 2007 - 14:13 #24
der er noget der går helt galt, for mit script burde udskrive noget tekst i alle tilfælde ... alle ...

Men gør den åbenbart ikke, så kan jeg desværre ikke hjælpe dig...
Avatar billede vejgaard82 Nybegynder
06. november 2007 - 17:37 #25
tak
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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