Passer une variable serialize
Bonjour à tous,
Voila j'expose mon problème.
j'ai deux fichier le premier est celui du js function serialize et unserialize.
Code:
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
function serialize (txt) {
switch(typeof(txt)){
case 'string':
return 's:'+txt.length+':"'+txt+'";';
case 'number':
if(txt>=0 && String(txt).indexOf('.') == -1 && txt < 65536) return 'i:'+txt+';';
return 'd:'+txt+';';
case 'boolean':
return 'b:'+( (txt)?'1':'0' )+';';
case 'object':
var i=0,k,ret='';
for(k in txt){
//alert(isNaN(k));
if(!isNaN(k)) k = Number(k);
ret += serialize(k)+serialize(txt[k]);
i++;
}
return 'a:'+i+':{'+ret+'}';
default:
return 'N;';
alert('var undefined: '+typeof(txt));return undefined;
}
}
function unserialize(txt){
var level=0,arrlen=new Array(),del=0,final=new Array(),key=new Array(),save=txt;
if (!txt) return final;
while(1){
switch(txt.substr(0,1)){
case 'N':
del = 2;
ret = null;
break;
case 'b':
del = txt.indexOf(';')+1;
ret = (txt.substring(2,del-1) == '1')?true:false;
break;
case 'i':
del = txt.indexOf(';')+1;
ret = Number(txt.substring(2,del-1));
break;
case 'd':
del = txt.indexOf(';')+1;
ret = Number(txt.substring(2,del-1));
break;
case 's':
del = txt.substr(2,txt.substr(2).indexOf(':'));
ret = txt.substr( 1+txt.indexOf('"'),del);
del = txt.indexOf('"')+ 1 + ret.length + 2;
break;
case 'a':
del = txt.indexOf(':{')+2;
ret = new Array();
arrlen[level+1] = Number(txt.substring(txt.indexOf(':')+1, del-2))*2;
break;
case 'O':
txt = txt.substr(2);
var tmp = txt.indexOf(':"')+2;
var nlen = Number(txt.substring(0, txt.indexOf(':')));
name = txt.substring(tmp, tmp+nlen );
//alert(name);
txt = txt.substring(tmp+nlen+2);
del = txt.indexOf(':{')+2;
ret = new Object();
arrlen[level+1] = Number(txt.substring(0, del-2))*2;
break;
case '}':
txt = txt.substr(1);
if(arrlen[level] != 0){alert('var missed : '+save); return undefined;};
//alert(arrlen[level]);
level--;
continue;
default:
if(level==0) return final;
alert('syntax invalid(1) : '+save+"\nat\n"+txt+"level is at "+level);
return undefined;
}
if(arrlen[level]%2 == 0){
if(typeof(ret) == 'object'){alert('array index object no accepted : '+save);return undefined;}
if(ret == undefined){alert('syntax invalid(2) : '+save);return undefined;}
key[level] = ret;
} else {
var ev = '';
for(var i=1;i<=level;i++){
if(typeof(key[i]) == 'number'){
ev += '['+key[i]+']';
}else{
ev += '["'+key[i]+'"]';
}
}
if(ret==null){ret='';} // ajout de loïc guglielmino, pour corriger problème valeur null
eval('final'+ev+'= ret;');
}
arrlen[level]--;//alert(arrlen[level]-1);
if(typeof(ret) == 'object') level++;
txt = txt.substr(del);
continue;
}
} |
ensuite j'ai un autre fichier js qui appel ma page en php pour récupérer mon resultat serializé
Code:
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| function afficher_fenetre_encherir(id_enchere, enchere_mini)
{
var model = getIdStd('enc_fenetre_encherir_contenu_model').innerHTML;
model = model.replace(/#ID_ENCHERE#/g, id_enchere);
model = model.replace(/#ENCHERE_MINI#/g, enchere_mini);
model = model.replace(/#MODEL#/g, "");
getIdStd('enc_fenetre_encherir_contenu').innerHTML = model;
getIdStd('enc_fenetre_encherir').style.display = 'block';
afficherFondPopupStd('enc_fond_popup',0);
centrerPopupStd('enc_fenetre_encherir');
}
function cacher_fenetre_encherir()
{
getIdStd('enc_fenetre_encherir_contenu').innerHTML = '';
getIdStd('enc_fenetre_encherir').style.display = 'none';
getIdStd('enc_fond_popup').style.display = 'none';
}
/**
* Affichage en savoir +
*/
function afficher_en_savoir_plus(elt)
{
getIdStd(elt).style.display = 'block';
afficherFondPopupStd('enc_fond_popup',0);
centrerPopupStd(elt);
}
function cacher_en_savoir_plus(elt)
{
getIdStd(elt).style.display = 'none';
getIdStd('enc_fond_popup').style.display = 'none';
}
/**
* Affichage du compte à rebours pour les enchères
*/
function compte_a_rebours_enc(elt, time_id)
{
var time = "" + eval(time_id); // transformation en string
if (time <= 0) {
time = "Enchère<br/>Terminée";
} else {
nb_heures = Math.floor(time/3600);
nb_minutes = Math.floor((time - nb_heures*3600) / 60);
nb_secondes = (time - nb_heures*3600) - (nb_minutes*60);
if(nb_heures < 1 && nb_minutes < 1) {
time = "Moins d'une<br/>minute";
} else {
if(nb_heures<10) nb_heures = "0"+nb_heures;
if(nb_minutes<10) nb_minutes = "0"+nb_minutes;
if(nb_secondes<10) nb_secondes = "0"+nb_secondes;
time = nb_heures+"h"+nb_minutes+"m"+nb_secondes+"s";
}
}
document.getElementById(elt).innerHTML=time;
window[time_id] = eval(time_id)-1; // on diminue le timestamp
}
/**
* Un joueur fait une demande pour enchérir
*/
function encherir_enc(id_enchere, enchere_mini)
{
var montant = document.enc_form_encherir.enchere_joueur.value;
if( retour = file('boutique/boutique_encheres_actions.php?action=encherir&id='+id_enchere+'&montant='+montant+'&mini='+enchere_mini) )
{
var arr = unserialize(retour);
if(arr[0]==0)
{
getIdStd('enc_fenetre_encherir_contenu').innerHTML = arr[1];
}
else
{
getIdStd('enc_message_retour').innerHTML = arr[1];
}
}
} |
j'aimerais savoir comment je fait pour que mon resultat s'affiche
exemple de ligne de serialisation :
a:2:{i:0;i:96;i:1;s:31:"Vous n'avez pas assez de Points";}
j'aimerais afficher sur ma page enchere Vous n'avez pas assez de Points.
Merci pour votre aide et contribution