[php]Session variabele verdwijnt

Pagina: 1
Acties:

Onderwerpen


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Greetings,

ik heb een zoekfunctie, vrij standaard, paar veldjes waar je iets intypt en dan word daarop gezocht.
Maar ik wil graag een "vorige zoekactie" knop.
Dus ik dacht ik sla de zoekvariabelen op in een sessievariabele en als ik via de GET iets meestuur dan moet hij de variabelen uit de opgeslagen sessievariabelen halen


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
session_start()
if ($_GET["w"] == "") $w = "";
else $w = $_GET["w"];
if($w){
    $naam = $_SESSION["zoek_naam"];
}
elseif($_POST["naam"]){
    if ($_POST["naam"] == "") $naam = "";
    else $naam = $_POST["naam"];
    $_SESSION["zoek_naam"] = $naam;
}
else{
    print 'Geef variabelen in';
    exit();
}


Als ik een nieuwe klant zoek en dan de variabele $naam en $_SESSION["zoek_naam"] echo dan krijg ik hun waarde, tot daar niets mis.

als ik echter op vorige zoekactie klik dan krijg ik mijn hele database. Als ik de variabelen echo zit er niets in...

Ik roep de functie aan met een knopje.
HTML:
1
2
3
<form method="post" action="nieuweklantzoek.php?w=klantID&v=ASC" target="Onder">
    <input type="image" src="images/Buttons/FBTNVorigeZoekactie.png" name="VorigeZoekactie">
</form>


iemand een idee?

Just me


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

ik zie nergens een session_start()?

Anyone who gets in between me and my morning coffee should be insecure.


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
ja die zie je in dit stukje niet, maar die is er wel in het voledige bestand. Zal hem er even tussen zetten.

Just me


  • XiniX88
  • Registratie: December 2006
  • Laatst online: 19:30
doe is om te testen:

[code=php]
<?php
session_start();
echo $_SESSION['test'];
$_SESSION['test'] = "hallo";
?>[/]

Succes!


"als ik echter op vorige zoekactie klik dan krijg ik mijn hele database."

Hoe moet ik kunnen zien wat er fout gaat, als ik niet eens een query in je bovenstaande code zie...

PHP:
1
2
3
if ($_GET["w"] == "") $w = "";
else $w = $_GET["w"];
    if($w){

Nasty, die tab insprong, lijkt alsof de if($w) in de bovenstaande else staat.

[ Voor 81% gewijzigd door XiniX88 op 19-11-2009 10:40 . Reden: typo ]


  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Je zegt:
PHP:
1
if ($_GET["w"] == "") $w = "";


Maar w is volgens je html voobeeld altijd KlantID....?
Wat zou die waarde moeten zijn ? Hoe wordt die gevuld ?

Ow enne
PHP:
1
2
3
    if($w){
        $naam = $_SESSION["zoek_naam"];
    }


if w is wat ? leeg? gezet? integer?

[ Voor 26% gewijzigd door Mike2k op 19-11-2009 10:37 ]

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
@Mike2k
de variabele $w word gebruikt om te sorteren. deze kan alle namen van beschikbare variabelen hebben.
@Xinix88
Heb het getest en krijg "hallo" te zien dus er zal dan niets fout zijn met het session systeem

Just me


  • XiniX88
  • Registratie: December 2006
  • Laatst online: 19:30
Galen schreef op donderdag 19 november 2009 @ 10:40:
@Mike2k
de variabele $w word gebruikt om te sorteren. deze kan alle namen van beschikbare variabelen hebben.
@Xinix88
Heb het getest en krijg "hallo" te zien dus er zal dan niets fout zijn met het session systeem
Hahah toch bedankt om te testen, ik dacht dat het echt om sessions ging, dus ik las niet verder, maar je zei "tot daar gaat alles goed" (nooit gelezen).

Iig ik mis veel meer code om te achterhalen wat er fout gaat... en ik zie dat je ineens klantid gebruikt ipv w zoals mike2k ook al zegt, dat staat in de link naar de vorige zoekactie.

[ Voor 3% gewijzigd door XiniX88 op 19-11-2009 10:42 ]


  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

met ^^

Meer code ;)

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 00:45
XiniX88 schreef op donderdag 19 november 2009 @ 10:41:
[...]
en ik zie dat je ineens klantid gebruikt ipv w zoals mike2k ook al zegt, dat staat in de link naar de vorige zoekactie.
Hij gebruikt wel $w, alleen krijgt $w via dat formulier de waarde 'klantID'.

Verder vind ik het ook niet heel duidelijk. Ik zie dat de inspringing in elk geval aangepast is. Maar wat bedoel je bijvoorbeeld met "dan krijg ik mijn hele database"? Ik zie in elk geval niets in dit stukje code, behalve enkele vreemde/slordige dingen. Mike2k noemt al het testen van variabelen in if-statements. Ook voegen de if-statements in regel 2 en 8 niets toe. Je maakt in de if $w gelijk aan $_GET['w'] (namelijk gelijk aan de lege string) en in de else maak je ze ook gelijk aan elkaar.

  • joostvanpinxten
  • Registratie: Maart 2007
  • Laatst online: 03-09 12:50
Naast ff zeuren dat je
  • je toch echt bewust mag zijn van E_NOTICE(s) die hierbij (kunnen) optreden / gebruik isset()/empty(), zowel bij $_GET, $_POST als $_SESSION
  • de tabstructuur (en het missen van { } bij de if/else) die de code niet leesbaar houden
Ik weet niet of dit echt je originele code benadert, maar qua onderhoudbaarheid is dit een drama.

Verder kan ik nu niet zien of het een input probleempje is. Misschien kan je je zoek-veld formulier ook hier posten? Dan kunnen we iig zien wanneer het wel werkt!

Ook is niet duidelijk wat nu de 'output' variabelen van het script zijn. Misschien kan je de uiteindelijke query (miss versimpeld) ook nog eens plaatsen?

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
de $_GET['w'] variabele is niet altijd ingevuld, enkel als je teruggaat naar een vorige zoekactie.
Bij dit knopje word de waarde toevallig 'klantID' maar bij andere krijgen ze een andere waarde, ik dacht niet dat ik ze allemaal moest tonen voor voorbeeld.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
require_once 'db_config.php';
if ($w){
    $zo = 'ORDER BY '. $w . ' ASC';
}
else{
    $zo = 'ORDER BY klantID ASC';
}
$query = "SELECT * FROM tbl_Klant WHERE Naam LIKE '%$naam%'". $zo;
$resultaat = mysql_query($query);
while ($rij = mysql_fetch_array($resultaat)){
     //toon waardes
}


hopelijk helpt dit stukje code wat meer.

Just me


  • Mikerd
  • Registratie: September 2009
  • Laatst online: 05-09 18:11
Al geprobeerd $_GET[ 'w' ] e.d. te echoën en kijken of je (in de loop van het script) die waarde misschien overschrijft of kwijtraakt?

Vind het een beetje vaag eruit zien, met variabelen die we nergens anders tegen komen en niet precies zien wat je doet.

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Uhh nee ;)

Ruim eerst eens op, check je if en else statements. Zoals xinix88 ook al zei, je hebt er een aantal die absoluut niets toevoegen... Bijv regel 8&9..die doet niets...enne mysql_real_escape_string ;)

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
mysql_real_escape_string zit er wel in hoor :p ik bespaar gewoon graag zoveel mogelijk typwerk op fora

Just me


  • Mikerd
  • Registratie: September 2009
  • Laatst online: 05-09 18:11
Hier even een wilde gok, maar neem aan dat dit is wat je probeert te doen?

PHP:
1
2
3
4
5
6
<?php

$order = 'ORDER BY ' . ( ( isset( $_GET[ 'w' ] ) && $_GET[ 'w' ] != '' ) ? mysql_real_escape_string( $_GET[ 'w' ] ) : 'klantID' ) . ' ASC'; // order by opbouwen
$naam = ( isset( $_SESSION[ 'zoek_naam' ] ) && $_SESSION[ 'zoek_naam' ] != '' ) ? $_SESSION[ 'zoek_naam' ] : ''; // mogelijke notices vermijden dat session niet bestaat

$obj = mysql_query( "SELECT * FROM tbl_Klant WHERE Naam LIKE '%" . mysql_real_escape_string( $naam ) . "%' " . $order );


Dat haal ik tenminste uit de code die gegeven is.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Is het probleem hier niet gewoon dat variabelen die in $_SESSION gezet worden pas bij de volgende request uitgelezen kunnen worden?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mikerd
  • Registratie: September 2009
  • Laatst online: 05-09 18:11
NMe schreef op donderdag 19 november 2009 @ 11:38:
Is het probleem hier niet gewoon dat variabelen die in $_SESSION gezet worden pas bij de volgende request uitgelezen kunnen worden?
Zo ver ik weet kan je sessions direct uitlezen (aangezien je ze als variabel aanmaakt). Werkte in ieder geval wel een keer toen ik het ooit gebruikt heb. Kan zijn dat dat gewoon een slecht ingestelde server was. :p

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Ligt er natuurlijk aan waar je ze aanmaakt in je code...eerst aanmaken, dan uitlezen uiteraard ;)

@Galen:
Met dat besparen doe je ons in dit geval weinig plezier...heb je je code al opgeruimd ?

[ Voor 34% gewijzigd door Mike2k op 19-11-2009 11:45 ]

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
@mike2k
nee ben nog druk bezig met andere dingen die belangrijker zijn dat deze functie, als ik tijd heb zal ik dat even doen.

Just me

Pagina: 1