[php] header werkt op ene computer niet.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een pagina die eerst controlleerd of een user ingelogged is voordat hij de pagina opend, anders ga je naar een andere site (Zie script hieronder).


Dit is de eerste site die de login uitvoerd vanuit een form op login.html :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php 
if (isset($username) == false)
{ 
    header("location: error.html");

}
        
        $db = mysql_pconnect("127.0.0.1","blahblah","blahblah") or die ("verbinding niet gelukt");
        mysql_select_db ("nob");
        
        $results = mysql_query ("select * from login");
        while ($logincheck=mysql_fetch_row($results))   
            {
                if ($username == $logincheck[1] & $password == $logincheck[2] & $usertype == $logincheck[3])
                {
                    $value = "user0" . $logincheck[0];
                    SetCookie("C_userID",$value,Time()+31536000);
                    SetCookie("C_userName",$logincheck[1],Time()+31536000);
                    SetCookie("C_userType",$logincheck[3],Time()+31536000);
                    SetCookie("C_userLogin","yes");
                    mysql_close($db);
                    header("location: index.phtml");
                }
            }
?>



De site die na de login komt heeft als eerste check :

PHP:
1
2
3
4
5
6
<?php
    if ($C_userLogin !== "yes")
        {
        header("location: error.html");
        }
?>


:? :?

Op mijn local computer werkt hij wel, maar op de server op mijn werk, waar ik dezelfde apache draai, werkt het niet, en ga ik gewoon naar de site waar hij in staat. Ook al ben in niet ingelogged maar type ik de site direct in.

De variabele wordt aangemaakt want als ik in die desbetreffende site de variable echo dan zie ik hem alleen als ik via het login pagina ga, en niet als ik de URL direct intype.

Zelf denk ik aan global variable gedoe, maar het rare is dus dat hij wel aan te roepen is met een echo.

edit:

Het gaat mij er dus vooral om dat mensen de login niet kunnen omzeilen door de URL van de tweede pagina niet direct in te typen, vandaar de Check.
En vooral om het feit dat het op de ene computer wel werkt en de andere niet, dus moet het een instelling in php.ini zijn lijkt mij ??


PS: Tips om dit beter te doen zijn ook welkom natuurlijk :*)

[ Voor 21% gewijzigd door Verwijderd op 28-02-2003 23:56 ]


Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
werkt $_GET["username"] gebruiken ipv $username

of $_POST["username"] in geval van een POST

[ Voor 41% gewijzigd door WimB op 28-02-2003 23:37 ]


Acties:
  • 0 Henk 'm!

  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 23:35
Dit zijn nog geen inhoudelijke checks

if (!isset($username)) ipv if (isset($username) == false)

een exit; achter header("location: error.html"); of er een if {} else {} van maken.

Belangrijk is het door te hebben dat mysql_fetch_array() is niet significant langzamer dan het gebruik van mysql_fetch_row(), terwijl het een duidelijke toegevoegde waarde heeft.

Gebruik && of AND in plaats van &. & is een bitwise operator en geen logische operator. Die laatste moet je in dit geval gebruiken.

Ik zou () zetten rond iedere check in
($username == $logincheck[1] & $password == $logincheck[2] & $usertype == $logincheck[3])
zo dus: ( ($username == $logincheck[1]) AND ($password == $logincheck[2]) AND ($usertype == $logincheck[3]) )
Kweet ff niet zeker of dat nodig is, maar lijkt me altijd beter :)

Opmerking: mysql_close() zal persistente links die met mysql_pconnect() gemaakt zijn niet sluiten.

[ Voor 29% gewijzigd door Eegee op 28-02-2003 23:47 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

WimB schreef op 28 February 2003 @ 23:36:
werkt $_GET["username"] gebruiken ipv $username

of $_POST["username"] in geval van een POST
Correct, dan werkt het altijd ongeacht de register_globals settings; hetzelfde geldt voor cookie-vars: $_COOKIE['C_userLogin'] gebruiken dus

Verder geeft Eegee ook een aantal nuttige tips.

Waarom loop je trouwens door je tabel heen en doe je niet meteen een select met een where clause?

[ Voor 23% gewijzigd door crisp op 28-02-2003 23:42 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 23:35
edit Eegee... edit :D

[ Voor 98% gewijzigd door Eegee op 28-02-2003 23:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ten eerste, :)

Eegee, bedankt voor de tips. Ben nog niet bekend genoeg om script te optimalizeren, maar schrijven gaat al aardig. Dit soort info komt altijd te goede.

Ten Tweede,

Waar het mij om gaat is dat ik in een echo de variabele $C_userLogin wel kan aanroepen maar in de login check gebruikt hij hem niet.
Waar zou dit aan kunnen liggen.

Acties:
  • 0 Henk 'm!

Verwijderd

En "!==" schrijf je toch als "!=" :?

Acties:
  • 0 Henk 'm!

  • getty
  • Registratie: Januari 2001
  • Laatst online: 01-09 09:17
Is in de tweede pagine wel de variable $C_userLogin te echo-en??

A computer is almost human - except that it does not blame its mistakes on another computer.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 28 February 2003 @ 23:29:

De variabele wordt aangemaakt want als ik in die desbetreffende site de variable echo dan zie ik hem alleen als ik via het login pagina ga, en niet als ik de URL direct intype.
Duidelijke taal :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okey, dit werkt zelfs

PHP:
1
2
3
4
5
6
7
<?php
    if (!isset($C_userLogin))
        {
        echo "huh";
        header("location: error.html");
        }
?>


Ik zie "huh" staan op mijn pagina, maar de header werkt dus niet bij mij.
:? Instellingen veranderen. |:(

Acties:
  • 0 Henk 'm!

Verwijderd

Geen output naar je scherm toe voordat je een header aanroept, dat werkt nml niet!!!!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
_/-\o_ _/-\o_ _/-\o_ Thanx, probleem verholpen.


ZO SIMPLE, maar frustrerend.

Acties:
  • 0 Henk 'm!

Verwijderd

No prblm

Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
Om je geen zorgen te hoeven maken of je wel of geen output naar je scherm gestuurd hebt alvorens een header aan te roepen, kun je de functie ob_start(); gebruiken bovenaan de pagina direct na de <?php tag.

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 15-07 09:34

PrinsEdje80

Holographic, not grated...

Ook altijd handig is het volgende:
PHP:
1
error_reporting(E_ALL);

Used to be Down Under... Foto gallery

Pagina: 1