Fonctions, variables globales et tentative scuicide

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonctions, variables globales et tentative scuicide

par Smartie'S » 04 mars 2009, 20:32

Bon, c'est réglé, il s'agissait certainement d'un problème de parsage de mes variables puisque lorsque mes variables $titre, $abstract, etc. contenaient directement des chaînes de caractères, elles étaient prises en compte.

Quoi qu'il en soit, je ne suis pas parvenu à resoudre ce problème, je l'ai donc contourné en créant un fichier contenant le contenu de ma variable $start en dur dans un fichier :

body.php
<?php echo $docType; ?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

	<head>
	<meta http-equiv="Content-Type" content="<?php echo $contentType; ?>; charset=utf-8" />
	<meta http-equiv="Content-Language" content="fr-be" />

	<meta name="robots" content="index, follow" />
	
	<meta name="description" content="<?php echo $abstract; ?>" />
	<meta name="keywords" content="<?php echo $keywords; ?>" />
	
	<title><?php echo $title; ?></title>
	
	<link rel="stylesheet" type="text/css" href="<?php echo $dir; ?>design/css/global.css" media="all" />
	
	<!--[if lte IE 6]><style type="text/css">div#content { margin: 4.55em 0 0 0; }</style><![endif]-->	
</head>
	
<body>
	<div id="header"><h1><span><?php echo $abstract; ?></span></h1></div>
	
	<div id="global">
		<ul id="left-column"><li><img src="<?php echo $dir; ?>images/picture.png" width="199px" height="266px" alt="Photo" title="Crédit photo : Héctor Serrano" /></li><li><a href="<?php echo $dir; ?>contact/" class="contact">Contact</a></li><li><a href="http://twitter.com/compte" class="twitter">Follow me on Twitter</a></li><li><a href="http://url.com" class="labo">Laboratoire</a></li></ul>

		<div id="right-column">
			<ul id="nav">
				<li><a href="<?php echo $dir; ?>"<?php echo $currentTab[0]; ?>>Accueil <span class="separator">: </span><span class="description">généralités</span></a></li>
				<li><a href="<?php echo $dir; ?>portfolio/"<?php echo $currentTab[1]; ?>>Réalisations <span class="separator">: </span><span class="description">quelques créations</span></a></li>
				<li><a href="<?php echo $dir; ?>publications/"<?php echo $currentTab[2]; ?>>Publications <span class="separator">: </span><span class="description">ressources</span></a></li>
			</ul>

			<div id="content">
<?php include($url); ?>

			</div>
		</div>
	</div>
</body>

</html>
que j'inclu dans mon fichier index.php
<?php

include('includes/function.php');

include('includes/vars.php');

// [..] mes conditions, tests sur les variables etc.

type_checker();
url_parser($page[$_GET['page']]);

include('pages/body.php');

?>

par @rthur » 03 mars 2009, 17:17

A quels niveaux me conseillerais-tu de placer les die ?
C'est pas compliqué tu mets un die("<hr />"); au tout début de ton script puis après tu le déplaces progressivement en rechargeant à chaque fois ta page pour afficher les variables qui doivent être présentes à l'endroit où tu t'es arrêté et ainsi suivre pas à pas l'exécution de ton script...

par Smartie'S » 03 mars 2009, 16:59

J'ai essayé notamment un débug maison avec des echo, sans résultat.
Réellement, j'y ai passé toute la matinée :/
Mets des points d'arrêt dans ton éditeur de code si celui ci de le permet ou à défaut des die()
A quels niveaux me conseillerais-tu de placer les die ?

par @rthur » 03 mars 2009, 16:53

Bonjour,

Mets des points d'arrêt dans ton éditeur de code si celui ci de le permet ou à défaut des die(); pour pouvoir suivre pas à pas l'exécution de ton script en regardant comment se propage tes variables...
Quand on ne comprends pas la provenance d'un problème, en général c'est la méthode la plus sûre pour déterminer là où ça coince ;)

par Smartie'S » 03 mars 2009, 16:47

Je vais essayer ta méthode.

J'avais déjà essayé de retourner tout ça dans un tableau, mais sans succès :/

Edit : non ca ne fonctionne pas :/

Au fait, quand j'avais tenté de retourner mes variables dans des tableaux, ça avait partiellement fonctionné. Ca fonctionnait avec ma fonction type_checker() mais pas avec url_parser($value) ..

Ce qui est vraiment très étrange c'est que ma variable $url fonctionne alors qu'elle est passée par la même fonction..

Quand je vous dit que je pète les plombs ..

par Aureusms » 03 mars 2009, 15:51

Visiblement tes variables ne passent pas en global et restent dans leurs fonctions respectives.

J'ai bien une idée mais bon : Si je reprends cette fonction
function url_parser($value)
{
    $headers = explode('#', $value);
    
    global $url, $abstract, $keywords, $title;
    
    $url      = $headers[0];
    $abstract = $headers[1];
    $keywords = $headers[2];
    $title    = $headers[3];
} 
Je retourne vers un tableau :
function url_parser($value)
{
    $headers = explode('#', $value);
    return ($headers);
} 
Puis au lieu de :
url_parser($page[$_GET['page']]); 
je liste le résultat :
list ($url ,$abstract,$keywords,$title) = url_parser($page[$_GET['page']]); 
Je pense que cela peut marcher dans ton cas. Au moins les variables ne seront pas globales ce qui nous enlèvera un doute.

Fonctions, variables globales et tentative scuicide

par Smartie'S » 03 mars 2009, 15:30

Bonjour,
Je pètes les plombs, je suis depuis ce matin sur un problème que je n'arrive pas à resoudre et vous verrez que ce n'est pas faute d'avoir essayé ..

Le problème : des variables qui refusent d'être prises en compte lors de l'affichage de ma page web.

Détails :
/index.php
/includes/function.php
/includes/vars.php
index.php
<?php

include('includes/function.php');

include('includes/vars.php');

// [..] mes conditions, tests sur les variables etc.

type_checker();
url_parser($page[$_GET['page']]);

echo $start;

include($url);

?>
function.php
<?php

function url_parser($value)
{
	$headers = explode('#', $value);
	
	global $url, $abstract, $keywords, $title;
	
	$url      = $headers[0];
	$abstract = $headers[1];
	$keywords = $headers[2];
	$title    = $headers[3];
}

function type_checker()
{
	global $contentType, $docType;
	
	if (stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml'))
	{
		$contentType = 'application/xhtml+xml';
		$docType = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';
	}
	else {
		$contentType = 'text/html';
		$docType = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
	}
}

?>
vars.php
<?php

$dir = '/test/'; // mon url quand en ligne, mon repertoire wamp qd hors ligne

// exemple de chaîne qui est passée dans ma fonction url_parser()
//
$value = 'pages/contact.php#Contactez-moi via le formulaire ou grâce aux autres méthodes proposées sur cette page.#mail, e-mail, contact, joindre, courriel, @, twitter#Contact | monsite.com'
//

$start = $docType . '

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

	<head>
	<meta http-equiv="Content-Type" content="' . $contentType . '; charset=utf-8" />
	<meta http-equiv="Content-Language" content="fr-be" />

	<meta name="robots" content="index, follow" />
	<meta name="verify-v1" content="+ymzc2kKtQy8SItoakg3HH/+mYzJGUoyvG+cf8mmNy4=" />
	
	<meta name="description" content="' . $abstract . '" />
	<meta name="keywords" content="' . $keywords . '" />
	
	<title>' . $title . '</title>
	
	<link rel="stylesheet" type="text/css" href="' . $dir . 'design/css/global.css" media="all" />
	
	<!--[if lte IE 6]><style type="text/css">div#content { margin: 4.55em 0 0 0; }</style><![endif]-->	
</head>
	
<body>
	<div id="header"><h1><span>' . $abstract . '</span></h1></div>
	
	<div id="global">
		<ul id="left-column"><li><img src="' . $dir . 'images/picture.png" width="199px" height="266px" alt="Photo" title="Crédit photo : Héctor Serrano" /></li><li><a href="' . $dir . 'contact/" class="contact">Contact</a></li><li><a href="http://twitter.com" class="twitter">Follow me on Twitter</a></li><li><a href="#" class="labo">Laboratoire</a></li></ul>
		
		<div id="right-column">
			<ul id="nav">
				<li><a href="' . $dir . '">Accueil <span class="separator">: </span><span class="description">généralités</span></a></li>
				<li><a href="' . $dir . 'portfolio/">Réalisations <span class="separator">: </span><span class="description">quelques créations</span></a></li>
				<li><a href="' . $dir . 'publications/">Publications <span class="separator">: </span><span class="description">ressources</span></a></li>
			</ul>
			
			<div id="content">';

?>
Auriez-vous une idée de solution ?

Un grand merci d'avance.