Récupérer une variable multiple...

Eléphanteau du PHP | 29 Messages

18 févr. 2015, 12:13

Bonjour,

Je cherche un moyen d'attribuer différentes valeurs à une même variable au seins d'une même page. Cette variable me servirait à attribuer un ID unique pour chacun des boutons de ma page.
Exemple bouton01 à pour id = 123 ; bouton02 à pour id = 456 ; etc.
Si je ne veux utiliser qu'un seul nom de variable ($id) c'est afin d'éviter d'avoir un code trop lourds côté page de destination avec par exemple $id01, $id02, $id03, etc.

Au départ, je voulais faire simple :
<a href="galery.php?idp=1234">BOUTON01</a>
<a href="galery.php?idp=5678">BOUTON02</a>
Puis je récupérais la variable de départ dans ma page de déstination avec $_GET (je pourrais aussi me servir des sessions)

Ça ne peut évidement pas fonctionner car côté page de destination, je ne peux récupérer que la variable $id la plus récemment stockée, donc toujours la même et
quelque soit le bouton sur lequel j'ai cliqué !

Je pourrais donc utiliser plusieurs nom de variable $id01, $id02, $id03, etc. mais ça alourdirait considérablement mon code, surtout côté page de destination ou je traite
mes variables pour n'en récupérer que des chaînes avec substr. Bref, j'ai beau retourner le problème dans tous les sens, je ne sais pas comment m'y prendre pour écrire un code qui soit le plus limpide et le plus léger possible.

Mais je me dis qu'il existe sans doute une façon de faire, une méthode...

Quelqu'un pourrait-il me mettre sur la voie ?

Merci par avance.

ynx
Mammouth du PHP | 586 Messages

18 févr. 2015, 15:44

Salut,

Je ne comprend pas ta phrase suivante :
Ça ne peut évidement pas fonctionner car côté page de destination, je ne peux récupérer que la variable $id la plus récemment stockée, donc toujours la même et
quelque soit le bouton sur lequel j'ai cliqué !
A partir de l'exemple :
<a href="galery.php?idp=1234">BOUTON01</a>
<a href="galery.php?idp=5678">BOUTON02</a>
-> si je clique sur BOUTON01, la variable $_GET['idp'] aura pour valeur 1234
-> si je clique sur BOUTON02, la variable $_GET['idp'] aura pour valeur 5678

Donc coté page de destination (galery.php), tu peux donc récupérer n'importe quel identifiant via la variable $_GET['idp'] en fonction du bouton cliqué.

Bonne journée

ViPHP
xTG
ViPHP | 7331 Messages

18 févr. 2015, 15:50

Pareil j'ai pas compris...
Côté page de destination tu récuperas l'id qui a été cliqué, n'est-ce pas le but ?

Mammouth du PHP | 2278 Messages

18 févr. 2015, 22:11

Il ne serait pas plus simple et plus évolutif d'avoir un tableau des ID en mettant ses checkbox?
<?PHP
$ids = array();
$nbgals= 5;
for ($i =1; $i <=$nbgals;$i++)
{
	$val = rand(1000,3000);
while (in_array ($val, $ids))
{
	$val = rand(1000,3000);
}
$ids[$i] = $val;
}
$chaine = "
<form method= 'post' action ='dieu.php'>";
for ($i =1; $i <=$nbgals;$i++)
{
	$id = $ids[$i];
	$chaine .= "
	<input type = 'checkbox' name = '$id' value = '$id' />
	";
}
$chaine .= "<button type = 'submit' > Afficher</button></form>";
print "$chaine";
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 29 Messages

19 févr. 2015, 18:22

Ola,

Mea culpa, je n'étais pas clair dans mes explications et je me suis même un peu embrouillé :?
Explication de la phrase incomprise : Je voulais parler des sessions et non de GET. Si quelqu'un a une solution pour que cela fonctionne avec les sessions, je prends !

Quelques infos concernant la structure de ma page :

Page source : Elle contient plusieurs liens possédant chacun un id (je le nomme idp) qui doit être récupérer dans la page de destination, page unique pour tous les liens. L'idp en question est un n° unique qui provient de meta IPTC récupérées dans des photos.
Donc, valeur numérique différente pour chaque idp. Avec une session ( $_SESSION['idp'] ), la valeur idp récupérée dans la page de destination correspond à la dernière valeur enregistrée en fin de page source. Je ne sais pas si je suis très clair.

Mammouth du PHP | 688 Messages

19 févr. 2015, 18:29

if(isset($_SESSION['idp'])){
$_SESSION['idp'][] = $_GET['tonid'];
}
else{
$_SESSION['idp'] = array();
$_SESSION['idp'][] = $_GET['tonid'];
}

Eléphanteau du PHP | 29 Messages

19 févr. 2015, 18:42

Merci pour ta réponse, mais je ne comprends pas le code. À quoi sert GET ici ? Je ne souhaite pas passer idp dans l'url...

Eléphanteau du PHP | 29 Messages

19 févr. 2015, 18:56

Complément d'info à mon problème avec du code :

Voici comment je récupère l'idp de mes photos :
GetImageSize(ROOT_IMG . "aaa/bbb/img01.jpg", $info);
$iptc = iptcparse($info["APP13"]);
$idp = $iptc['2#005'][0];
Je dois malheureusement répéter ce code pour chaque image - Je ne sais pas encore programmer une fonction php -
Pour éviter tout conflit entre les variables doublons ($info, $iptc, $idp, etc.), je leur ai toute ajouté un suffixe différent ($info_img01, $info_img02, etc.)... je sais, ça fait un code super lourd, mais c'est en attendant de trouver une solution plus light.

Chaque idp est lié à un bouton et ce bouton doit la transmettre non pas avec GET mais avec une session.

Voilà et merci d'avance ! :)

Mammouth du PHP | 2278 Messages

19 févr. 2015, 21:08

VOILA PEUT ETRE UN DÉBUT
<?php
$liste = array();
$dir = "/home/bilou/livres/";
$rang = 1;
$info = array();
// Ouvre un dossier bien connu, et liste tous les fichiers
if (is_dir($dir)) 
	{
    	if ($dh = opendir($dir)) {
        	while (($file = readdir($dh)) !== false) 
			{
           	 	$extension = pathinfo($file,  PATHINFO_EXTENSION);
				
					switch ($extension)
                                        {
					case "jpg":
					case "png":
						//getimagesize est en minuscules

						getimagesize($dir.$file,  $info);
						if (isset($info["APP13"])) 
						{
    						$iptc = iptcparse($info["APP13"]);

							//j'ai trouvé chez moi des images JPG sans index '2#005'
							$idp = $iptc['2#005'][0] ;
							$Liste[$rang]['idp'] = $idp;
							$Liste[$rang]['nom'] = $file;
						}
						
						$rang++;
					break;
					default:

				}

       	 	}
        	closedir($dh);
    }
print_r($Liste);
}
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 29 Messages

20 févr. 2015, 01:43

Merci pour ce début. Je débute et j'essaie de bien comprendre ton code, mais déjà une chose m'échappe. $id indique un chemin spécifique, hors mes images sont disséminées dans différent répertoire. Comment faire pour résoudre ce problème ?

Merci.

Mammouth du PHP | 2278 Messages

20 févr. 2015, 09:53

Avant de t"aventurer, vérifie biel le comportement de getimagesize

Des répertoires imbriqués ou non?
Tu peux faire cette boucle pour chaque répertoire; il suffit de stocker l'info dans le tableau $Liste
$rang =1;
while repertoire1
{
}
while repertoire2
{
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 févr. 2015, 09:54

$id indique un chemin spécifique, or mes images sont disséminées dans différent répertoire. Comment faire pour résoudre ce problème ?
Regarde du côté de la fonction glob() qui permet de récupérer tous les fichiers vérifiant un certain masque (pour ne récupérer que les *.jpg) qui sont dans un répertoire et ses sous-répertoires :
http://php.net/glob
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 29 Messages

20 févr. 2015, 19:13

J'ai étudié un peu, lu et vu des tutos, et j'ai finalement trouvé une solution. J'ai ainsi créé ma première class php et ma première fonction.
Tout fonctionne au petit poil pour le moment :-) Merci pour votre aide qui m'est chaque fois d'un grand secours !

Voici le script de ma class :
class iptc 
    {
        function idp($file, $iptc) 
        { 
            GetImageSize($file, $info);
            $v = iptcparse($info["APP13"]);
            $idp = $v[$iptc][0];
            return $idp;
        }
    }
Les différentes meta iptc qui m'intéressent structurées en tableau :
   $idp=array();
    $idp[id] = $iptc = '2#005';
    $idp[nom] = $iptc = '2#105';
    $idp[description] = $iptc = '2#120';
    $idp[©] = $iptc = '2#116';
Enfin, j'appelle ma class chaque fois que j'en ai besoin comme ceci :
 $result = new iptc;   
 echo($result->idp("img001.jpg", $idp[id]));
Vos remarques et commentaires sont bienvenues ! :-)