[php] form variabele meesturen in sessie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De situatie is zo, ik wil heel graag een form variabele meesturen....het meesturen gaat goed alleen hij is <null> en ik snap niet hoe dat kan.

De code in het bestand login.php zit zo
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
If ($Submit) { 
    include('Connections/database.php');
    session_start();
    $ses_id = session_id();
$Query = mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam = '$LoginNaam' AND password = '$LoginPassword'"); 
    $Results = mysql_num_rows($Query); 

        if ($Results == "1") { 

            $Login = "1";
                $_SESSION['Login'] = $Login; 
                $_SESSION['LoginNaam'] = $LoginNaam;
                $_SESSION['LoginPassword'] = $LoginPassword;
            
        header("Location: http://62.163.130.23/Xtension/index.php?$ses_id");
        }


Onderaan zie je ook dat de pagina doorgestuurd wordt na index.php, in index.php wordt vervolgens doormiddel van een include session.php aangeroepen die moet controleren of degene wel ingelogd is. Het controleren gaat goed denk ik tenzij ik natuurlijk dat if lusje verkeerd heb.

De code in session.php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
session_start(); 
if (isset($_SESSION['Login']) && ($_SESSION['LoginNaam']) && ($_SESSION['LoginPassword']) != '1') { 
// hier onder komt dus een pagina waarin je kunt zien dat je niet ingelogt bent. 
?>
<HTML>
<HEAD>
<TITLE> Xtension :::: U are not logged in :::: Xtension </TITLE>
</HEAD>
<BODY bgcolor="black" text="silver">
<FONT FACE="SIMSUN">
<H1><CENTER><B>Sorry, je bent vergeten in te loggen...</B></H1><P><A HREF="http://62.163.130.23/Xtension/login.php">klik hier</A><P>om terug te gaan naar de inlog pagina...</CENTER>
</FONT>
</BODY>
</HTML>
<?php
//$exit_code="-8";
die(); 
}
?>


De conclusie is dan ook zodra ik iets met de variabele loginNaam wil doen (geregistreerd in een sessie in login.php) dan is die zodra aangekomen in index.php null..... en ik snap daar dus niets van. Want in login.php wordt die nog gecontroleerd met een entry in de database. Wie kan mij hier ff op weg helpen?

[ Voor 12% gewijzigd door Verwijderd op 30-09-2003 20:06 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

PHP:
1
if (isset($_SESSION['Login']) && ($_SESSION['LoginNaam']) && ($_SESSION['LoginPassword']) != '1') {


wat is precies de bedoeling van die regel?
Want nu controleer je of $_SESSION['Login'] gezet is, vervolgens controleer je of $_SESSION['LoginNaam'] niet false is, en daarna controleer je of $_SESSION['LoginPassword'] ongelijk is aan 1
Pas als dat allemaal klopt dan krijg je de pagina te zien waarop staat dat je niet bent ingelogd

En waar is je code waarbij je de session_id weer initializeert met de binnengekomen $_GET["ses_id"] waarde bij index.php? Dat gaat niet automatisch natuurlijk

[ Voor 17% gewijzigd door .oisyn op 30-09-2003 20:14 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
.oisyn schreef op 30 September 2003 @ 20:11:
PHP:
1
if (isset($_SESSION['Login']) && ($_SESSION['LoginNaam']) && ($_SESSION['LoginPassword']) != '1') {


wat is precies de bedoeling van die regel?
Want nu controleer je of $_SESSION['Login'] gezet is, vervolgens controleer je of $_SESSION['LoginNaam'] niet false is, en daarna controleer je of $_SESSION['LoginPassword'] ongelijk is aan 1
Pas als dat allemaal klopt dan krijg je de pagina te zien waarop staat dat je niet bent ingelogd

En waar is je code waarbij je de session_id weer initializeert met de binnengekomen $_GET["ses_id"] waarde bij index.php? Dat gaat niet automatisch natuurlijk
Probleem is ook een beetje dat ik door stukjes code te bekijken van andere webpagina's en door het lezen van het handboek wat probeer te begrijpen van sessie's maar eigenlijk te weinig er vanaf weet zo blijkt ook hier weer!

Is het niet zo dat zodra je de variabele in een sessie zet en vervolgens naar de volgende pagina verhuist en daar de sessie weer opnieuw start met sessie_start() dat die dan automatisch de registreerde variabelen herkent met de waardes die ze bevatten...?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

ja, maar sessievars gaan over het algemeen via cookies, dus waarom stuur je die uberhaupt mee als een GET variabele naar index.php (dan doel ik dus op die "?$ses_id" op het eind van je redirect URL)

maar ja, dat zou ondanks dat je dat meestuurt op zich toch moeten werken.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor de duidelijkheid...ik heb hier veel lopen zoeken, ik gebruikte eerst een header zonder sessie_id en toen las ik hier dat veel mensen problemen hadden hiermee en de oplossing zou dus zijn dat je die sessie_id mee ging sturen (hoe dat moest ben ik dus nu achter gekomen) en tussendoor maakte ik nog gebruik van een javascript om naar een pagina te gaan....

Dus ik gebruik allerlei oplossingen maar geen enkele helpt...

Verder was die regel die je in je eerste bericht naar voren bracht in eerste instantie ervoor om te controleren of mensen ingelogd waren. (Vandaar ook die login = 1 en het registreren van die variabele maar naderhand wilde ik wat meer er mee doen en besloot ook LoginNaam te controleren of die geset was maar dat was puur ter controle, en het blijkt ook wel dat die variabele bestaat alleen het bevat niets..

Maar misschien is er verder iets ergens een webpagina die beter op sessie's ingaat want dit is ook niets eigenlijk.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

.oisyn doelt op het feit dat de logica van je if-statement niet klopt ;)
buiten het verhaal dat je in principe geen sessie-id's hoeft te appenden als je gewoon sessiecookies accepteerd
offtopic:
alweer die If ($Submit) :X

[ Voor 9% gewijzigd door crisp op 30-09-2003 20:48 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 30 September 2003 @ 20:47:
.oisyn doelt op het feit dat de logica van je if-statement niet klopt ;)
buiten het verhaal dat je in principe geen sessie-id's hoeft te appenden als je gewoon sessiecookies accepteerd
offtopic:
alweer die If ($Submit) :X
Ik ben geen master @ php. maar probeer wel wat te leren dus wat is er mis met if ($submit) ???

Ik weet dat de code soms wat onoverzichtelijk kan zijn maar ja ik ben op zoek naar oplossingen op vragen en soms weet ik de vraag niet eens als je snapt wat ik bedoel....

Daarom kloot ik soms ook maar wat aan en dan misschien lukt het en in dit geval dus niet.....dus kan misschien iemand mij een raar geven of aangeven wat er misschien beter kan....behalve dat vage if lusje :P

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 30 September 2003 @ 20:53:
[...]
Ik ben geen master @ php. maar probeer wel wat te leren dus wat is er mis met if ($submit) ???
[...]
eigenlijk 3 dingen:

1) als je een name="submit" in een formelement zet overschrijf je de javascript submit() method - mocht je dus ooit met javascript je form willen submitten loop je tegen een (voor de meesten) cryptische foutmelding aan :)
2) IE geeft niet altijd de waarde van een submit-button mee in een request (bijvoorbeeld als je submit met enter onder bepaalde omstandigheden, of als javascript de submit doet - mits 1) geen problemen heeft opgeleverd)
3) Je vraagt niet of de variabele ueberhaupt wel uit een POST request komt, als ik ?Submit=true achter de url plak is het nu ook goed

imho is dit de beste manier om te kijken of er een form gesubmit is:

PHP:
1
2
3
4
5
if ($_SERVER['REQUEST_METHOD'] == 'POST) {

  // er is een form gepost

}

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmmm die kende ik nog niet maar goed om verwarring te voorkomen zal ik ook ff het html gedeelte erbij zetten van login.php

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Xtension UnderGround </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="blade181">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY bgcolor="black" text="silver">
<FONT FACE="SIMSUN">
<CENTER>
<H1><CENTER><B>Welcome to Xtension Underground</B></CENTER></H1>
<FORM METHOD=POST ACTION=<? $PHP_SELF ?>>
<input type="hidden" name="Submit" value="1">
<TABLE>
<TR>
<TD align="center">Username: <INPUT TYPE="text" NAME="LoginNaam"></TD>
</TR>
<TR>
<TD align="center">Password: <INPUT TYPE="password" NAME="LoginPassword"></TD>
</TR>
<TR>
<TD align="center"><CENTER><BR><INPUT TYPE="reset" Value="Annuleer"><INPUT TYPE="submit" Value="Login"></BR></CENTER></TD>
</TR>
</TABLE>

</FORM>

Inloggen met Gebruikersnaam en wachtwoord, heb je nog geen gebruikersnaam klik dan <a href="http://62.163.130.23/Xtension/registreer.php">hier</a> om te registreren.
</CENTER>
</FONT>

<p>
</BODY>
</HTML>

En hier zie je ook dat het aan de form niet kan liggen omdat die een hidden input meestuurt genaamd submit, hoewel ik nu ook zie dat dat niet de beste methode is zal ik daarom ook dit ff veranderen, maar denk ik dat dit niet het probleem oplost...

[ Voor 27% gewijzigd door Verwijderd op 30-09-2003 23:14 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 30 September 2003 @ 23:13:
hmmm die kende ik nog niet maar goed om verwarring te voorkomen zal ik ook ff het html gedeelte erbij zetten van login.php

[knip]

En hier zie je ook dat het aan de form niet kan liggen omdat die een hidden input meestuurt genaamd submit, hoewel ik nu ook zie dat dat niet de beste methode is zal ik daarom ook dit ff veranderen, maar denk ik dat dit niet het probleem oplost...
nee, dat is het inderdaad niet.
Maar even voor de volledigheid: welke versie PHP draait er?
Is het je eigen server? worden er wel sessiefiles aangemaakt?

en we hebben trouwens ook een [ code=html ] tag ;)

[ Voor 5% gewijzigd door crisp op 30-09-2003 23:25 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmmm ff info opvragen ;)

Het is idd mijn eigen server....!!
Debian Linux 3.0r1
php versie PHP/4.1.2
apache 1.3.27

Helaas ga ik verder niet meer info prijs geven omdat ik niet wil dat dit tegen mij gebruikt wordt...als je meer info nodig hebt wil ik het wel mailen...

Sessie files worden echt wel aangemaakt ze staan in /tmp

[ Voor 10% gewijzigd door Verwijderd op 01-10-2003 00:07 . Reden: extra aanvulling ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 30 september 2003 @ 23:13:
<FORM METHOD=POST ACTION=<? $PHP_SELF ?>>
offtopic:
deze $PHP_SELF vermelding gaat zo niet werken natuurlijk he, of even een '=' teken tussen het vraagteken en dollarteken zetten, of er een echo cq print van maken..

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 01 October 2003 @ 00:07:
hmmm ff info opvragen ;)

Het is idd mijn eigen server....!!
Debian Linux 3.0r1
php versie PHP/4.1.2
apache 1.3.27

Helaas ga ik verder niet meer info prijs geven omdat ik niet wil dat dit tegen mij gebruikt wordt...als je meer info nodig hebt wil ik het wel mailen...

Sessie files worden echt wel aangemaakt ze staan in /tmp
upgrade je PHP, 4.1.2 is erg brak met sessies :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Even een algemene opmerking trouwens:

Een truc die ik vaak gebruik is de volgende:

PHP:
1
2
3
4
5
6
session_start(); 
if (!empty($_POST)) 
{
// thx crisp. weer wat geleerd :X
$_SESSION['posteddata'] = $_POST;
}


Zo knikker je in 1x de hele $_POST array in je session :Y) :9

[ Voor 19% gewijzigd door SchizoDuckie op 01-10-2003 08:58 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Papa Eend schreef op 01 oktober 2003 @ 08:49:
Even een algemene opmerking trouwens:

Een truc die ik vaak gebruik is de volgende:

PHP:
1
2
3
4
5
6
session_start(); 
if (!empty($_POST)) 
{
session_register('posteddata');
$_SESSION['posteddata'] = $_POST;
}


Zo knikker je in 1x de hele $_POST array in je session :D :9
http://www.php.net/session_register
If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().

[ Voor 10% gewijzigd door crisp op 01-10-2003 08:52 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het handboek had ik idd gelezen en daarom had ik alles al in $_SESSION gezet...
Dus ik moet mijn hele post in een sessie zetten....dus alles wat in de form ingevuld wordt dat wordt in een sessie gezet??

Ik heb heel voorzichtig ook mijn php4 geupdate, mijn debian systeem is dus nu ook deels unstable....

[ Voor 21% gewijzigd door Verwijderd op 01-10-2003 10:49 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 01 oktober 2003 @ 10:41:
Het handboek had ik idd gelezen en daarom had ik alles al in $_SESSION gezet...
Dus ik moet mijn hele post in een sessie zetten....dus alles wat in de form ingevuld wordt dat wordt in een sessie gezet??
Vind ik niet aan te raden, zeker niet aangezien het in jouw geval maar om een paar velden gaat. Je kan dan beter valideren of die velden inderdaad in je $_POST-array staan, en ze dan pas in je sessie zetten.

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm het vage is dat ik nu weer naar wat aan kloten er achterkom dat als ik 3 sessies registreer en vervolgens alle 3 van data voorzie doormiddel van

$_SESSION['bla'] = $bla;
$_SESSION['bla1'] = $bla1;
$_SESSION['bla2'] = $bla2;

Dat ik na de redirect alleen data terugkrijg uit de bovenste registreerde sessie en de ondersten helemaal niets. En daarbij komend staat er ook nog onzin in er staat alleen maar array in, ligt dit nu aan mij of...?

[ Voor 5% gewijzigd door Verwijderd op 01-10-2003 11:28 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 01 October 2003 @ 11:28:
Hmm het vage is dat ik nu weer naar wat aan kloten er achterkom dat als ik 3 sessies registreer en vervolgens alle 3 van data voorzie doormiddel van

$_SESSION['bla'] = $bla;
$_SESSION['bla1'] = $bla1;
$_SESSION['bla2'] = $bla2;

Dat ik na de redirect alleen data terugkrijg uit de bovenste registreerde sessie en de ondersten helemaal niets. En daarbij komend staat er ook nog onzin in er staat alleen maar array in, ligt dit nu aan mij of...?
crisp schreef op 01 October 2003 @ 08:36:
[...]

upgrade je PHP, 4.1.2 is erg brak met sessies :)
Heb je dat al gedaan? Ik heb zelf ooit ook eens enorm geworsteld met sessie-vars die spontaan verdwenen of oude waardes bleven bevatten. Een upgrade naar 4.3.x heeft toen geholpen. De bugreports op php.net puilen ook uit van sessie-gerelateerde bugs in 4.1.2

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb al ge upgrade
nu heb ik Debian GNU/Linux PHP/4.3.3RC3 mod_perl/1.27

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het enige wat ik nog kan controleren is of ik onder gentoo linux met php 4.3 en apache 2.0 hetzelfde heb.....
Pagina: 1