Passer variables XML sur une autre page

Eléphanteau du PHP | 33 Messages

25 oct. 2012, 21:28

Bonjour

Je souhaite faire passer des valeurs ayant le meme nom de balise XML d'un fichier php vers un autre.
l'extrait du fichier xml :

Code : Tout sélectionner

<model>MODENA 450</model> <photo_list> <photo> 1-185.JPG </photo> </photo_list> <model>EDALON 556</model> <photo_list> <photo> 1-185.JPG </photo> <photo> 2-185.JPG </photo>
sur un premiere page j'ai le lien qui pointe vers la 2e page, censée passer en variable les multiple champs <photo> et <model>:

Code : Tout sélectionner

$xml = utf8_encode(file_get_contents('176.xml')); $rows = array(); $sxml = simplexml_load_string($xml); foreach($sxml as $node) { $model = htmlspecialchars((string)$node->model, ENT_QUOTES); $photo = (string)$node->photo_list->photo; $rows[] = <<<HTML <a href="http://MONSITE.fr/fancy/demo/test8.php?model={$model}&photo={$photo}">lien vers produit</a></br> {$model} HTML; }
et sur la seconde page je souhaite afficher ces photos :

Code : Tout sélectionner

$model = $_GET['model']; $photo = $_GET['photo']; echo $model; $i = 0; foreach ($photo_list as $photo) { $photo = strval($photo); $photo = trim($photo); if ($i == 0) echo '<img src="'.$photo.'" alt="" />'; echo '</a>'; $i ++; }
cela m'affiche seulement la première photo. Comment pourrais je faire pour passer en URL les différentes valeurs des champs <photo> ?
Si quelqu'un pourrait m'éclairer....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 oct. 2012, 22:32

salut,


pourquoi passer par l'url ?


utilise plutot les sessions pour cela.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

25 oct. 2012, 23:18

bonjour

oui ca parait plus simple mais je ne suis pas vraiment expert. J'ai donc remodif le code pour utiliser les sessions, nouveau problème deja a chaque fois que je fais page arrière sur mon browser pour réafficher le tableau de tout les produits (la 1ere page) et que je reclique sur un lien, la variable envoyée par la session est toujours la meme....
j'ai mis un session_start(); tout en haut de chaque page, que pourrais je faire de plus ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 oct. 2012, 23:26

la faut voir le code que tu utiiser pour cela, parce que sinon c'est un peu au p'tit bonheur la chance.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

26 oct. 2012, 01:19

voila donc le code, le soucis c'est qu'il me retourne en permanence les champs de la derniere balise XML...je vois pas du tout pourquoi :

la page 1 :
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();
$NbrCol = 5;
$xml = utf8_encode(file_get_contents('176.xml'));

$rows = array();
 
$sxml = simplexml_load_string($xml);
foreach($sxml as $node) {
$thumb  = (string)$node->photo_list->thumb;
$model  = htmlspecialchars((string)$node->model, ENT_QUOTES);



    $_SESSION['model'] = htmlspecialchars((string)$node->model, ENT_QUOTES);
    $_SESSION['photo'] = (string)$node->photo_list->photo; 
    
    
$rows[] = <<<HTML
    <a href="http://monsite.fr/fancy/demo/testf2.php"><img src="{$thumb}" alt="Aperçu" /></a></br>
    {$model}</br></br>
HTML;



}
// -------------------------------------------------------
// nombre de cellules a remplir
$NbreData = count($rows);
// -------------------------------------------------------
// affichage
$NbrLigne = 0;
if ($NbreData != 0) 
{
	$k = 0; // indice du tableau
?>
	<table frameBorder="0">
	<tbody>
<?php
	while ($k < $NbreData) 
	{
		if (($k+1)%$NbrCol == 1) {
			$NbrLigne++;
			$fintr = 0;
?>		<tr>
<?php		}
?>			<td>
<?php			// -------------------------
			// DONNEES A AFFICHER dans la cellule
			echo $rows[$k];
			//echo $rows[$id];
			
			


?>			</td>
<?php		if (($k+1)%$NbrCol == 0) {
			$fintr = 1;
?>		</tr>
<?php		}
		$k++;
	}
	// fermeture derniere balise /tr
	if ($fintr!=1) {
?>		</tr>
<?php } ?>
	</tbody>
	</table>
<?php
} else { ?>
	pas de données à afficher
<?php
}
?>

</body>
</html>

et la page 2 :
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

echo $_SESSION['photo'];
echo $_SESSION['model'];


 ?> 

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 oct. 2012, 08:10

echo $_SESSION['photo'];
echo $_SESSION['model'];

Ces deux variables doivent être des tableaux la ce n'est pas le cas donc le comportement est normal ;)
Donc au parse du fichier XML utilise

$_SESSION['photo'][];
$_SESSION['model'][];


@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 oct. 2012, 08:10

echo $_SESSION['photo'];
echo $_SESSION['model'];

Ces deux variables doivent être des tableaux la ce n'est pas le cas donc le comportement est normal ;)
Donc au parse du fichier XML utilise

$_SESSION['photo'][];
$_SESSION['model'][];


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

26 oct. 2012, 22:49

bonjour

je dois modifier la 1ere page aussi ? car la je me prends un :

Cannot use [] for reading in /homepages/34/d419102841/htdocs/fancy/demo/testf2.php on line 4

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 oct. 2012, 23:34

Surtout la première page, c'est lors du parse du xml que tu dois entrer les données dans mes variables de session :)


ensuite tu pourras les utiliser sur ta seconde page (avec un foreach par exemple).



@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

26 oct. 2012, 23:58

bin j'avais testé aussi de le mettre sur la 1ere page ca fait pareil en fait...
Tu n'aurais pas un exemple fonctionnel à me montrer ? j'ai essayé pas mal de truc mais rien a faire..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 oct. 2012, 10:53

tu as déja le code
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();
$NbrCol = 5;
$xml = utf8_encode(file_get_contents('176.xml'));

$rows = array();
 
$sxml = simplexml_load_string($xml);
foreach($sxml as $node) {
$thumb  = (string)$node->photo_list->thumb;
$model  = htmlspecialchars((string)$node->model, ENT_QUOTES);



    $_SESSION['model'][] = htmlspecialchars((string)$node->model, ENT_QUOTES);
    $_SESSION['photo'][] = (string)$node->photo_list->photo; 
    // etc
    }
la seconde pages foreach sur $_SESSION['model'] et tu utilise l'index pour prendre l'info sur le second tableau
<?php
foreach ($_SESSION['model'] as $index => $valeur) {
// la valeur correspondante pour la photo :  $_SESSION['photo'][$index]
}
?>

@+
Il en faut peu pour être heureux ......