Avatar billede stenger Nybegynder
10. februar 2007 - 16:51 Der er 14 kommentarer og
1 løsning

Problemer med redirect/header

Prøver lige igen...håber der er nogen, der er klogere end mig :)

Problemet er at når jeg submitter det korrekte data (i forhold til databasen), så sker der intet. Min form bliver bare tømt og det virker som om header(location:admin.php); bare bliver sprunget totalt over. Ved korrekt indtastning bliver man ihvertfald ikke ldet videre til den side, men bliver på index.php-siden.

Nogen der kan se hvad der sker?

*** KODE ***

<?php
session_start();


echo '

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-store">
<meta name="robots" content="nocache" />
<title>Lager & Service Klubben</title>
<link rel="stylesheet" href="css/style.css" />

<!--[if IE]> <style type="text/css">@import "css/IE-override.css";</style>
<![endif]-->

</head>

<body>

<div id="wrapper">


<div id="container">

<img src="images/toplogo.jpg" alt="" />


<div id="menu_layer">

<ul>
<li>ADMINISTRATION</li>
</ul>

</div>

<div id="input_layer">

<form name="login" method="POST">
<p class="input_brugernavn">Brugernavn:</p>
<input type="text" name="username" maxlength="18" class="bruger_inputbox" />

<p class="input_password">Password:</p>
<input type="password" name="password" maxlength="18" class="password_inputbox" />

<input type="submit" value="Login" name="mysubmit" class="submit_button" />
<input type="hidden" name="submitted" value="TRUE" />

</form>

</div>


</div>

</div> <!-- End of Wrapper !-->

<div id="shadow_bottom"></div>

</body>
</html>';


if (isset($_POST['submitted'])) {

require_once ('mysql_connect.php');


if (!empty($_POST['username'])) {
    $u = $_POST['username'];
    } else {
    echo '<p><font color="red" size="+1">Indtast Brugernavn!</font></p>';
    $u = FALSE;
    }
   

if (!empty($_POST['password'])) {
    $p = $_POST['password'];
    } else {
    echo '<p><font color="red" size="+1">Indtast Password!</font></p>';
    $p = FALSE;
    }


if ($u && $p) {

$usertable="users";

$query = "SELECT * FROM $usertable WHERE username='$u' AND password='$p'";
$result = mysql_query($query);


if (@mysql_num_rows($result) == 1) {

$_SESSION["adgang"] = 1;

header("Location:admin.php");
exit();
        }

    }   
}

?>
Avatar billede coderdk Praktikant
10. februar 2007 - 16:57 #1
Du har echo i starten - Du kan *ikke* skrive noget ud før du lave en header... Du kan måske omgå det ved at starte din fil med ob_start()
Avatar billede intenz Novice
10. februar 2007 - 17:13 #2
eller bare sætte echo'en ned i bunden
Avatar billede stenger Nybegynder
10. februar 2007 - 17:31 #3
Det virker hvis man sætter ob_start(); ind... må lige finde ud af hvorfor :)

Et andet spørgsmål som I måske kan svare på.... jeg laver en $_SESSION["adgang"] = 1;

Hvorledes skal jeg på de følgende sider skrive det, således at man ikke direkte kan komme til en underside (altså springe over login)...

Jeg tænker at det er noget med if (isset($_SESSION["adgang" == 1])) {
print sideindhold

} else {

header("location:index.php");
exit();
}

Men det vil ikke rigtigt virke? Nogen forslag?
Avatar billede coderdk Praktikant
10. februar 2007 - 20:07 #4
ob_start() venter med at skrive til browseren til alt er færdigt. Derfor kan du bruge header() efter du har skrevet noget ud...

Jeg antager at du kun sætter $_SESSION['adgang'] hvis man er logget ind. Derfor burde dette virke:

if ( isset( $_SESSION['adgang'] ) )
{
  // Ok
}
else
{
  header("location:index.php");
  exit();
}
Avatar billede stenger Nybegynder
10. februar 2007 - 20:24 #5
Yes... det virker! Smid et svar!

Med mindre du vil hjælpe med endnu en ting? :)

Jeg vil gerne lave en md5´er på passwords. Det indtasted password fra en inputboks bliver gemt i en variable ($p).

Jeg har forsøgt at at lave en ny variabel, f.eks. $encrypt_pass = md5('$p') og så kalde  $encrypt_pass fra min SQL-query. No dice...

Jeg har også prøvet at køre direkte fra SQL-query med "password=md5('$p');" men heller ingen effekt.

Password er allerede som md5 i databasen, så det er ikke der den ligger.
Avatar billede coderdk Praktikant
11. februar 2007 - 19:10 #6
$encrypt_pass = md5($p)

$encrypt_pass burde du så kunne gemme i databasen :)
Avatar billede stenger Nybegynder
11. februar 2007 - 19:57 #7
Ja, kan ikke rigtig få det til at virke...

password er gemt direkte som i md5-format i selve databasen, så når man indtaster sit "ukrypterede" password ind i formen, så skal det i mit PHP omdannes til md5 og derefter køres igennem min SQL-query og så enten afvises eller godkendes.

Af en eller anden grund vil den ikke tage det. Virker fint når jeg kører mine passwords uden md5... strange :)

Anyways, her er point for hjælpen.
Avatar billede coderdk Praktikant
11. februar 2007 - 21:27 #8
Erh, vi skal nok se noget kode hvis vi skal have en chance for at se hvad der kan være galt... Hvor stort er password feltet? Det bør være CHAR(32) eller VARCHAR(32)...
Avatar billede stenger Nybegynder
11. februar 2007 - 21:39 #9
Koden er sådan set ikke så indviklet...

Det indtastede bliver gemt i en variabel ($p) og dette checkes så ved en query.

Så ville jeg jo gerne MD5´e variablen og dermed få det indtastede til at matche databasen. Password findes kun som MD5 i selve databasen og er der ikke ukrypteret.

Og ja, rækken er sat til VARCHAR(32)...

Men koden ser sådan ud...hvis du kunne komme med et forslag, så gør du mig sgu glad :)

**** KODE ****

if (isset($_POST['submitted'])) {

require_once ('mysql_connect.php');


if (!empty($_POST['username'])) {
    $u = $_POST['username'];
    } else {
    echo '<p class="error_username">Indtast Brugernavn!</p>';
    $u = FALSE;
    }

if (!empty($_POST['password'])) {
    $p = $_POST['password'];
    } else {
    echo '<p class="error_password">Indtast Password!</p>';
    $p = FALSE;
    }


if ($u && $p) {

$usertable="users";


$query = "SELECT * FROM $usertable WHERE username='$u' AND password='$p'";
$result = mysql_query($query);


if (!@mysql_num_rows($result) == 1) {

echo '<p class="error_entry">Forkert Brugernavn eller Password!</p>';

} else {

$_SESSION["adgang"] = 1;

header("Location: admin.php");
ob_end_flush();
exit();
        }

    }   
}

?>
Avatar billede coderdk Praktikant
11. februar 2007 - 21:52 #10
Passwords skal naturligvis være GEMT i databasen som MD5-hashede strenge. Pas også på SQL-injection. Har rettet lidt til, men den burde virke:

require_once ('mysql_connect.php');

if (isset($_POST['submitted']))
{
    if (!empty($_POST['username']))
    {
        $u = mysql_real_escape_string( $_POST['username'] );
    } else
    {
        echo '<p class="error_username">Indtast Brugernavn!</p>';
        $u = FALSE;
    }

    if (!empty($_POST['password']))
    {
        $p = md5( $_POST['password'] );
    }
    else
    {
        echo '<p class="error_password">Indtast Password!</p>';
        $p = FALSE;
    }

    if ($u && $p)
    {
        $usertable="users";

        $query = "SELECT * FROM $usertable WHERE username='$u' AND password='$p'";
        $result = mysql_query($query);

        if (!@mysql_num_rows($result) == 1)
        {
            echo '<p class="error_entry">Forkert Brugernavn eller Password!</p>';
        }
        else
        {
            $_SESSION["adgang"] = 1;
            header("Location: admin.php");
            ob_end_flush();
            exit();
        }
    } 
}

?>
Avatar billede stenger Nybegynder
11. februar 2007 - 22:11 #11
Virker ikke...vil ikke godtage password. Og ja, har checket...det er md5'et i selve databasen :)

Ved ikke hvad der går galt og computeren ryger snart ud fra 3. sal...
Avatar billede coderdk Praktikant
11. februar 2007 - 22:36 #12
if (!@mysql_num_rows($result) == 1)

skal i øvrigt også være:

if (@mysql_num_rows($result) != 1)

jeg ville i øvrigt skrive den sådan:

        if (mysql_num_rows($result) > 0)
        {
            $_SESSION["adgang"] = 1;
            header("Location: admin.php");
            ob_end_flush();
            exit();
        }
        else
        {
            echo '<p class="error_entry">Forkert Brugernavn eller Password!</p>';
        }

Virker bare mere logisk for mig ;) hehehe - Der må være noget andet galt - For det ser fint ud ellers.
Avatar billede stenger Nybegynder
11. februar 2007 - 22:49 #13
Yeah, well...det virker så heller ikke :(

Screw it, inden jeg får en hjerneblødning...

I øvrigt er der ikke mere af min PHP-kode at sem, mht. md5 problemet. Resten er bare nogle echo af HTML layout. Så problemet ligger et sted deri.
Avatar billede coderdk Praktikant
11. februar 2007 - 23:00 #14
Prøv at debugge ved at skrive $query ud så du kan se om det ser rigtigt ud - Fyr den så evt. af i phpMyAdmin så du kan se om den returnerer noget eller melder fejl...
Avatar billede stenger Nybegynder
12. februar 2007 - 00:09 #15
Ok... det virker nu (MD5), men jeg fatter ikke hvorfor :)

Prøvede at skrive min $query ud og fik, med password omdannet til MD5-format, en helt anden hexstring end den i databasen.

Jeg har indtil nu bare manuelt omdannet databasens indhold til MD5-format gennem PHPMyAdmin-konsollen ved at skrive:

UPDATE users SET password=md5('password'); Det gav den "forkerte" hexstring.

Nu prøvede jeg så UPDATE users SET password=md5(password); altsåi ikke meget forskel, men det gav to forskellige resultater :)

Jeg aner personligt ikke hvorfor, men så længe det virker... lol
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