redirection et parametre url

Petit nouveau ! | 3 Messages

06 nov. 2005, 02:24

Mon soucis est le suivant :
dans une page A j'ai une liste de lien qui dirige vers un autre site. cette liste viens d'un flux RSS. Je voudrais que lorsqu'on clique sur ce lien avant d'aller vers la page C du lien l'internautre soit dirigé vers une page B intermédiaire qui elle enverrait automatiquement l'internaute vers la page C.

La raison est que je veux comptabilisé les personne qui clique sur ce lien via un script qui mes fournie par xiti.

Bref voila comment je m'y prends :

Dans le flus RSS traiter je met ceci comme code pour le lien :
<a href="http://www.fousdexbox.com/a_redirect_gt.php?url={EXINFO:FILETYPE2:LINK}" target="_blank">[{EXINFO:FILETYPE2:TYPE}] {FILESIZE2MB} MB</a>
{EXINFO:FILETYPE2:LINK}
renvoi l'adresse url une fois parsé dans le flux RSS

dans la page intermédiare je met :
<? include("includes/xiti_gt.php"); ?>
<?php 
$zz=$_GET['url']; 
echo $zz; 
header("Location: .$zz");

?>
Je met un echo pour vérifier ce qu'il me prends comme url dans la variable ZZ.

voila le soucis qui m'arrive :
1- la fonction echo me renvoi l'url mais tronqué. Cela donne cela :
http://www.gametrailers.com/player.php?r=1
alors que cela devrait me donner cela
http://www.gametrailers.com/player.php?r=1&id=8354&type=wmv
2- la redirection ne marche pas ce qui est bizarre car lorsque je met en manuel dans le navigateur ce que echo me renvoi je tombe sur une page alors que la le navigateur reste sur la page ou j'ai affiché le echo.

Petite précision d'importance l'url qui est passée en variable est bien correcte puisque voila ce que j'ai dans la barre de mon navigateur lorsque j'arrive sur la page intermédiaire :
http://www.fousdexbox.com/a_redirect_gt.php?url=http://www.gametrailers.com/player.php?r=1&id=8354&type=wmv

Eléphant du PHP | 80 Messages

06 nov. 2005, 02:46

Bah c'est ton & qui n'est pas pris en compte, je te dirais de vérifier ton GET ou tu as du oublier un détail ;)
XaV...
Webmaster des Larmes du Chaos

Eléphant du PHP | 63 Messages

06 nov. 2005, 02:52

Pour passer une URL dans une requête GET il faut tout d'abord encoder cette dernière avec urlencode (pour qu'elle ne soit pas confondue avec l'url absolue de ta page à toi).

Tu peux ensuite réutiliser l'url avec urldecode.

Dans ton exemple, le problème vient de la manière dont tu récupéres {EXINFO:FILETYPE2:LINK}. Il faudrait en effet faire:

Code : Tout sélectionner

<a href="http://www.fousdexbox.com/a_redirect_gt.php?url="<?php echo urlencode("{EXINFO:FILETYPE2:LINK}"); ?>" target="_blank">[{EXINFO:FILETYPE2:TYPE}] {FILESIZE2MB} MB</a>
Et la page de redirection deviendrait:
<?php
include("includes/xiti_gt.php");

header("Location: ".urldecode($_GET['url']));

?>

Petit nouveau ! | 3 Messages

06 nov. 2005, 13:36

Ca ne marche pas peut être estt-ce du à un code satellite je met donc le code complet de la page qui parsse le RSS et qui contient mon href :
<?php 
######################################
# GameTrailers.com RSS Parser v1.0            #
# GT RSS feed is  © 2005 Gametrailers.com  #
# created by [email protected]            #
#######################################

// USER SETTINGS

$feedlink = "http://www.gametrailers.com/rss/newestxb360.xml"; //What feed are we going to use?

// TEMPLATE - this code will be repeated for every item, so it's best to use a table, and just have each item take up a row. To insert an element simply input it with { and } around the element name. Element names described on http://www.gametrailers.com/rssexplained.com

$template = '
<tr>
	<td align="center"><img border=0 src="{EXINFO:IMAGE}" ></td>
	</tr>
	<tr>
	<td style="font-family:Verdana;font-size:10px"> <b>{TITLE}</b><br> - <a href="http://www.fousdexbox.com/a_redirect_gt.php?url={EXINFO:FILETYPE2:LINK}" target="_blank">[{EXINFO:FILETYPE2:TYPE}] {FILESIZE2MB} MB</a></td>
</tr>';

//*************************************

$feeddata = file_get_contents($feedlink); 


$Parser = xml_parser_create();
xml_set_element_handler($Parser, 'StartHandler', 'EndHandler');
xml_set_character_data_handler($Parser, 'CharacterHandler');

$ii = 0; //item counter

//pass the content string to the parser.
if ( !xml_parse($Parser, $feeddata) ) {
   $errors .= "| couldn't parse feed ";
   }

function StartHandler($Parser, $Elem, $attr) { //this function is called every time a tag is opened
	global $insideItem, $data, $this, $ii, $kk, $ll;
	if($Elem=="ITEM") {
		$ii++;
		$kk = ""; // reset movie type counter
		$ll = ""; // reset platform counter
		$this = ""; //reset item info
		$insideItem = ""; //reset item tracker
		$this[id] = $ii;
	} elseif($Elem=="EXINFO:FILETYPE") {
		$kk++;
		$insideItem = "";
		$insideItem[] = $Elem.$kk;
	} elseif($Elem=="EXINFO:PLATFORM") {
		$ll++;
		$insideItem[] = $Elem.$ll;
	} else {
		$insideItem[] = $Elem;
	}
	unset($this[datum]);
}

function CharacterHandler($Parser, $Line) { //this function is called for every line of text in between tags
	global $data, $insideItem, $this;
	
	$this[datum] .= $Line;
}

function EndHandler($Parser, $Elem) { //this function is called every time a tag is closed
	global $data, $insideItem, $this, $ii;
	if($Elem=="ITEM") {
		$data[$ii] = $this;
	} elseif($Elem=="EXINFO:FILETYPE") {
		$key = implode(":", $insideItem);
		$this[$key] = $this[datum];
		$insideItem = "";
	} else {
		$key = implode(":", $insideItem);
		$this[$key] = $this[datum];
		$pop = array_pop($insideItem);
	}
	$this[datum] = ""; //clear data
}

$ii = 0;
foreach($data as $mov) {


	$itemText = $template;
	$itemText = str_replace("{FILESIZE1MB}", round(10*$mov['EXINFO:FILETYPE1:FILESIZE']/(1024 * 1024)) / 10, $itemText);
	$itemText = str_replace("{FILESIZE2MB}", round(10*$mov['EXINFO:FILETYPE2:FILESIZE']/(1024 * 1024)) / 10, $itemText);
	foreach(array_keys($mov) as $key) {
		$itemText = str_replace('{'.$key.'}', $mov[$key], $itemText);
	}
	
        $ii++;

	if($ii < 7) { echo $itemText; }

}





Mammouth du PHP | 19672 Messages

06 nov. 2005, 13:41

Il y a peut-être bien un problème avec une de tes variables: $this est une variable réservée en programmation Orientée Objet. Or ce code est en procédural, l'interpréteur PHP doit tordre le nez avec ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

06 nov. 2005, 14:25

Si je change $this par un autre truc du genre $mavariable ça peut marcher ?

Mammouth du PHP | 19672 Messages

06 nov. 2005, 14:57

Possible, n'oublie pas d'en changer toutes les occurences, et reteste.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 63 Messages

06 nov. 2005, 19:25

PHP ne devrait pas renvoyer une erreur fatale si l'utilisation du $this est interdite ?

Ce qui semble être le cas -après test en local j'obtiens:

Code : Tout sélectionner

Fatal error: Cannot re-assign $this in d:\programmation\PHP\Serveur\www\test.php on line 3