Page 1 sur 2
Les champs caches
Posté : 19 oct. 2009, 03:13
par Fredy07
Bonjour,
Je recupere les informations d'une requete, et je souhaite recuperer le champs counter en hidden, afin de le transmettre a une autre page pour incrementer le compteur, le code est le suivant:
extract ($row_rec);
echo '<a href="listen.php?type=mp3"><img src="'.$icons.'.gif" /></a>';
echo '<input type="hidden" name="counter" value="'.$counter.'" /></a>';
Malheureusement, il ne transmet pas la valeur du champs.
PS:
+ Je peux pas utiliser les sessions, parce que je recupere des multi resultats, la session transmet la valeur du dernier resultat.
+ J'eviter de transmetter cette valeur par un lien.
Merci pour votre aide
Re: Les champs caches
Posté : 19 oct. 2009, 08:29
par @rthur
Bonjour,
Voici quelques éléments de réponses:
- Un champ input ne peut être transmis que par l'intermédiaire d'un <form> (à moins de s'embêter avec du javascript)
echo '<input type="hidden" name="counter" value="'.$counter.'" /></a>';
- Tu as une balise fermante </a> qui est en trop
+ Je peux pas utiliser les sessions, parce que je recupere des multi resultats, la session transmet la valeur du dernier resultat.
- Il suffit que tu donnes un autre nom à ta session et tu pourras passer autant de variables que tu veux

Re: Les champs caches
Posté : 19 oct. 2009, 10:08
par Fredy07
- Il suffit que tu donnes un autre nom à ta session et tu pourras passer autant de variables que tu veux

J'ai essaye avec:
$_SESSION['counter'] = $counter;
Mais il recupere la derniere donnee, tant que la facon d'afficher est la suivante:
Code : Tout sélectionner
Chanson1 nombre de hits1
Chanson2 nombre de hits2
Chanson3 nombre de hits3
Chanson4 nombre de hits4
Chanson5 nombre de hits5
Chanson6 nombre de hits6
Et quand je clique sur ChansonX je dois recuperer le nombre de hits pour cette chanson et les passer vers une autre page pour incrementer le compteur par 1 et ecouter la chanson.
Re: Les champs caches
Posté : 19 oct. 2009, 10:31
par fab
$counter est censé être un array() si je comprend bien? Dans ce cas avant de la stocker en session utilise la fonction
serialize() et quand tu l'as récupéré pour restitué ça sous la forme d'un array
unserialize()
Re: Les champs caches
Posté : 19 oct. 2009, 12:44
par Fredy07
$counter est censé être un array() si je comprend bien? Dans ce cas avant de la stocker en session utilise la fonction
serialize() et quand tu l'as récupéré pour restitué ça sous la forme d'un array
unserialize()
Oui c'est une array, j'ai mis le code suivant:
page1.php
extract ($row_rec);
$show_counter = serialize ($row_rec['counter']);
$_SESSION['show_counter'] = $show_counter; // on stock le nom de listen
et page2.php
$show_counter = $_SESSION['show_counter]; // on stock le nom de listen
$final = unserialize ($show_counter);
echo $final;
ca ne me retourne pas la meme valeur.
Re: Les champs caches
Posté : 19 oct. 2009, 12:51
par fab
un echo d'un array ??? Y a rien qui te choques? Ca t'affiche quoi?
Re: Les champs caches
Posté : 20 oct. 2009, 01:41
par Fredy07
Je pense que c'est un peu complique ce truc la

Re: Les champs caches
Posté : 20 oct. 2009, 01:56
par fab
Re: Les champs caches
Posté : 20 oct. 2009, 05:21
par Fredy07
J'ai fait ca:
$counter = $row_rec['counter'];
// afficher la premiere occurence
echo $counter[0];
ca me retourne rien
Re: Les champs caches
Posté : 20 oct. 2009, 09:27
par FuZZyLine
Salut,
Model d'utilisation de la fonction serial/unserial liée aux sessions:
<?php
session_start();
if (isset($_SESSION["modal"]))
{
echo "Session encours...<br>";
// Flag de traitement
//
$bfWork = true;
$modal = $_SESSION["modal"];
// Si la variable est un tableau
//
if (is_array($modal))
{
// Marque le flag, traitement en cours
//
$bfWork = false;
// Note l'action présente
//
$modal["from"] = "Array";
// Incrémente le compteur, s'il n'existe pas le créé
//
$modal["counter"] = isset($modal["counter"]) ? $modal["counter"]+1 : 0;
// Conversion au Format chaine
//
$strModal = serialize($modal);
// Assignation du tableau à la variable session
//
$_SESSION["modal"] = $strModal;
// Affiche le tableau et la chaine
//
print_r($modal);
echo "<br>Chaine : > ".$strModal;
}
// Si la variable est une chaine
//
else if (is_string($modal))
{
// Marque le flag, traitement en cours
//
$bfWork = false;
// Conversion au Format tableau
//
$arrayModal = unserialize($modal);
// Incrémente le compteur, s'il n'existe pas le créé
//
$arrayModal["counter"] = isset($arrayModal["counter"]) ? $arrayModal["counter"]+1 : 0;
// Note l'action présente
//
$arrayModal["from"] = "String";
// Affiche le tableau résultant et la chaine recue
//
print_r($arrayModal);
echo "<br>Chaine : > ".$modal;
// Assignation de la chaine à la variable session
//
$_SESSION["modal"] = $arrayModal;
}
// Ni l'un ni l'autre
//
if ($bfWork) die("Ni array, ni string...!");
die("Réussite de la fonction...");
}
else
{
$_SESSION["modal"] = Array("Matin" => "Bonjour", "Soir" => "Bonsoir");
die("Session créé...");
}
?>
Biensur, ca reste un exemple mais ca marche, peut-être, peux-tu t'en inspirer pour ce que tu
veux faire. Ca ne répond pas à toutes les questions mais peut mettre sur la piste.
@+ bon code
PS: Y a quelques variables inutiles et peu de tests mais ca reste un model d'exemple

Re: Les champs caches
Posté : 22 oct. 2009, 01:50
par Fredy07
J'ai essaye comme ca et ca marche pas
if (is_string($counter))
{
$arraycounter = unserialize($counter);
//echo 'array'.$arraycounter.'<br>';
$arraycounter["counter"] = isset($arraycounter["counter"]) ? $arraycounter["counter"]+1 : 0;
//echo $arraycounter;
$show_counter= serialize($arraycounter);
echo $show_counter;
$_SESSION["counter"] = $arraycounter;
}
Re: Les champs caches
Posté : 22 oct. 2009, 01:59
par fab
Tu le sors d'ou le premier $counter?
Re: Les champs caches
Posté : 22 oct. 2009, 02:46
par Fredy07
Et si je fais ce code pour s'assurer que c'est un tableau, il n'affiche rien:
extract ($row_rec);
print_r($counter,TRUE);
et j'ai teste avec: is_string, comme resultat TRUE, donc ce n'est pas une array mais une string
Re: Les champs caches
Posté : 22 oct. 2009, 08:54
par FuZZyLine
Salut,
Et si je fais ce code pour s'assurer que c'est un tableau, il n'affiche rien:
extract ($row_rec);
print_r($counter,TRUE);
et j'ai teste avec: is_string, comme resultat TRUE, donc ce n'est pas une array mais une string
M'est d'avis que tu te goures de variable quand tu passes ton incrémentation.
1) M'es les Warning php actifs
2) Pose un test juste avant et juste après ton incrémentation => echo (ou print_r) Ton_Counter
<?php
if (is_array($arraycounter))
{
// Point de test
//
print_r($arraycounter);
// Est un tableau
//
if (isset($arraycounter["counter"]))
{
// Variable existe
//
$arraycounter["counter"] = is_numeric($arraycounter["counter"]) ? $arraycounter["counter"] : 0;
}
}
else
{
// N'est pas un tableau
//
$arraycounter = Array();
$arraycounter["counter"] = 0;
}
// Secondf point de test
//
print_r($arraycounter);
.
.
.
?>
Dans le "super-génial-exception..." script que j'ai fais as-tu essayé de remplacer mes variables par les tiennes?
@+
Re: Les champs caches
Posté : 23 oct. 2009, 02:18
par Fredy07
FuZZyLine: A vrai dire je ne copie / colle pas les code, j'essaie de les adapter et les comprendre, je vais le tester en mot a mot et reessayer a nouveau, mais ce que j'ai compris de ton code:
- On tests si c'est un tableau ou string,
- On le seialize,
- On incremente le compteur
- On le stock dans une session pour le passer de page a page,
- On le unserialize,
- On affiche le compteur incrementer.
Alors dans mon cas, quand j'ai fait var_dump, et j'ai teste avec is_string, j'ai recu TRUE, ca veut dire que c'est une string, ce que j'ai pense c'est que serialize et unserialize fonctionne juste avec les tableaux.
Merci