Avatar billede langkiller Nybegynder
24. juni 2012 - 23:41 Der er 30 kommentarer og
1 løsning

kan ikke sætte en række af Sessions i en funktion

har lavet følgende funktion:
http://pastebin.com/YEF8GN66

Meningen med den er at jeg skal kunne hente en given data ud fra et kald på funktionen (getMyData("DATA F.EKS.: firstname")). Den skal kun hente dataen ud 1 gang. Første gang det hentes blive dataen lagt i sessions og det er her mit problem ligger. Ved ikke hvorfor jeg får den fejl da jeg har erklæret andre sessions på denne måde (login osv.)
Hvis disse sessions allerede er sat skal dataen tages derfra så der ikke skal hentes flere gange fra databasen.

Jeg får disse fejl:


Notice: Undefined index: dataFetched in C:\xampp\htdocs\sites\blindtown\sql.php on line 13

Notice: Undefined index: email in C:\xampp\htdocs\sites\blindtown\sql.php on line 14

Notice: Undefined index: firstname in C:\xampp\htdocs\sites\blindtown\sql.php on line 15

Notice: Undefined index: lastname in C:\xampp\htdocs\sites\blindtown\sql.php on line 16

Notice: Undefined index: adress in C:\xampp\htdocs\sites\blindtown\sql.php on line 17

Notice: Undefined index: zip in C:\xampp\htdocs\sites\blindtown\sql.php on line 18

Notice: Undefined index: city in C:\xampp\htdocs\sites\blindtown\sql.php on line 19

Notice: Undefined index: country in C:\xampp\htdocs\sites\blindtown\sql.php on line 20
Avatar billede olebole Juniormester
25. juni 2012 - 00:29 #1
<ole>

*pssssst* ... session_start()  *o)

/mvh
</bole>
Avatar billede langkiller Nybegynder
25. juni 2012 - 00:35 #2
en session skal allerede være igang for at man kan bruge funktionen
hvis jeg sætter session_start() ind får jeg fejlen

Notice: A session had already been started - ignoring session_start()
og alle de andre igen
Avatar billede Hans Mester
25. juni 2012 - 01:01 #3
Prøver du at tildele værdier eller sammenligne? :-)
Avatar billede olebole Juniormester
25. juni 2012 - 01:03 #4
Okay, så må løsningen være:

if (!empty($_SESSION) && isset($_SESSION["dataFetched"]) && $_SESSION["dataFetched"] == "true") {
Avatar billede langkiller Nybegynder
25. juni 2012 - 01:10 #5
@olebole: hmm ja du har tilføje !empty($_SESSION) til if sætningen.. det ændrede desværre ikke på noget :-(

@tilaffald: jeg prøver at tildele værdier :)
Avatar billede olebole Juniormester
25. juni 2012 - 01:23 #6
Dooohhhh ... åben øjnene, Ole!

            $_SESSION["dataFetched"] = "true";
            $_SESSION["email"] = $returnData["email"];
            $_SESSION["firstname"] = $returnData["firstname"];
            $_SESSION["lastname"] = $returnData["lastname"];
            $_SESSION["adress"] = $returnData["adress"];
            $_SESSION["zip"] = $returnData["zip"];
            $_SESSION["city"] = $returnData["city"];
            $_SESSION["country"] = $returnData["country"];
Avatar billede langkiller Nybegynder
25. juni 2012 - 01:29 #7
... og nu sidder jeg så også og undrer mig over hvorfor jeg ikke kunne se de dobbelte lighedstegn ! :O har siddet en evighed og kigget og ændret alt andet :b

Nåh, men jeg siger mange tak for hjælpen ! Smid et svar hvis du vil
Avatar billede olebole Juniormester
25. juni 2012 - 01:45 #8
Ellers tak, jeg samler ikke point. Faktisk var tilaffald vist inde på det samme i #3, så han bør nok have dem  =)
Avatar billede langkiller Nybegynder
25. juni 2012 - 13:16 #9
iorden :) ja det var han jo faktisk.

@tilaffald smid et svar hvis vil have points.


Har dog ikke fået løst hele problemet. Den øverste del:
if (isset($_SESSION["dataFetched"]) && $_SESSION["dataFetched"] == "true") {
  $rs = $_SESSION["$type"];
}

skal hente en given Session variabel ud fra variablen $type som bliver sat ind i session ($_SESSION["$type"] kan f.eks. være $_SESSION["firstname"]), men den henter ikke rigtig noget. gør jeg noget forkert her??
Avatar billede olebole Juniormester
25. juni 2012 - 13:37 #10
Ja, slet dine gåseøjne:

$rs = $_SESSION[$type];
Avatar billede langkiller Nybegynder
25. juni 2012 - 13:41 #11
har jeg prøvet.. det gør ikke nogen forskel
Avatar billede olebole Juniormester
25. juni 2012 - 13:52 #12
Jo, det kan jeg garanterer dig, det gør. Det giver to fuldstændig forskellige resultater  =)

I det ene tilfælde er nøglen i arrayet strengen '$type'. I det andet er nøglen den streng, der ligger i variablen $type. Du kan under ingen omstændigheder få det til at virke med gåseøjne  =)
Avatar billede olebole Juniormester
25. juni 2012 - 13:55 #13
$myArray = array('foo'=>'bar');
$type = 'foo';
echo $myArray[$type];  // Virker
echo $myArray["$type"];  // Virker ikke
Avatar billede olebole Juniormester
25. juni 2012 - 14:00 #14
Sorry, du bruger dobbelte gåseøjne - og så parses variablen jo! My bad!  :o|

Hvis $rs ikke bliver sat, må $_SESSION["dataFetched"] ikke være sat - eller indeholde noget andet end true eller "true". Ellers indholder $type måske ikke det forventede?
Avatar billede olebole Juniormester
25. juni 2012 - 14:02 #15
Prøv:

var_dump($_SESSION);
if (isset($_SESSION["dataFetched"]) && $_SESSION["dataFetched"] == "true") {

Hvad skriver det ud?
Avatar billede inteeeL Nybegynder
25. juni 2012 - 14:16 #16
Jeg tror nærmere, det er fordi, værdierne ikke bliver sat. Et var_dump ville vise dette. Hvis $_SESSION["dataFetched"] ikke er sat, går den bare videre og tildeler denne session en værdi, hvorefter $rs sættes - så uanset hvad, burde $rs blive sat. Det kunne tyde på, at dine session_variabler ikke bliver sat. Nedenstående er testet og fungerer:
<?php

function getMyData($type) {
    if (isset($_SESSION["dataFetched"]) && $_SESSION["dataFetched"] == "true") {
        $rs = $_SESSION[$type];
    }
    else {
        $_SESSION["dataFetched"] = "true";
        $_SESSION["email"] = 'Email';
        $_SESSION["firstname"] = 'Firstname';
        $_SESSION["lastname"] = 'Lastname';
        $_SESSION["address"] = 'Address';
        $_SESSION["zip"] = 'Zip';
        $_SESSION["city"] = 'City';
        $_SESSION["country"] = 'Country';
           
        $rs = $_SESSION[$type];
    }
    return $rs;
}

echo getMyData('city');

?>

Bemærk, at adresse på engelsk staves "address".
Avatar billede langkiller Nybegynder
25. juni 2012 - 14:27 #17
men så forstår jeg bare ikke hvorfor $_SESSION[$type]; ikke har nogen værdi.. har både prøvet at returnere den som $rs variablen og  udskrive med print direkte, men der sker ikke noget :S
Avatar billede olebole Juniormester
25. juni 2012 - 14:32 #18
"så uanset hvad, burde $rs blive sat" >> Det tror jeg ikke  =)

Det kommer vel anpå, hvad der sker her:

$rs = $_SESSION[$type];
Avatar billede olebole Juniormester
25. juni 2012 - 14:34 #19
@langkiller: Du kan ikke se, om en variabel f.eks. indeholder en tom streng ved echo. Brug var_dump i stedet, så du får vist både datatype og indhold  =)
Avatar billede langkiller Nybegynder
25. juni 2012 - 14:34 #20
@inteeeL ja det virker hvis man erklærer dem ligesom du gør, men mine session variabler skulle jo gerne få værdierne fra databasen igennem $returnData["firstname"]; osv... hvilket ikke virker
Avatar billede inteeeL Nybegynder
25. juni 2012 - 14:42 #21
Ole: det er klart, at hvis $type-værdien ikke korresponderer med nøglerne fra session-sættet, så går det galt. Men så burde der i princippet også udskrives en fejlmeddelelse (hvis $type er tom) og en advarsel (hvis der bruges et index, som ikke er defineret). :-)
Avatar billede olebole Juniormester
25. juni 2012 - 14:51 #22
Ja, hvis notices er slået til  *o)

Man kunne prøve med:

<?php
error_reporting(E_ALL);

- og håbe, PHP versionen ikke er for gammel  =)
Avatar billede langkiller Nybegynder
25. juni 2012 - 17:23 #23
@olebole den giver ikke noget... :(

men min funktion giver det rigtige retur hvis jeg fjerner toppen (altså den første if sætning) og kun har dette tilbage:

        $returnData_sql = mysql_query("SELECT * FROM users WHERE id='$_SESSION[user_id]'");
        $returnData = mysql_fetch_array($returnData_sql);
       
            $_SESSION["dataFetched"] = "true";
            $_SESSION["email"] = $returnData["email"];
            $_SESSION["firstname"] = $returnData["firstname"];
            $_SESSION["lastname"] = $returnData["lastname"];
            $_SESSION["adress"] = $returnData["adress"];
            $_SESSION["zip"] = $returnData["zip"];
            $_SESSION["city"] = $returnData["city"];
            $_SESSION["country"] = $returnData["country"];

            $rs = $_SESSION["$type"];

return $rs;


jeg prøvede også at ændre:
$rs = $_SESSION["$type"];
til:
$rs = "hej";

hvilket gav mig meddelelsen:
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on line 0

så det betyder vel at php versionen ER for gammel?
Avatar billede olebole Juniormester
25. juni 2012 - 21:06 #24
Det kan jeg ikke tilslutte mig. Til gengæld kan jeg slå fast, at jeg efterhånden ikke aner, hvad der sker i din kode, eller hvad du gør. Jeg har ingen anelse om, hvad der er foregået forud for afviklingen af funktionen - og derfor heller ikke hvad der er sat, eller hvad der burde være sat.

Jeg tror ikke, jeg kommer længere uden at sidde med koden selv
Avatar billede langkiller Nybegynder
25. juni 2012 - 23:48 #25
det er forståeligt nok :) ellers mange tak for forsøget. jeg må gå igang med at kigge det hele igennem igen og måske lave det forfra.

Jeg holder lige spørgsmålet åbent lidt endnu hvis der skulle kommer andre bud på en mulig løsning.
Avatar billede langkiller Nybegynder
26. juni 2012 - 00:19 #26
tror jeg har fundet ud af det nu.. det virkede sådan halvt om halvt før. Det var da man loggede ud i mit system og derefter loggede ind igen at den ikke kunne finde ud af det fordi jeg ikke havde brugt unset ved log ud. det ser umiddelbart ud til at virke nu :)

hvis nogen af jer der har hjulpet vil have points, smider i bare et svar
Avatar billede olebole Juniormester
26. juni 2012 - 00:34 #27
"Oh, Lord ... I can see ...!!!"  *D

Så forstår jeg pludselig langt mere på et langt højere niveau! Det lyder yderst sandsynligt - og netop derfor ville det jo også have været skønt med et var_dump lige før if'en  *o)

Undskyld, jeg tabte tråden/koncentrationen, for både inteeeL og jeg var jo inde på at tjekke din session's initiale værdi(er) i #15 og #16.

Anyway, godt du fandt løsningen  =)
Avatar billede olebole Juniormester
26. juni 2012 - 00:38 #28
- og ellers tak, jeg samler ikke point. inteeeL bør have dem  =)

I øvrigt behøver du ikke unset'e de enkelte session værdier. Du kan bare skrive:

$_SESSION = array();

Så er din session tom - og du har ikke glemt en enkelt værdi (Murphy's fornavn, f.eks.)
Avatar billede inteeeL Nybegynder
26. juni 2012 - 01:29 #29
Så giver det hele jo meget god mening igen. Ole og jeg var nemlig inde på det. Et var_dump ville have sparet os en masse tid. :-)

Tak for point!
Avatar billede langkiller Nybegynder
26. juni 2012 - 20:17 #30
Yea det var rart endelig at få løst det.

Mange tak for hjælpen til jer begge :)
Avatar billede olebole Juniormester
26. juni 2012 - 22:06 #31
Selvtak  =)
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