[php] if lusje via een include laten doorlopen...kan dat??

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Beetje wazige titel ik weet het, maar weet het niet beter uit te leggen.
Ik heb dus een probleem...

Je logt in op de site met gebruikersnaam en wachtwoord....dat werkt je komt hierdoor op de hoofdpagina...

Nu werkt het inloggen met sessies en moet ik dus elke pagina controleren of mensen zijn in gelogd. Nu denk ik van nou dan kan ik daar het beste een soort template (sessie.php) van maken en het bestand includen. De controle en de start van de sessie begint in dat bestand....tesamen met de if lus. Maar die if lus wil ik graag laten doorlopen in de hoofdpagina index.php. Alleen werkt dat niet ik krijg een parse error en ik weet wel waarom want hij vindt het vaag dat ik zomaar ergens in index.php het einde wil aangeven van een if lus die die blijkbaar niet kan vinden! Is hier een andere oplossing voor????

Kan ik de code trouwens hier gewoon parsen??

[ Voor 14% gewijzigd door Verwijderd op 25-09-2003 11:18 ]


  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 04-02 14:45

RvdH

Uitvinder van RickRAID

Kun je niet gewoon in sessie.php iets doen als:
PHP:
1
2
3
4
5
if (wat_je_ook_doet_om_te_checken_of_persoon_ingelogd_is()) {
   $logged_in = 1;
} else {
   $logged_in = 0;
}

En dan in je script:
PHP:
1
2
3
4
5
if ($logged_in == 1) {
...
} else {
...
}

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Kun je niet gewoon een fout raisen in die include als de gebruiker niet is ingelogd en de rest dan in een exception handler afhandelen?

Who is John Galt?


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

parse error is ten allertijde een tikfout.

zoals:
• ; vergeten
• string niet goed afgesloten
• functie niet bekend
• etc

De meest effectieve manier om een parse error te zoeken vind ik zelf door het strategisch plaatsen van. ( na handmatig door de code gelopen te zijn )
PHP:
1
2
die("tot hier goed");
/*


regel 1 bevestigt dat het tot daar goed gaat.
regel 2 zet de overige code uit in het PHP block


[edit]
hmmm... Ik heb kennelijk jouw post niet goed gelezen... :( Sorry, my mistake....

[ Voor 13% gewijzigd door LuCarD op 25-09-2003 11:34 ]

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
het gaat zo....nou ja het zou zo moeten
Sessie.php
PHP:
1
2
3
4
5
6
7
8
<?
session_start();
if (login != '1') {
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent.
}
else {

?>

index.php
PHP:
1
2
3
4
5
6
7
<?
include ('session.php');
// de rest van de zooi en html
?>
<?
}
?>


Hoewel dit raar lijkt vind ik het raar dat ik geen optie ken waar php gewoon letterlijk de code van de include file in de huidige pagina gooit!
Want hier geeft die dus een fout..

[ Voor 29% gewijzigd door Verwijderd op 25-09-2003 11:58 ]


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
PHP:
1
2
3
4
5
6
7
<?
session_start();
if (login != '1') {
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent.
die();
}
?>

index.php
PHP:
1
2
3
4
5
6
7
<?
include ('session.php');
// de rest van de zooi en html
?>
<?
}
?>


Zo moet et werken. Die die() zorgt ervoor dat de code daarna niet meer wordt uitgevoerd. Zorg dus wel dat je er een footer ingooit, als je dat nog niet gedaan hebt. Mooier is natuurlijk een error-wrapper te schrijven, die de gehele errorpage laat zien...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

PHP:
1
2
3
4
5
6
7
<? 
session_start(); 
if (login != '1') { 
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent. 
die(); 
} 
?> 


Bovenstaande is onjuist en onveilig:
1. Geen $ voor de variable.
2. login is te overrulen door een get variablen.

PHP:
1
2
3
4
5
6
7
<? 
session_start(); 
if (isset($_SESSION['loginid']) && $_SESSION['loginid'] != '1') { 
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent. 
die(); 
} 
?> 


Hierboven is wel goed :)

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Je kunt gewoon niet wat jij wilt doen. Daarnaast is het omslachtig. Geen else gebruiken als het niet nodig is. Dus BackSlash zegt (eeey...arnoud..?)

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Grijze Vos schreef op 25 September 2003 @ 17:50:
PHP:
1
2
3
4
5
6
7
<?
session_start();
if (login != '1') {
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent.
die();
}
?>

index.php
PHP:
1
2
3
4
5
6
7
<?
include ('session.php');
// de rest van de zooi en html
?>
<?
}
?>


Zo moet et werken. Die die() zorgt ervoor dat de code daarna niet meer wordt uitgevoerd. Zorg dus wel dat je er een footer ingooit, als je dat nog niet gedaan hebt. Mooier is natuurlijk een error-wrapper te schrijven, die de gehele errorpage laat zien...
error wrapper kun je dat verklaren wat ik me daarbij moet voorstellen?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 25 september 2003 @ 18:35:
PHP:
1
2
3
4
5
6
7
<? 
session_start(); 
if (login != '1') { 
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent. 
die(); 
} 
?> 


Bovenstaande is onjuist en onveilig:
1. Geen $ voor de variable.
2. login is te overrulen door een get variablen.

PHP:
1
2
3
4
5
6
7
<? 
session_start(); 
if (isset($_SESSION['loginid']) && $_SESSION['loginid'] != '1') { 
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent. 
die(); 
} 
?> 


Hierboven is wel goed :)
Hmm oke ik moet dus controleren met isset of de variabelen nog niet gebruikt worden..., en als dat dus niet zo is dan dan zou die moeten stoppen....maar zodra die die uitvoert komt er toch ook gewoon weer een php error message....nou kan ik wel tussen die haakjes wat tussen zetten maar dat vind ik toch minder mooi...
Hoe los ik dat op...??

Hmm heb het toch al gevonden, blijkbaar als je tussen de haakjes van die() een integer value zet geeft die niets weer omdat dat beschouwt als een exit-code...

[ Voor 12% gewijzigd door Verwijderd op 26-09-2003 11:33 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Die() is juist gemaakt om een error message te geven; als je netjes wil afsluiten, gebruik dan gewoon exit();

Hoewel ik je oorspronkelijke idee nogal raar vind, zou je het wel met een extra if-statement kunnen controleren:

PHP:
1
2
3
4
5
6
7
8
9
10
// session.php
if( ... )
{
    echo 'hey! :('; // niet ingelogd!
    return 0;
}
else
{
    return 1; // ingelogd; genereer rest van de pagina
}


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
// page.php

// header
echo '<html><body>';

if(include('session.php') == 1)
{
    echo 'woei! \o/'; // genereer rest van de pagina
}

// footer
echo '</body></html>';


Een voordeel van deze constructie zou zijn dat je altijd nog de HTML footer kan genereren, voor zover je die op deze manier toevoegd. Verder is je huidige oplossing ook gewoon bruikbaar.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
je kunt overigens _alle_ code invoegen met require(), dus ook }, { ect. require werkt verder net zo als include.

Kijk ook eens op
www.php.net/require

Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
Ummzz kan dit allemaal niet een stuk makkelijker?

De pagina waar je includen gaat:
bovenaan dat session_start() gedoe!
op de plek waar je andere pagina's wilt includen:

PHP:
1
2
3
4
5
6
if (!$session['blaat'] { //zowiets dacht ik ....
include('login.php');
}
else {
include($page . ".php");
}


jah ik weet de codes niet meer precies maar dit lijkt me nogal een goeie oplossing voor je probleem
Pagina: 1