Page 1 sur 2

Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 13:18
par ehjoe
Bonjour,

Comme on le voit dans mon code sous-cité, je récupère le path de l'appelant ("x.htm" ou "x.html"); ainsi :

Code : Tout sélectionner

<?php header("Pragma: no-cache"); $adr2=$_SERVER['HTTP_REFERER']; ?>
Le problème c'est que j'ai la totalité du path, exemple :
Or ici je ne voudrais uniquement le nom de la page appelante, soit en l'espèce :
appelant.htm
Alors, existe-t-il une variable d'environnement qui fasse ça, ou faut-il effectuer un traitement de chaîne et dans ce cas, comment ?

Merci.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 14:05
par laramy
Tu as la fonction parse_url() qui est très pratique.
http://www.php.net/manual/fr/function.parse-url.php

Sur le PHP_URL_PATH de ton exemple tu peux ensuite faire un simple explode sur les / pour gérer les catégories.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 16:03
par ehjoe
Bonjour,

Merci,

Puis-je avoir un exemple qui fonctionne en se basant sur mon code stp :
$adr=$_SERVER['HTTP_REFERER']; // adr totale
$page(parse_url($adr)) // ???
echo "document.write(\"<aref='jo2.htm'>".$page." "."</a>\");";
// affiche

*

Pendant que j'y suis, ceci ne fonctionne pas :
echo "<a href='jo2.htm'>.$count.</a>"; 
Peux-tu me corriger ?

Merci encore.
.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 17:31
par AB
basename() sera plus simple d'utilisation dans ce cas :
$a = 'http://moi.free.fr/dossier/appelant.htm';

echo basename($a);

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 17:40
par ehjoe
Bonjour,

Merci mais je ne comprends pas, tu écris :
$a = 'http://moi.free.fr/dossier/appelant.htm';
echo basename($a);
Mais c'est
appelant.htm
Que je veux récupérer ???

Merci.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 17:53
par AB
Et bien justement si tu teste ce code n'obtiens tu pas "appelant.htm" ?

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 18:03
par ehjoe
Suite,

Mais oui, autant pour moi, chat marche ! Merci =D>
<?php
header("Pragma: no-cache");
$adr=$_SERVER['HTTP_REFERER'];
echo "document.write(\"<aref='jo2.htm'>".$adr." "."</a>\");";
echo "document.write(\"<aref='jo2.htm'>".basename($adr)." "."</a>\");";
Il me reste un problème d'affichage, sais-tu le résoudre, j'ai fait le code qui suit mais il ne fonctionne pas :
echo "<a href='jo2.htm'>.$count.</a>\n"; 
Merci.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 18:16
par AB
Si ta variable $count est définie précédemment ceci devrait fonctionner :
echo "<a href='jo2.htm'>$count</a>\n"; 
ou
echo '<a href="jo2.htm">'.$count.'</a>'."\n";
si tu veux faire afficher un retour html
echo '<a href="jo2.htm">'.$count.'</a><br />';

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 18:29
par ehjoe
Suite...

Hélas, y en a pas un qui marche, sauf la ligne écrite en js

Voici le code, tout est en bas, j'ai masqué la ligne JS, puis démasqué tes lignes une à une sans provoquer d'affichage :
<?php
header("Pragma: no-cache");
$adr=$_SERVER['HTTP_REFERER'];
echo "document.write(\"<aref='jo2.htm'>".$adr." "."</a>\");";
echo "document.write(\"<aref='jo2.htm'>".basename($adr)." "."</a>\");";

if (file_exists("jo2_compte.txt")) 
{
$file=@fopen("jo2_compte.txt", "r+"); 
fscanf($file, "%d", $count);
$count++;
rewind($file);
} 
else 
{
$file=@fopen("jo2_compte.txt", "w");
$count=1;
}
fputs($file, $count);
fclose($file);
echo "document.write(\"<aref='jo2.htm'>".$count."</a>\");";

//echo "<a href='jo2.htm'>$count</a>\n"; // marche pas

//echo '<a href="jo2.htm">'.$count.'</a>'."\n";

//echo '<a href="jo2.htm">'.$count.'</a><br />';

?>
Merci.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 18:41
par AB
Si ça marche ! testes !
$count = 10;
echo "<a href='jo2.htm'>$count</a>\n";
mais si tu veux un retour ligne dans le code html il faut faire
$count = 10;
echo "<a href='jo2.htm'>$count</a><br />";
ou mieux
$count = 10;
echo '<a href="jo2.htm">'.$count.'</a><br />';
Prends l'habitude de tester tes différents bouts de codes séparéments comme ça tu comprendras mieux l'origine des problèmes.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 19:11
par ehjoe
Wouaf...
je n'y arrive pas, même en ayant mis en global la variable count, y a que le code js qui affiche, l'autre n'affiche pas, mais le reste fonctionne évidemment :

Ci-joint en zip dans un dossier les deux fichiers (le troisième txt se crée tout seul dans son répertoire).

Tu verras ainsi, en bas dans le code php, que le JS indiquer bien la valeur compteur, mais quand je masque le js pour démasquer le tien, plus rien ne s'affiche dans la page html, ça vient peut être d'autre chose, mais je suis un hyper-débutant dépassé !

Merci.
htm_php.zip

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 19:18
par AB
Prends l'habitude de tester tes différents bouts de codes séparéments comme ça tu comprendras mieux l'origine des problèmes.

Re: Comment récupérer le nom de la page appelante ?

Posté : 11 sept. 2011, 19:31
par ehjoe
Mais oui, mais comment veux-tu que j'identifie l'origine, je suis comme indiqué débutant, peut être que ta ligne va fonctionner toute seule, je te fais confiance évidemment tu à l'habitude, mais ensuite, comment vais-je pouvoir identifier la cause si elle est autres, certes en isolant peu à peu tous les éléments, ligne par ligne, et ensuite, si toutefois ça marche, je ne serais pas en mesure de voire où est l'erreur.

C'est peut être là où un forum est utile, le fait d'avoir l'expérience des autres, si tu ragardes le fichier php, tu vas en quelque minutes, si ce n'est seconde identifier les éléments qui peuvent causer problème, tandis que moi je vais y mettre des heures et des heures, si j'y arrive.

Merci de bien vouloir regarder.

Au plaisir, cordialement.

Re: Comment récupérer le nom de la page appelante ?

Posté : 12 sept. 2011, 12:17
par macgawel
Bonjour.
Mais oui, mais comment veux-tu que j'identifie l'origine
En reflechissant ? :twisted:
C'est peut être là où un forum est utile, le fait d'avoir l'expérience des autres, si tu ragardes le fichier php, tu vas en quelque minutes, si ce n'est seconde identifier les éléments qui peuvent causer problème, tandis que moi je vais y mettre des heures et des heures, si j'y arrive.
Pas d'accord...
L'intérêt d'un forum c'est de t'apprendre à programmer. Si c'est pour faire ton travail, on appelle ça des développeurs et ça se paye :evil:

Sinon, ton problème est mal posé. En particulier, tu ne décris pas le fonctionnement complet...
En fait tu as une page jo2.htm qui fait appel à un script JS externe appelé jo2_compteur.php.
Il faudrait que tu étudies le fonctionnement :
1. Le client demande la page jo2.htm.
2. Le serveur lui envoie.
2.a. Le serveur constate qu'il faut envoyer aussi le JS situé sur la page jo2_compteur.php.
3. Comme c'est un fichier PHP il est d'abord interprété, puis envoyé.
echo "<a href='jo2.htm'>$count</a>\n";
sera interprété comme

Code : Tout sélectionner

<a href='jo2.htm'>10</a>
, ce qui n'est pas du JS.
=> Le JS n'est pas interprété, et encore moins exécuté.
Alors que
echo "document.write(\"<a href='jo2.htm'>".$count."</a>\");";
sera interprété comme

Code : Tout sélectionner

document.write("<a href='jo2.htm'>10</a>
, ce qui est bien du JS...

Deux solutions :
1. Tu gardes le principe du code JS.
Le fichier jo2_compteur.php doit renvoyer du JS,
echo "document.write(\"<a href='jo2.htm'>".$count."</a>\");";
fonctionne.

2. Tu allèges - parce que je ne vois pas l'intérêt du JS ici (sauf si tu veux recharger régulièrement le compteur sans rafraichir la page).
=> Tu fais ton include("jo2_compteur.php"); et le fichier jo2_compteur.php doit renvoyer du html.
echo "<a href='jo2.htm'>$count</a><br />";
fonctionne.

Par contre, dans ce cas il te reste un problème : le serveur considère par défaut qu'un fichier .htm est un fichier HTML.
Du coup il ne le passe pas à l'interpréteur PHP, et le include() n'est pas lu.
Solutions - au choix : paramètrer le serveur pour qu'il interpète les fichiers HTML comme du PHP ou renommer jo2.htm en jo2.php (pour qu'il soit interprété comme du PHP)

Re: Comment récupérer le nom de la page appelante ?

Posté : 12 sept. 2011, 13:47
par ehjoe
Bonjour,

Merci de ces précisions.

Je vais rester en html qui à l'aide du js calcule avec du php, puis le php renvoie en js les résultats au html.

Ceci, car si je passe en php total, le temps que je l'apprenne pour pouvoir faire un page qui en plus ne sera pas facilement portable (serveur <> d'apache), ben le temps n'en vaudra pas la chandelle. Il n'y a que le html qui passe partout, alors je fais le maximum avec lui.

Je n'ai pas de besoin ni de raison de programmer en php ou asp d'ailleurs, si ce n'est maintenant où je veux faire un compteur un peu plus consistant que ceux qui existent en scripts libres, c'est tout, alors je pense que tu seras de mon avis, je ne vais pas me lancer à fond dans le php juste pour faire un compteur élaboré...

Ce que je veux faire en un peu plus détaillé, est que le php (feuille de calculs en fait), crée dans le répertoire en cours les fichiers txt automatiquement selon le nom de l'appelant en html (deux fichiers txt : compteur et ip), bon ça j'ai réussi.
Ce qui est plus simple, il n'y a plus qu'à insérer le script js dans le html et de déposer avec ce dernier le fichier php.

Maintenant je dois gérer les dates (je ne sais pas, j'ai posé la question), et si la date du jour est différente de la date du fichier des ip, je recrée le fichier des ip par écrasement, sinon j'ajoute l'ip si inexistante et j'incrémente le compteur, et dans le cas contraire, si l'ip existe, je sors sans rien faire. Donc il me reste aussi à apprendre à lire en séquence un fichier et à comparer, tu vois, ensuite j'aurais fini. Je ne vais quand même pas apprendre tout le php pour faire ça, faut être honnête. Je n'ai rien pour ou contre le php, je suis chez Free et Free avale du php, je fais donc en php...

Toutefois, c'est quand même une grande cacophonie la programmation Internet, y a le html qui ne fait en gros que de l'affichage, en encore, pour l'améliorer il faut prendre un second langage, du css, et quand on veut faire de la programmation de fichier, il faut un troisième langage, du js pour appeler un quatrième langage, mais attention, pas n'importe quoi, c'est le serveur qui décide, généralement du php ou de l'asp (le java je ne sais pas, peut être), et ce n'est pas terminé, ce serait encore trop simple, ensuite ou ne peut pas créer le type de fichier que l'on veut, pour gérer les données il faut généralement appeler un sixième quasi-langage-paramétrage qui est le sql, ou alors faire du fichier texte non protégé (je préfère, j'adore la vraie programmation), mais bon, faut avouer que c'est un gros cirque le Net !

Alors évidemment je peux faire un site en php, seulement il ne sera pas portable partout a contrario du html (y a je crois des combines pour émuler de l'asp sous apache et du php sous iis, mais bon)... Et en plus un site php, va falloir modifier les centaines de référencement déjà effectués en html, alors tu comprendras que je demeure en html.

Sur le Net en fait, on se croirait avant les années 80 avec le cpm, la compatibilité PC ou pas, ensuite ça a été normé et maintenant c'est presque clair, il y a quelques langage majoritaires (c, c#, java, vbNet) qui font tous des exe qui sont tous exécutés par les OS existant en règle générale. Faudrait que le Net s'aligne sur ce principe, que tous les langages soient capables de permettre une programmation que tous les serveurs acceptent, tant que ça ne se fera pas ce sera un vrai cirque...

Au plaisir.