Toon posts:

[php][js] Javascript object unserializen naar php object

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedendag allemaal,

Met dhtml zorg ik ervoor dat ik een javascript object serialize naar een string. Deze string stuur ik dan met een post variabele mee door een volgende pagina waar ik hem met functie eval weer aanmaak. Dit gaat allemaal perfect (zie code).

code:
1
2
 {naam: "oets", leeftijd: 18, geslacht: "man", vriendinnetjes: [{naam:"grietsen"}, 
{naam:"marietje"}, {naam:"grietje"}]}


Nu wil ik eigenlijk dit object unserializen met php. Dus dat ik van een javascript object(serialized string) een php object kan maken. De standaard php functie unserialize wil hem helaas niet uitvoeren. Is hier misschien een andere oplossing voor???

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
als je met php5 werkt kun je ook aan simplexml denken. Dat genereer je met JS gewoon een xml document die php weer omzet.

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
Ik heb helaas geen php 5 tot mijn beschikking, maar versie 4.3.8

[ Voor 19% gewijzigd door Verwijderd op 04-10-2004 14:37 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

zo zou de serialized string er uit moeten zien:
code:
1
s:119:"{naam: "oets", leeftijd: 18, geslacht: "man", vriendinnetjes: [{naam:"grietsen"}, {naam:"marietje"}, {naam:"grietje"}]}";


edit: dit is onzin, zie onder ;)

[ Voor 9% gewijzigd door crisp op 04-10-2004 15:04 ]

Intentionally left blank


Verwijderd

Topicstarter
Maar wanneer ik deze string unserialize dan maakt php er geen object van maar een string.

En wat betekend die s:119 precies?

[ Voor 9% gewijzigd door Verwijderd op 04-10-2004 14:45 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

crisp schreef op 04 oktober 2004 @ 14:38:
zo zou de serialized string er uit moeten zien:
Dat ziet er uit als een String, niet als een object?
Verwijderd schreef op 04 oktober 2004 @ 14:44:
Maar wanneer ik deze string unserialize dan maakt php er geen object van maar een string.

En wat betekend die s:119 precies?
Dat het een string van 119 karakters is, bij mijn weten.

[ Voor 42% gewijzigd door ACM op 04-10-2004 14:46 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

excuus; verkeerde copy-pasta; zo zou het eruit moeten zien:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$arr = array(
        'naam' => 'oets',
        'leeftijd' => 18,
        'geslacht' => 'man',
        'vriendinnetjes' => array(
                array('naam' => 'grietsen'),
                array('naam' => 'marietje'),
                array('naam' => 'grietje')
            )
    );

echo serialize($arr);

code:
1
a:4:{s:4:"naam";s:4:"oets";s:8:"leeftijd";i:18;s:8:"geslacht";s:3:"man";s:14:"vriendinnetjes";a:3:{i:0;a:1:{s:4:"naam";s:8:"grietsen";}i:1;a:1:{s:4:"naam";s:8:"marietje";}i:2;a:1:{s:4:"naam";s:7:"grietje";}}}

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

overigens gebruik ik voor GoT ook een JS serializer; dit is de code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function serialize(data)
{
    return typeof data.toPHP == 'function' ? data.toPHP() : '';
}

Number.prototype.toPHP=function()
{
    return (Math.floor(this) == this ? 'i' : 'd') + ':' + this + ';';
}

String.prototype.toPHP=function()
{
    var s = this.replace(/\r\n|\r|\n/g, '\r\n');
    return 's:' + s.length + ':"' + s + '";';
}

Boolean.prototype.toPHP=function()
{
    return 'b:' + (this==true ? 1 : 0) + ';';
}

Array.prototype.toPHP=function()
{
    var o = this, s = '', count = 0, item;
    for (item in o)
    {
        if (typeof o[item] == 'function' || typeof o[item] == 'undefined') continue;
        count++;
        if (isNaN(item)) s += 's:' + item.length + ':"' + item + '";';
        else s += 'i:' + item + ';';
        if (o[item] === null) s +='N;';
        else s += o[item].toPHP();
    }
    return 'a:' + count + ':{' + s + '}';
}

Object.prototype.toPHP=function()
{
    var o = this, s = '', count = 0, item;
    for (item in o)
    {
        if (typeof o[item] == 'function' || typeof o[item] == 'undefined') continue;
        count++;
        if (isNaN(item)) s += 's:' + item.length + ':"' + item + '";';
        else s += 'i:' + item + ';';
        if (o[item] === null) s +='N;';
        else s += o[item].toPHP();
    }
    return 'o:' + count + ':{' + s + '}';
}

Intentionally left blank


Verwijderd

Topicstarter
Ja dat ziet er goed uit maar in mijn situatie moet het net andersom. Dus vanuit een javascript object als string representatie naar een php object.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

Verwijderd schreef op 04 oktober 2004 @ 14:52:
Ja dat ziet er goed uit maar in mijn situatie moet het net andersom. Dus vanuit een javascript object als string representatie naar een php object.
Ja, dat doet die code ook:

JavaScript:
1
2
3
4
5
6
7
8
var pietje = new Array();
pietje['naam'] = 'Pietje';
pietje['leeftijd'] = 18;
pietje['geslacht'] = 'Man';

var pietje_serialized = serialize(pietje);

alert(pietje_serialized);


output:
code:
1
a:3:{s:4:"naam";s:6:"Pietje";s:8:"leeftijd";i:18;s:8:"geslacht";s:3:"Man";}


in een form-veld proppen en doorgeven aan PHP, dan in PHP:
PHP:
1
$pietje = unserialize($_POST['veld']);

[ Voor 20% gewijzigd door crisp op 04-10-2004 15:00 ]

Intentionally left blank


Verwijderd

Topicstarter
@Crisp - Jij poste te vroeg of ik te laat :P , maar ik ben nu je JS serializer aan het proberen :9~


Helaas ik krijg in mozilla de volgende foutmelding :
Error: too much recursion
Source File: http://localhost/Html/JavaScript/JS2PHPSerializer.js
Line: 47

[ Voor 45% gewijzigd door Verwijderd op 04-10-2004 15:01 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

djeez; hoe groot is je object dan wel niet?

Je zou kunnen kijken of je 'm iteratief kan maken...

[ Voor 40% gewijzigd door crisp op 04-10-2004 15:02 ]

Intentionally left blank


Verwijderd

Topicstarter
Gaat de serializer misschien over zijn nek wanneer je een een array hebt gehashed?? In dit array staan weer weer objecten.

In prinicipe heb je de volgende boom:
Grid->bestemming(max 5)->posities(max 20*20)->positie(x,y)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

Is dat zoiets?
JavaScript:
1
2
3
4
5
6
7
8
var Grid = [];
Grid['destination1'] = [
    {x:1,y:1},
    {x:2,y:1},
    {x:3,y:1},
    {x:4,y:1},
    {x:5,y:1}
];

Intentionally left blank


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 07:31

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 ziet onderhand wel heel erg veel Javascript en Crisp naar voren komen.. :P
* gorgi_19 pakt een tennisracket en slaat een ace richting Webdesign & Graphics

>> Webdesign & Graphics

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
crisp schreef op 04 oktober 2004 @ 15:18:
Is dat zoiets?
JavaScript:
1
2
3
4
5
6
7
8
var Grid = [];
Grid['destination1'] = [
    {x:1,y:1},
    {x:2,y:1},
    {x:3,y:1},
    {x:4,y:1},
    {x:5,y:1}
];
code:
1
2
3
4
5
6
7
8
9
var Grid = [];
Grid['destination1'] = new object()
Grid['destination1'].aPosition =  [
    {x:1,y:1},
    {x:2,y:1},
    {x:3,y:1},
    {x:4,y:1},
    {x:5,y:1}
];

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

In firefox gaat het bij mij prima met 5 destinations en 400 position-objecten per destination..

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 04 oktober 2004 @ 14:50:
excuus; verkeerde copy-pasta; zo zou het eruit moeten zien:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$arr = array(
        'naam' => 'oets',
        'leeftijd' => 18,
        'geslacht' => 'man',
        'vriendinnetjes' => array(
                array('naam' => 'grietsen'),
                array('naam' => 'marietje'),
                array('naam' => 'grietje')
            )
    );

echo serialize($arr);

code:
1
a:4:{s:4:"naam";s:4:"oets";s:8:"leeftijd";i:18;s:8:"geslacht";s:3:"man";s:14:"vriendinnetjes";a:3:{i:0;a:1:{s:4:"naam";s:8:"grietsen";}i:1;a:1:{s:4:"naam";s:8:"marietje";}i:2;a:1:{s:4:"naam";s:7:"grietje";}}}
code:
1
a:4:{s:4:"naam";s:4:"oets";s:8:"leeftijd";i:18;s:8:"geslacht";s:3:"man";s:14:"vriendinnetjes";a:3:{i:0;a:1:{s:4:"naam";s:8:"grietsen";}i:1;a:1:{s:4:"naam";s:8:"marietje";}i:2;a:1:{s:4:"naam";s:7:"grietje";}}}

Wanneer ik de deze regel wil serializen krijg ik deze foutmelding:

Notice: C:\Apache2\htdocs\Html\GridResultaat.php line 25 - unserialize(): Error at offset 0 of 208 bytes

Wat kan hier dan fout gaan?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

:?
PHP:
1
2
3
4
5
6
7
$string = 'a:4:{s:4:"naam";s:4:"oets";s:8:"leeftijd";i:18;s:8:"geslacht";s:3:"man";s:14:"vriendinnetjes";a:3:{i:0;a:1:{s:4:"naam";s:8:"grietsen";}i:1;a:1:{s:4:"naam";s:8:"marietje";}i:2;a:1:{s:4:"naam";s:7:"grietje";}}}';

$arr = unserialize($string);

echo '<pre>';
print_r($arr);
echo '</pre>';


works fine here

Intentionally left blank


Verwijderd

Hulde aan Crisp!! Dit is precies wat ik nodig heb!!
Verwijderd schreef op maandag 04 oktober 2004 @ 16:59:
[...]


code:
1
a:4:{s:4:"naam";s:4:"oets";s:8:"leeftijd";i:18;s:8:"geslacht";s:3:"man";s:14:"vriendinnetjes";a:3:{i:0;a:1:{s:4:"naam";s:8:"grietsen";}i:1;a:1:{s:4:"naam";s:8:"marietje";}i:2;a:1:{s:4:"naam";s:7:"grietje";}}}

Wanneer ik de deze regel wil serializen krijg ik deze foutmelding:

Notice: C:\Apache2\htdocs\Html\GridResultaat.php line 25 - unserialize(): Error at offset 0 of 208 bytes

Wat kan hier dan fout gaan?
Even ter aanvulling, dit probleem had ik ook en komt door de magic quotes optie in php. Ik heb dat zo opgelost.
PHP:
1
2
3
if (get_magic_quotes_gpc()) {
  $phpArray = unserialize(stripslashes($_POST['frmJsArray']));
}

[ Voor 29% gewijzigd door Verwijderd op 04-05-2005 15:59 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:11

crisp

Devver

Pixelated

Magic quotes is ook altijd het eerste wat ik uit zet :P

Intentionally left blank

Pagina: 1