JSON změna hodnoty – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

JSON změna hodnoty – PHP – Fórum – Programujte.comJSON změna hodnoty – PHP – Fórum – Programujte.com

 

David
~ Anonymní uživatel
177 příspěvků
14. 8. 2018   #1
-
0
-

Ahoj lidi,

mám JSON soubor  

[{"active":"1","name":"Martin","pass":"76d80224611fc919a5d54f0ff9fba446","role":"admin","phone":"+4200000000","mail":"martin@seznam.cz"},{"active":"1","name":"David","pass":"7815696ecbf1c96e6894b779456d330e","role":"user","phone":"+420","mail":"david@seznam.cz"},{"active":"1","name":"Jirka","pass":"76d80224611fc919a5d54f0ff9fba446","role":"user","phone":"","mail":""}]

normálně s ním pracuji, ale nedaří se mi  v něm aktualizovat data.

zkoušel jsem něco jako, viz. výňatek kodu

$myFile = "./json/users.json";
$arr_data = array();
$jsondata = file_get_contents($myFile);
$arr_data = json_decode($jsondata, true);

foreach($arr_data as $key => $value){
		if ($arr_data[$key][name] == $username){
			
			$arr_data[$key][mail] == "aa"; 
			var_dump($arr_data[$key]);
			
			$jsondata = json_encode($arr_data);
			file_put_contents($myFile, $jsondata);	
		
		};
};

Potřebuji pokud formulář pošle přes POST username, aby, pokud ho v jsonu najdu, abych změnil mail nebo i další data.

Podmínka if ($arr_data[$key][name] == $username) je funkční

ale toto $arr_data[$key][mail] == "aa"; vypadá jako nefunčkní, protože mi var_dump($arr_data[$key]); stále ukazuje púvodní hodnotu email. Zkoušel jsem to i znovu převést do JSON, ale ani tam se mi to nemění.

Můžete mi někdo, prosím poradit?

Díky


David

Nahlásit jako SPAM
IP: 37.188.153.–
Kit+15
Guru
14. 8. 2018   #2
-
0
-

#1 David
Takhle to nemůže fungovat, neboť pole $arr_data se nepředává odkazem, ale hodnotou. Co kdybys raději použil databázi? Bude to rychlejší a spolehlivější.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
David
~ Anonymní uživatel
177 příspěvků
14. 8. 2018   #3
-
0
-

#2 Kit
Bohužel nemůžu použít databázi, neběží to na standardním PC. Nicméně přiznám se, že jsem z toho nepochopil co mám udělat jinak...

I tak dík

D

Nahlásit jako SPAM
IP: 37.188.153.–
Kit+15
Guru
14. 8. 2018   #4
-
0
-

#3 David
Práce s $arr_data nepatří dovnitř cyklu foreach.

foreach($arr_data as $key => &$value){
	if ($value[name] == $username){
		$value[mail] == "aa"; 
		var_dump($value);
	};
};
$jsondata = json_encode($arr_data);
file_put_contents($myFile, $jsondata);
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
14. 8. 2018   #5
-
0
-

#3 David
Tady vidíš, že proměnnou $value je vhodné přejmenovat. Ve finále to bude vypadat asi takhle: 

foreach($arr_data as &$user){
	if ($user[name] == $username){
		$user[mail] == "aa"; 
	};
};
$jsondata = json_encode($arr_data);
file_put_contents($myFile, $jsondata);
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
David
~ Anonymní uživatel
177 příspěvků
14. 8. 2018   #6
-
0
-

#5 Kit
Díky moc, ale stále mi to neběží, když si tam přidám: echo $user[mail];

foreach($arr_data as &$user){
	if ($user[name] == $username){
		$user[mail] == "aa"; 

		echo $user[mail];
	};
};

stále mi vrací původní hodnotu, která je v JSONu a ne "aa". jak bych podle výše uvedeného očekával. Samozřejmě se hodnota mail nezměnila ani v JSONu.

D

Nahlásit jako SPAM
IP: 37.188.153.–
Kit+15
Guru
14. 8. 2018   #7
-
0
-

#6 David
Tak to nevím, neboť tyto praktiky se mi příčí a nepoužívám je.

Teď jsem si všiml, že tam mám syntaktické chyby. Zkus tohle: 

foreach($arr_data as &$user){
	if ($user["name"] == $username){
		$user["mail"] = "aa"; 
	};
};
$jsondata = json_encode($arr_data);
file_put_contents($myFile, $jsondata);

Divím se, že to PHP na tebe neřve.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
14. 8. 2018   #8
-
0
-

#7 Kit
bych teda cekal spis: 
 

$user["mail"] = "aa"; // nez:  $user["mail"] == "aa";
Nahlásit jako SPAM
IP: 89.24.57.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
14. 8. 2018   #9
-
0
-

#8 KIIV
To je ono! Ve svém příspěvku jsem to opravil.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:43c:d...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
David
~ Anonymní uživatel
177 příspěvků
14. 8. 2018   #10
-
0
-

#9 Kit
Ahoj lidi, udělal jsem zatím jen rychlou zkoušku, ale vypadá to, že to bude ono.

Lidi moc díky, zítra, možná pozítří to vyzkouším a jestli to klapne, dám vědět.


D

Nahlásit jako SPAM
IP: 37.188.153.–
David
~ Anonymní uživatel
177 příspěvků
16. 8. 2018   #11
-
0
-

Ahoj lidi,

moc díky, je to ono.

D

Nahlásit jako SPAM
IP: 37.188.236.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý