Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 1902
Hei,

jeg holder på med å lære meg php så smått. Får til en del, men er mye jeg ikke skjønner meg på. Jeg har noe info som jeg lagrer som et variabel i en funksjon, og derifra kan jeg bruke variablen. Jeg har prøvd å gjøre den global for at den andre funksjonen min skal kunne bruke den i et array. Men ingen av funskjonene fungerer når den er global. Kanskje jeg har missforstått greia med global vs local variabel...

Her er koden min:

Kode

<?php
require_once 'core/init.php';

$user = DB::getInstance()->get('users', array('username', '=', 'testbruker'));

if(!$user->count()) {
	echo 'No user';
} else {
	foreach($user->results() as $user) {
		echo $user->company, '<br>' ;
		$companyid = $user->company;
		echo $companyid, '<br>';

	}
}

$company = DB::getInstance()->get('companies', array('cid', '=', '.$companyid.'));

if(!$company->count()) {
	echo 'No company';
} else {
	foreach($company->results() as $company) {
		echo $company->cname, '<br>' ;
	}
}
I koden over har jeg IKKE gjort $companyid global, og nå vil det gå helt fint å echoe ut tekstsnutten jeg vil. Men jeg vil at denne tekstsnutten skal settes inn i arrayen i den andre funksjonen. Hva er enkleste måte å gjøre det på? Er det ikke her ønskelig å bruke et variabel?

Vennelig hilsen meg
Du bør helst unngå å bruke globaler da det strider mot "general conventions". Det du heller bør gjøre er å sende de variablene du trenger inn i de objektene / funksjonene du behøver. Dette kalles Dependency Injection og kan være verdt å lese seg opp på.

I koden du har limt inn har du ingen egne funksjoner, derfor er det litt vanskelig å forstå helt hva du mener.

Hva er det du ikke får til i koden over?
ah sorry, mente at jeg i første delen får hentet ut companyid fra en database absert på hvilke navn som er valgt, det funker og jeg får echet det ut riktig, så lenge "$companyid = $user->company; " holder seg inne i samme statment. altså om jeg deklarerer $companyid = $user->company; utenfor if/else statmentet så funker det ikke å echoe ut $companyid. Der det står"$company = DB::getInstance()->get('companies', array('cid', '=', '.$companyid.'));" ønsker jeg at $companyid skal være det jeg fant ut i første delen. Men det går ikke bruke variablet der tydeligvis. Litt vanskelig å forklare..

Jeg prøver å hente ut en id fra en databse basert på et navn, denne iden skal så brukes til å hente ut firmanavnet fra en annen database. Kort forklart.
Sist endret av SecondLife; 28. september 2014 kl. 17:33. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
note to self: å lese alt pleier å hjelpe..

Det du har er to forskjellige løkker. $companyId / $user er tilgjengelig i den første løkka og $company er tilgjengelig i den andre. Å sette $companyId global vil ikke hjelpe noe i denne sammenhengen, når du kommer ned til løkke #2 (foreach $company->res...) så er det eneste du har igjen av $companyId den siste verdien fra sist løkke. Mao iden til firmaet til den siste brukeren du leste fra databasen.

Om du vil vise brukere for hvert firma må du nok ha en løkke for å gå gjennom firmaene (løkke #2 du har i dag), og så ha en løkke på brukere i dette firmaet inni firmaløkka igjen.
Sist endret av norboost; 28. september 2014 kl. 17:34.
Jeg ønsker bare at verdien i $companyid skal brukes "$company = DB::getInstance()->get('companies', array('cid', '=', 'HER'));" for å få hentet ut riktig verdi til $company. Hva er enkleste måte å fikse det på. Skal bare hente ut en verdi. Hvordan får jeg brukt $companyid verdien i arrayet mitt?
Sist endret av SecondLife; 28. september 2014 kl. 17:44.
Her har du to versjoner som vil fungere:

Kode

$company = DB::getInstance()->get('companies', array('cid', '=', $companyid));

Kode

$company = DB::getInstance()->get('companies', array('cid', '=', "$companyid"));
Du må lese deg bedre opp på variabler, dette har ingenting med global kontra lokal å gjøre. Du har rett og slett ikke forstått grunnprinsippene av variabler og bruk av disse. Sjekk også forskjellen på double og single quotes i PHP.
Sist endret av danielsk; 28. september 2014 kl. 17:57.
Tusen takk Danielsk, har bare lest om variabler på w3school. Noen andre sider du anbefaler for å lære grunnleggende php?
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Sitat av norboost Vis innlegg
Du bør helst unngå å bruke globaler da det strider mot "general conventions". Det du heller bør gjøre er å sende de variablene du trenger inn i de objektene / funksjonene du behøver. Dette kalles Dependency Injection og kan være verdt å lese seg opp på.

I koden du har limt inn har du ingen egne funksjoner, derfor er det litt vanskelig å forstå helt hva du mener.

Hva er det du ikke får til i koden over?
Vis hele sitatet...

Dependency injection går ut på ganske mye mer enn å sende argumenter til funksjoner, og er ikke relevant for dette prosjektet - anbefaler å lese mer om emnet.