Špatný tvar array – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Špatný tvar array – PHP – Fórum – Programujte.comŠpatný tvar array – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
noris0
Newbie
27. 2. 2014   #1
-
0
-

Mám array, který se mi divně vypisuje, vypadá takto:

array(1) {[0]=> string(1) "7" [1]=> string(1) "4"}

případně bez použití

 var_dump

vypada takto : 

["7","4"]

jak to dostat do správného array tedy

[0]=>"7" [1]=>"4"

?

(ty id potřebuji do podmínky query dotazu: where id in(array)

Všem díky za pomoc

Nahlásit jako SPAM
IP: 46.135.49.–
KIIV
~ Moderátor
+43
God of flame
27. 2. 2014   #2
-
0
-

v cem ti nevyhovuje funkce  array_key_exists ?

EDIT: nebo mozna nechapu presne o co se snazis a pak mozna v cem ti nevyhovuje join / implode

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
27. 2. 2014   #3
-
+1
-
Zajímavé

#1 noris
Tohle nedělej. Použij JOIN v SQL.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
noris0
Newbie
27. 2. 2014   #4
-
0
-

#2 KIIV
array_key_exists zjistí zda je parametr v array
já potřebuji z [0]=>string(1) "4" udělat [0]=>"4" abych to mohl dále spracovat (potřebuji odstranit string(1) ) 

Tento kód:

$data = var_dump($_POST['id']);
echo $data;

My vypíše:
array(1) {[0]=> string(1) "7" [1]=> string(1) "4"}

Tento kód: 

$data = json_encode($_POST['id']);
echo $data; 

my vypíše toto:
["7","4","1"] 

de o to, že se to nechová jako řádný array, například když dám $data['0'] tak to nevypíše první číslo v array

Nahlásit jako SPAM
IP: 46.135.49.–
noris0
Newbie
27. 2. 2014   #5
-
0
-

#3 Kit
teď mi nejde o to jak to zadám do dotazu dtb, ale to že ten array se nechová jako array i když to je array...
normální vypadá takto [0]=>"1" ale tento bud [0]=>string() "1" nebo ["1"] a tím pádem s ním nemohu pracovat...

Nahlásit jako SPAM
IP: 217.77.165.–
KIIV
~ Moderátor
+43
God of flame
27. 2. 2014   #6
-
+1
-
Zajímavé

#5 noris
$arr = array(7,4);

$str = join(',', $arr);

kdo vi co tam do toho pole vubec presne narves

+ hezci je na vypis spis print_r

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
noris0
Newbie
27. 2. 2014   #7
-
0
-

#6 KIIV

Pole příjmám od ajaxu:

function add(chbox, data)
{
var selected = chbox.getAttribute("name"); //name skrývá id číslo
pchecked.push(selected); //vložím do pole pchecked
$.ajax({                 //odešlu pchecked php souboru
                url: 'result.php',
                data: { id : pchecked },
                type: "POST",
                success: function(pchecked) {
                $( "#listresult" ).html(pchecked);
                },
            });
}

//PHP
$data = json_encode($_POST['id']); //vypíše ["id","id"]
$data = var_dump($_POST['id']); //vypíše array(1) {[0]=> string(1) "id" [1]=> string(1) "id"}
echo $data;

Takže chyba bude opět v js scriptu? Pokud ano, nevidíte ji tam někdo? V js sem nový a nenapadá mě co bych tam mohl upravit :/

Nahlásit jako SPAM
IP: 46.135.49.–
KIIV
~ Moderátor
+43
God of flame
27. 2. 2014   #8
-
+1
-
Zajímavé

podle toho vypisu z var_dump($_POST['id']) je to uz blbe z toho ajaxu

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
noris0
Newbie
27. 2. 2014   #9
-
0
-

#8 KIIV
Toho sem se bál....
Přitom ale js vrací to pole jako čísla tak jak má...
Každopádně díky, mrknu ještě na to a přípdně budu muset napsat známému co mi s tím scriptem pomáhal ptže moje znalost js je dost bídná..

Pokud na něco přijdu, hodím sem řešení pro ostatní :)

Nahlásit jako SPAM
IP: 217.77.165.–
Ericsko+3
Stálý člen
28. 2. 2014   #10
-
0
-

#7 noris
Ak chces ajaxom posielat data ako json, musis ich predtym este upravit:

data: JSON.stringify({ id : pchecked })

potom v php:
$data = json_decode($_POST['id']);

Nahlásit jako SPAM
IP: 88.212.34.–
noris0
Newbie
28. 2. 2014   #11
-
0
-

#10 Ericsko
Chyba bude ve scriptu nejspíš ještě někde jinde, po použití JSON.stringify a v php json_decode mi echo nic nevypíše.
Celý script vypadá takto:  

data = [
{label: 'BS Player', id: '7'},
{label: 'Microsoft Office', id: '4'},
{label: 'Open Office', id: '1'},
{label: 'Origin', id: '5'},
{label: 'PhotoShop', id: '8'},
{label: 'Skype', id: '2'},
{label: 'Steam', id: '3'},
{label: 'VLC Player', id: '6'}, 
];
var obj = { 
a: document.getElementById('fprograms'), 
b: document.getElementById('chprograms') 
};
var selected = "";
var pchecked = []; 

function rem(chbox, data) 
{
pchecked.splice(pchecked.indexOf(chbox.getAttribute("name")),1);
$.ajax({
                url: 'result.php',
                data: JSON.stringify(pchecked),
                type: "POST",
                success: function(pchecked) {
                $( "#listresult" ).html(pchecked);
                },
            });
}

function add(chbox, data)
{
pchecked.push(chbox.getAttribute("name"));
$.ajax({
                url: 'result.php',
                data: JSON.stringify(pchecked),
                type: "POST",
                success: function(pchecked) {
                $( "#listresult" ).html(pchecked);
                },
            });
}

function check(chbox,obj,data) 
{
data[chbox.value*1].check = chbox.checked;
write(obj,data);  
};
function write(obj,data) 
{ 
var i,str; 
var str  = {a:'',b:''}; 
for (i=0;i<data.length;i++) 
{ 
if (!(data[i].check)) 
     {str.a+='<li><input type=checkbox value =' + i + ' onchange="add(this);check(this,obj,data)" name='+data[i].id+'>' + data[i].label + '</li>';} 
else {str.b+='<li><input type=checkbox value = '+ i + ' onchange="rem(this);check(this,obj,data)" name='+data[i].id+' checked="checked">' + data[i].label + '</li>'} 
} 
obj.a.innerHTML = str.a; 
obj.b.innerHTML = str.b;
} 
write(obj,data);

A PHP kód:
<?php
$data = json_decode($_POST['id']); /*nevypíše nic*/
$pdata = var_dump(json_decode($_POST['id'])); /*vypíše NULL*/
echo $data;
echo $pdata;
?>

Ještě mě napadá, že by to šlo poslat jako něco jiného než json že? Mohlo by to vyřešit problém? Půjde to pak rozumně spracovat v php a každou položku (id vložené do pchecked) vložit do query dotazu?

Nahlásit jako SPAM
IP: 46.135.49.–
Ericsko+3
Stálý člen
28. 2. 2014   #12
-
0
-

#11 noris
Skus dat k tomu aj html, nech sa pohrame.

Skus si vypisat do konzoly objekt pchecked pred tym, ako ho hodis do ajaxu.

Nahlásit jako SPAM
IP: 87.197.170.–
noris0
Newbie
28. 2. 2014   #13
-
0
-

#12 Ericsko
tak console.log(pchecked) vypisuje pchecked jako ["7", "4", "1", "5", "8"].

EDIT: Živý příklad je zde

Nahlásit jako SPAM
IP: 46.135.49.–
Ericsko+3
Stálý člen
28. 2. 2014   #14
-
0
-

#13 noris
Jasne, takze musis to v tom js este predtym previest na integery:
pchecked = pchecked.map(function(x) {return parseInt(x);});

Este taka offtopic advice: Tie checkbox labely si daj do <label> tagov, aby si nemusel klikat len presne na checkbox ;)

Nahlásit jako SPAM
IP: 87.197.170.–
noris0
Newbie
28. 2. 2014   #15
-
0
-

#14 Ericsko
Console teď vypisuje pchecked jako [7, 4, 1] ale phpko stále hází NULL :/
Jinak za label díky, uplě sem na ně zapomněl :)

Nahlásit jako SPAM
IP: 46.135.49.–
Ericsko+3
Stálý člen
28. 2. 2014   #16
-
0
-

#15 noris
Vypisuje ti null, lebo id je null. V ajaxe musis dat do data premennej:

JSON.stringify({id: pchecked}),

Nahlásit jako SPAM
IP: 87.197.170.–
noris0
Newbie
28. 2. 2014   #17
-
0
-

#16 Ericsko
I přesto to hází null.
 

function add(chbox, data)
{
pchecked.push(chbox.getAttribute("name"));
pchecked = pchecked.map(function(x) {return parseInt(x);});
console.log(pchecked);
$.ajax({
                url: 'result.php',
                data: JSON.stringify({id:pchecked}),
                type: "POST",
                success: function(pchecked) {
                $( "#listresult" ).html(pchecked);
                },
            });
}
Nahlásit jako SPAM
IP: 46.135.49.–
Řešení
Ericsko+3
Stálý člen
28. 2. 2014   #18
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#17 noris
Prideme na to pomalicky ;)

Skus:

data: {id: JSON.stringify(pchecked)},

Nahlásit jako SPAM
IP: 87.197.170.–
noris0
Newbie
28. 2. 2014   #19
-
0
-

#18 Ericsko
Super funguje, díky :)

Nahlásit jako SPAM
IP: 46.135.114.–
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, 19 hostů

Podobná vlákna

Přetahování a tvar formuláře — založil Nazghul-CZ

Iny tvar formulara — založil jáchim

Převod na binárni tvar — založil Pavel

 

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