[PHP] array doorgeven dmv scriptaculous

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
Beste,

Ik ben nu enige tijd bezig om te sorteren op een vriendelijke manier. Zo kwam ik de scriptaculous library tegen welke mij wel bevalt.
Alles gaat prima, ik heb inmiddels veel gebruik gemaakt van deze JS library, maar nu wil ik het combineren met PHP.

Ik heb nu een gesorteerde array JS en die ziet er zo uit:
HTML:
1
sub_list[]=3&sub_list[]=18&sub_list[]=4&sub_list[]=6&sub_list[]=17&sub_list[]=20&sub_list[]=19


Nu wil ik deze array meegeven naar een andere file die de verwerkingen doet en "succes" teruggeeft en dit dmv InnerHTML in een divje plaatsts.
Dit gaat allemaal prima.

Ik gebruik prototype voor ajax zaken
HTML:
1
2
3
4
5
6
7
8
var newarray =escape(Sortable.serialize('sub_list'));
var params = 'id=' + id + '&newar=' + newarray;
        var options = {
                        method : 'post',
                        parameters : params, onSuccess:handlerFunc, onFailure:errFunc
                      };
        $("updated").innerHTML="...loading...";
        new Ajax.Request('./ajax/menu_sort.php', options);


Echter, bovenstaande array wordt gezien als string. Hoe krijg ik het voor elkaar dat bovenstaande string wordt behandeld als array.

in ajax/menu_sort.php
PHP:
1
2
$sub_list = array();
$sub_list = urldecode($_POST['newar']);

Bovenstaande werkt niet. Als ik dan echo $sub_list[0] doe, dan krijg ik 's' als resultaat. Kortom, het wordt niet meer zoals ik had gehoopt.

Iemand enig idee? Waarom wordt de doorgegeven array niet behandeld als array,maar als string en hoe krijg ik de ontvangen 'string' weer terug naar een juiste array?!

[webhero.nl]


Acties:
  • 0 Henk 'm!

  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 14-09 19:35

Setragasj

is using radars to communicate

Misschien dat je je $_POST['newar'] even moet unserializen

<Typ een persoonlijk bericht>


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
Setragasj schreef op dinsdag 06 februari 2007 @ 11:35:
Misschien dat je je $_POST['newar'] even moet unserializen
Thanx, het leek even de oplossing, een logisch in ieder geval, maar het werkt niet.

als ik nu het volgende uitvoer:
PHP:
1
2
$sub_list = unserialize(urldecode($_POST['newar']));
print_r ($sub_list);

Dan krijg ik niets te zien, kortom, geen array....


Als ik :
PHP:
1
2
$sub_list = array(urldecode($_POST['newar']));
print_r ($sub_list);

Dan krijg ik slechts 1 array-element met alle gegevens, dat wil ik ook niet.
Array ( [0] => sub_list[]=4&sub_list[]=17&sub_list[]=6&sub_list[]=3&sub_list[]=18&sub_list[]=20&sub_list[]=19 )
Iemand anders een idee over het terugkrijgen van een array op basis van onderstaande string:
sub_list[]=17&sub_list[]=6&sub_list[]=3&sub_list[]=4&sub_list[]=18&sub_list[]=20&sub_list[]=19

[ Voor 18% gewijzigd door koekiemonster op 06-02-2007 12:24 ]

[webhero.nl]


Acties:
  • 0 Henk 'm!

  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 14-09 19:35

Setragasj

is using radars to communicate

Ja, maar die array die je nu terug krijgt is precies wat je terug hoort te krijgen.
Scriptaculous zet de elementen zoals die nu geordened zijn met hun id's in de juiste volgorde in een array, die serialize je, stuur je naar php, die doet unserialize en vervolgens kun jij die array gebruiken... Dat lijkt mij de bedoeling?

Waarom doe je eigenlijk een urldecode op $_POST['newar'] ?

<Typ een persoonlijk bericht>


Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Je hebt wel een speciale serializer nodig, hier op GoT gebruiken ze er volgens Crisp ook 1:

crisp in "[php][js] Javascript object unserializen..."


edit1: of kijk hier: http://www.devpro.it/javascript_id_102.html

edit2: desnoods parse je die string en bouw je hem die-hard (en dom) om naar een array in php. sjonge jonge...

[ Voor 34% gewijzigd door flashin op 06-02-2007 12:53 ]


Acties:
  • 0 Henk 'm!

  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 14-09 19:35

Setragasj

is using radars to communicate

flashin schreef op dinsdag 06 februari 2007 @ 12:52:
Je hebt wel een speciale serializer nodig, hier op GoT gebruiken ze er volgens Crisp ook 1:

crisp in "[php][js] Javascript object unserializen..."
Nee is niet nodig, in scriptaculous zit al een serializer.. ;)

<Typ een persoonlijk bericht>


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
Setragasj schreef op dinsdag 06 februari 2007 @ 12:50:
Ja, maar die array die je nu terug krijgt is precies wat je terug hoort te krijgen.
Scriptaculous zet de elementen zoals die nu geordened zijn met hun id's in de juiste volgorde in een array, die serialize je, stuur je naar php, die doet unserialize en vervolgens kun jij die array gebruiken... Dat lijkt mij de bedoeling?

Waarom doe je eigenlijk een urldecode op $_POST['newar'] ?
als ik de serialize van sriptacluous gebruik, dan geeft hij niet de complete array mee.
daarvoor doe ik dan een escape over de serialize van scriptacluous.
het probleem is dat ik die array dus ook wel zo terug wil, maar het is geen array. PHP site de waarde als een string.

[webhero.nl]


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
flashin schreef op dinsdag 06 februari 2007 @ 12:52:
Je hebt wel een speciale serializer nodig, hier op GoT gebruiken ze er volgens Crisp ook 1:

crisp in "[php][js] Javascript object unserializen..."


edit1: of kijk hier: http://www.devpro.it/javascript_id_102.html

edit2: desnoods parse je die string en bouw je hem die-hard (en dom) om naar een array in php. sjonge jonge...
edit2 wil ik voorkomen omdat ik denk dat dit een klein probleempje is wat mooier op te lossen is.

[webhero.nl]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Volgens mij zo....

HTML:
1
2
3
4
5
6
7
8
var newarray =escape(Sortable.serialize('sub_list'));
var params = 'id=' + id +  newarray;
        var options = {
                        method : 'post',
                        parameters : params, onSuccess:handlerFunc, onFailure:errFunc
                      };
        $("updated").innerHTML="...loading...";
        new Ajax.Request('./ajax/menu_sort.php', options);


En dan $_POST['sub_list'] uitlezen?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
koekiemonster schreef op dinsdag 06 februari 2007 @ 13:08:
[...]


als ik de serialize van sriptacluous gebruik, dan geeft hij niet de complete array mee.
daarvoor doe ik dan een escape over de serialize van scriptacluous.
het probleem is dat ik die array dus ook wel zo terug wil, maar het is geen array. PHP site de waarde als een string.
$_POST['newar'] is dus de string 'sub_list[]=4&sub_list[]=17&sub_list[]=6&sub_list[]=3&sub_list[]=18&sub_list[]=20&sub_list[]=19' en dat is simpelweg niet hoe PHP een array serializet. Dus ofwel je moet in PHP de inverse van die serialize hebben/maken, ofwel je moet zo serializen dat het het hetzelfde formaat wordt als een door PHP geserializede array.

Ik ken dat scriptaculous niet, maar het lijkt me nogal logisch dat de serialize en unserialize functies met elkaar moeten overeenstemmen.
edit:
ik zeur, crisp (zie onder) heeft gelijk. :P geen unserialize nodig in dit geval..

[ Voor 4% gewijzigd door Voutloos op 06-02-2007 14:06 ]

{signature}


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
LuCarD schreef op dinsdag 06 februari 2007 @ 13:22:
Volgens mij zo....

HTML:
1
2
3
4
5
6
7
8
var newarray =escape(Sortable.serialize('sub_list'));
var params = 'id=' + id +  newarray;
        var options = {
                        method : 'post',
                        parameters : params, onSuccess:handlerFunc, onFailure:errFunc
                      };
        $("updated").innerHTML="...loading...";
        new Ajax.Request('./ajax/menu_sort.php', options);


En dan $_POST['sub_list'] uitlezen?
Dit is een goede, dit heb ik dus geprobeerd, echter...

Als ik gewoon een alert doe voor de Request, ala:
alert(Sortable.serialize('sub_list'));
Krijg ik gewoon een mooie array zoals scriptaculous aangeeft.

Kom ik in ajax/menu_sort.php en ik vraag dan de sub_list op, dan heeft hij alleen nog de laatste waarde. Als ik vervolgens een count doe van de array geeft hij ook 1 terug, in plaats van 7.


als ik kijk via firebug, dan krijg ik het volgende in de post:
id=1sub_list%5B%5D%3D20%26sub_list%5B%5D%3D6%26sub_list%5B%5D%3D18%26sub_list%5B%5D%3D3%26sub_list%5B

%5D%3D4%26sub_list%5B%5D%3D17%26sub_list%5B%5D%3D19&_=
Die %-tekens komen door de escape, haal ik die weg, dan zie ik dit in de post:
id=1sub_list%5B%5D&sub_list%5B%5D=19&_=
Zoals je ziet niet de gehele array, maar het laatste item.

[webhero.nl]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
ipv via firebug en karakters welke ge-escaped zijn moeilijk te doen kan je natuurlijk ook gewoon de waarde van params (zonder serialize) bekijken en zien dat het dan geen goede parameter string is. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:26

crisp

Devver

Pixelated

JavaScript:
1
2
var newarray = Sortable.serialize('sub_list');
var params = 'id=' + id + '&' + newarray;

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
crisp schreef op dinsdag 06 februari 2007 @ 13:59:
JavaScript:
1
2
var newarray = Sortable.serialize('sub_list');
var params = 'id=' + id + '&' + newarray;
exact dit gedaan en toch geeft hij alleen de laatste door [array heeft nu maar 1 waarde]
ik snap het echt niet meer......

[webhero.nl]


Acties:
  • 0 Henk 'm!

  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 14-09 19:35

Setragasj

is using radars to communicate

Maar doe nu eens NIET een escape in js en doe eens NIET de urldecode in php...
Volgens mij loopt ie daar gewoon op vast..

<Typ een persoonlijk bericht>


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
Setragasj schreef op dinsdag 06 februari 2007 @ 14:54:
Maar doe nu eens NIET een escape in js en doe eens NIET de urldecode in php...
Volgens mij loopt ie daar gewoon op vast..
is nu helemaal weg..
als ik nu het volgende uitvoer, in de ajax/menu_sort.php:
PHP:
1
print_r ($_POST['sub_list']);

Dan krijg ik:
Array ( [0] => 19 )
Wat niet klopt.

Huidige code van menu.php
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
     function updateOrder()
     {
        var id = <?php echo $connector->show_safe($rij->id)?>;
        var newarray =Sortable.serialize('sub_list');
        var postit = newarray;
        //var params = 'id=' + id + '&newar=' + postit;
        var params = 'id='+ id + '&' + newarray;
        var options = {
                        method : 'post',
                        parameters : params, onSuccess:handlerFunc, onFailure:errFunc
                      };
        $("updated").innerHTML="...loading...";
        new Ajax.Request('./ajax/menu_sort.php', options);
     }


Code in ajax/menu_sort.php
PHP:
1
print_r ($_POST['sub_list']);


Resultaat:
Array ( [0] => 19 )
Verwacht resultaat een array met 7 items en niet 1.
Sorry dat ik hulp blijf vragen....

[webhero.nl]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    function updateOrder()
     {
        var id = <?php echo $connector->show_safe($rij->id)?>;
        var newarray =Sortable.serialize('sub_list');
        var postit = newarray;
        //var params = 'id=' + id + '&newar=' + postit;
        var params = 'id='+ id + '&' + newarray;
        var options = {
                        method : 'post',
// Parameters is voor de get method
//                        parameters : params, onSuccess:handlerFunc, onFailure:errFunc
// Postbody is voor de Post method 
                        postBody : params, onSuccess:handlerFunc, onFailure:errFunc
                      };
        $("updated").innerHTML="...loading...";
        new Ajax.Request('./ajax/menu_sort.php', options);
     }

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 13-08 19:58

koekiemonster

want a cookie

Topicstarter
Lucard je bent geweldig!

Dit was dus het enige wat mis ging :(
damn.....

[webhero.nl]

Pagina: 1