Les champs caches

Eléphant du PHP | 214 Messages

19 oct. 2009, 03:13

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 oct. 2009, 08:29

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 :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 214 Messages

19 oct. 2009, 10:08

- 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.

ViPHP
fab
ViPHP | 2657 Messages

19 oct. 2009, 10:31

$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()
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 214 Messages

19 oct. 2009, 12:44

$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.

ViPHP
fab
ViPHP | 2657 Messages

19 oct. 2009, 12:51

un echo d'un array ??? Y a rien qui te choques? Ca t'affiche quoi?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 214 Messages

20 oct. 2009, 01:41

Je pense que c'est un peu complique ce truc la :x

ViPHP
fab
ViPHP | 2657 Messages

20 oct. 2009, 01:56

Pour quelque chose de clair va voir : http://www.phpdebutant.org/article11.php
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 214 Messages

20 oct. 2009, 05:21

Pour quelque chose de clair va voir : http://www.phpdebutant.org/article11.php
J'ai fait ca:
	$counter			= $row_rec['counter'];
// afficher la premiere occurence
	echo $counter[0];
ca me retourne rien

Eléphant du PHP | 369 Messages

20 oct. 2009, 09:27

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 ;)

Eléphant du PHP | 214 Messages

22 oct. 2009, 01:50

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;	
	}

ViPHP
fab
ViPHP | 2657 Messages

22 oct. 2009, 01:59

Tu le sors d'ou le premier $counter?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 214 Messages

22 oct. 2009, 02:46

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

Eléphant du PHP | 369 Messages

22 oct. 2009, 08:54

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?

@+

Eléphant du PHP | 214 Messages

23 oct. 2009, 02:18

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