Avatar billede engaai Nybegynder
14. marts 2004 - 12:27 Der er 15 kommentarer

problemer med php_self

Hej

Jeg har et script, som skulle fungere lidt ala det login system de bruger her på eksperten. Altså med et password og brugernavn felt, og når man trykker på login, bliver man sendt til den samme side som man er på når man trykker på login. Problemet med mit script, er at man bliver sendt til forsiden, når man trykker på login knappen, og ikke til den side man er på, som eller var meningen. Koden til mit script ser således ud:


<?

$opret = $_REQUEST['opret'];
$login = $_REQUEST['login'];
$brugernavn = $_REQUEST['brugernavn'];
$password = $_REQUEST['password'];
$self = $_SERVER['PHP_SELF'];
$form =  "<div class='right_login'>
        <form action='$self' method='post'>
        brugernavn <br /><input class='input_login' type='text' name='brugernavn' />
        <p />
        adgangskode <br /><input class='input_login' type='password' name='password' />
        <input type='submit' name='login' value='Login'>
        <input type='submit' name='opret' value='Opret'>
        </form></div>";
             

if(isset($_SESSION['user'])) {
    echo "Navn:  {$_SESSION['user']}";
} elseif(!isset($opret) && !isset($login)) {
    echo "$form"; 
} elseif(isset($opret)) {   
    header("location:index2.php?side=opret");
} else {
    if($brugernavn == "" || $password == "") {
        echo "$form";
        echo "<div class='red'>Begge felter skal udfyldes</div>";
    } else {
        $fejl = "<div class='red'>Brugernavn eller adgangskode er forkert</div>";

        mysql_connect("localhost", "root");
        mysql_select_db("slumkum");
       
        $result_user = mysql_query("SELECT brugernavn FROM users WHERE brugernavn = '$brugernavn'") or die(mysql_error());
        $number_user = mysql_num_rows($result_user);

        if($number_user < 1) {           
            echo "$form";
            echo "$fejl";
        } else {
            $result_pw = mysql_query("select password from users where brugernavn = '$brugernavn'") or die(mysql_error());
            $number_pw = mysql_num_rows($result_pw);
           
            if($number_pw < 1) {
                echo "$form";
                echo "$fejl";
            } else {
                $_SESSION['user'] = $brugernavn;
            }
        }
    }
}



?>


Hvordan kan det være at brugeren bliver sendt til forsiden hver gang han/hun trykker på login knappen?
Avatar billede jammerlab Nybegynder
14. marts 2004 - 12:29 #1
Du kan altid lave der hvor den sætter session hvis brugeren har indtastet et korrekt login:

echo "<meta http-equiv=refresh content=0;URL='$PHP_SELF'>";
Avatar billede engaai Nybegynder
14. marts 2004 - 12:32 #2
hvad gør det script?
Avatar billede detox Nybegynder
14. marts 2004 - 12:45 #3
Du mangler: session_start(); øverst i dit script.
Avatar billede jammerlab Nybegynder
14. marts 2004 - 12:49 #4
echo "<meta http-equiv=refresh content=0;URL='$PHP_SELF'>";

Denne string gør at den refresher siden med det samme i samme fil... Altså når brugeren er logget ind så opdatere den sådan set bare siden.

Ser ud til det er dette du skal bytte ud:

            } else {
                $_SESSION['user'] = $brugernavn;
            }

Med dette

            } else {
                $_SESSION['user'] = $brugernavn;
                echo "<meta http-equiv=refresh content=0;URL='$PHP_SELF'>";
            }
Avatar billede engaai Nybegynder
14. marts 2004 - 13:00 #5
detox, det er en fil jeg includer, derfor skal session ikke startes!
Avatar billede engaai Nybegynder
14. marts 2004 - 13:01 #6
Er der ikke en anden måde, jeg kan få den til at gå tilbage til at gå tilbage til den side brugeren er på, ved f.eks at bruge PHP_SELF?
Avatar billede erikjacobsen Ekspert
14. marts 2004 - 13:06 #7
Det kan ikke anbefales at bruge $PHP_SELF. Man bør udelukkende bruge: $_SERVER['PHP_SELF']
Avatar billede detox Nybegynder
14. marts 2004 - 13:07 #8
Ok så. Du kunne jo sætte:

$_SESSION['SELF'] = $_SERVER['PHP_SELF'];

på siden du kommer fra og så:

} else {
    $_SESSION['user'] = $brugernavn;
    header('Location: '.$_SESSION['SELF']);
}
Avatar billede jammerlab Nybegynder
14. marts 2004 - 13:08 #9
Smart detox :) Det lyder som den løsning manden leder efter.
Avatar billede engaai Nybegynder
14. marts 2004 - 13:10 #10
så skal jeg jo sætte

$_SESSION['SELF'] = $_SERVER['PHP_SELF'];

på alle sider, eftersom jeg ikke ved hvilken side brugeren kommer fra ik?
Avatar billede jammerlab Nybegynder
14. marts 2004 - 13:12 #11
Nej så længe den bare gør det inde i dit login script som du includer så husker den det den skal :)
Avatar billede detox Nybegynder
14. marts 2004 - 14:13 #12
Tja, $_SERVER['HTTP_REFERER'] er ikke til at stole på, så hvis det skal laves i php var det en mulighed. Ellers kan du evt. bruge java script:
<script>
history.back();
</script>
Avatar billede engaai Nybegynder
14. marts 2004 - 18:54 #13
Jeg forstår ikke helt. Skal

$_SESSION['SELF'] = $_SERVER['PHP_SELF'];

på siden du kommer fra og så:

} else {
    $_SESSION['user'] = $brugernavn;
    header('Location: '.$_SESSION['SELF']);
}

Sættes på den login side jeg inkluderer? Jeg kan jo ikke vide hvilken side brugeren kommer fra, eftersom jeg inkluderer mit login script på alle sider. Du bliver lige nødt til at forklare præcis hvordan jeg skal gøre.
Avatar billede engaai Nybegynder
14. marts 2004 - 19:08 #14
Og hvis der meldes fejl, kommer det også til at stå ude i siden, og der sakl man også blive sendt til den samme side.
Avatar billede engaai Nybegynder
14. marts 2004 - 21:03 #15
?
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