Comment afficher une page en fonction de conditions ?

Marine
Invité n'ayant pas de compte PHPfrance

23 juin 2016, 09:41

Bonjour :D ,

sous WordPress, j'ai une page dans laquelle je fais appel à une iframe pour afficher une autre page (présente sur un autre site).

Cette autre page (sur un autre site) diffère en fonction du nombre de jours écoulés.

Au premier jour je souhaite afficher la page1.php

A partir du jour 4 la page2.php

A partir du jour 7 la page3.php

J'ai essayé un code pour faire ça, mais il ne fonctionne pas (et une bonne partie de ce code s'affiche en clair sur la page comme un texte classique), il y a surement plusieurs soucis... :?

Pourriez-vous m'aider svp ?

Dans ma page sous WordPress, j'ai écrit :

<?php
 
// Création cookie
 
add_action( 'init', 'cookie_par_ou_commencer' );
 
function cookie_par_ou_commencer() {
 setcookie( $v_username, $v_value, 120 * DAYS_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
 
 
// Récupérer cookie
 
$page2=4*DAYS_IN_SECONDS;
$page3=7*DAYS_IN_SECONDS;
 
if(isset ($_COOKIE[$v_username]) && ($_COOKIE[$v_value]>$page2) && ($_COOKIE[$v_value]<=$page3)) {
$pagev='page2.php';
}
elseif (isset($_COOKIE[$v_username]) && ($_COOKIE[$v_value]>$page3)) {
$pagev='page3.php';
}
else {
$pagev='page1.php';
}
?>

<center><iframe src="<?php echo $pagev; ?>" name="page"
height="1500" marginheight="0" width=98%>Vous devez posséder un
navigateur capable de prendre en charge les frame pour visionner ce
contenu</iframe></center>

Merci d'avance pour votre aide ! :)

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

23 juin 2016, 10:06

salut,

si le code php s'affiche c'est que ce n'est pas dans un fichier php ?

as regardée si les cookie étaient placé sur le navigateur client ?
il y a des grandes chances que tu ais des erreurs avec ton code si les $_COOKIE[$v_value] n'existe pas.

ta fonction cookie_par_ou_commencer() ne devrait pas utiliser de variable globale (d'ailleurs est ce que ce code fonctionne ?).

est ce que tu affiches les erreurs ? (display_error = on et error_reporting = E_ALL).

en dehors de cela le code est syntaxiquement correct et la logique semble bonne.
il te manque l'url de base pour l'iframe, mais je suppose que c'est juste pour l'exemple sur le forum ?

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

Marine
Invité n'ayant pas de compte PHPfrance

23 juin 2016, 12:29

@moogli : tout d'abord, merci pour ta réponse :D

alors c'est sous wordpress que je met ça directement dans la partie pour créer une page, donc si j'ai bien compris, le contenu que j'écris dans la page est stocké dans la base de données, chaque page faisant appel aux mêmes fichiers php (a priori content-page.php et page.php).

apparemment non le cookie n'est pas stocké dans le navigateur (donc déjà ça ne va pas à ce niveau)
ta fonction cookie_par_ou_commencer() ne devrait pas utiliser de variable globale (d'ailleurs est ce que ce code fonctionne ?).
En fait j'ai pris ce code sur un site Internet (https://blogpascher.com/tutoriel-wordpr ... -supprimer) qui explique comment créer un cookie.
est ce que tu affiches les erreurs ? (display_error = on et error_reporting = E_ALL).
Hum, je crois que non pour sécuriser mon site, est-ce que je peux afficher les erreurs juste pour cette page pour tester et si oui comment ?
il te manque l'url de base pour l'iframe, mais je suppose que c'est juste pour l'exemple sur le forum ?
je ne sais pas si j'ai bien saisi ta question, l'url dans la iframe est celle de page1.php ou page2.php ou page3.php, le choix selon le nombre de jours écoulés étant stocké dans la variable $pagev.

Merci !

++

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

23 juin 2016, 15:00

pour les erreurs, soit c'est pour tout, sait c'est pas du tout :)

Par contre si tu développe sur ton pc tu peux le faire sans aucun problème en modifiant le php.ini (c'est pas une bonne idée de bosser sur un truc utilisé par d'autre de toute façon ;) ).

pour le cookie la fonction ne semble pas utilisée du coup cela semble normal qu'il ne soit pas placé.
Le plus simple de placer le cookie s'existe pas (exit la fonction, c'est utile si tu remplois le code je ne pense pas que cela soit le cas ?).
<?php
if(!isset($_COOKIE[$v_username]){
 setcookie( $v_username, $v_value, 120 * DAYS_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
je part du principe que les variables existe avant d'être utilisée ici.

pour l'iframe elle va tenter de charger /page(1|2|3].php or tu parles d'un autre site, il manque donc l'url de base du site (http:/lesite/pagexxx.php).

pour WP je ne connais pas, mais le principe reste bon.
L'utilisation de variables globales dans les fonctions c'est une plaie pour comprendre ce qui se passe ensuite ;)


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

Marine
Invité n'ayant pas de compte PHPfrance

23 juin 2016, 15:12

merci :D

pour le php.ini, je ne sais pas trop où il se trouve (ni ce que je dois modifier dedans), le site est hébergé chez ovh, je ne sais pas si on peut modifier cela...

sinon j'ai remplacé la partie :
add_action( 'init', 'cookie_par_ou_commencer' );
 
function cookie_par_ou_commencer() {
 setcookie( $v_username, $v_value, 120 * DAYS_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
par :
<?php
if(!isset($_COOKIE[$v_username]){
 setcookie( $v_username, $v_value, 120 * DAYS_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
Et ma page m'affiche toujours le code en clair à partir de :
$page2) && ($_COOKIE[$v_value]<=$page3))
j'ai donc peut-être un souci de parenthèses, je ne sais pas...

Alors oui là c'est pour le forum que je n'affiche pas l'adresse entière de l'autre site, quand je teste, c'est avec l'adresse entière, type http://www.../page1.php

Un grand merci pour le temps que tu consacres à mon souci :D

Mammouth du PHP | 1967 Messages

24 juin 2016, 14:33

Si tu met du code php directement dans ton CMS, es tu sur d'avoir un filtre qui va interpréter le php ?

Sur Drupal par exemple, c'est un module additionnel qu'il faut installer et activer.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Marine
Invité n'ayant pas de compte PHPfrance

24 juin 2016, 15:57

@Spols : Bonjour !

bonne idée, je n'y avais pas pensé, merci, apparemment oui il faut passer par un truc spécifique pour exécuter du code php.

On peut faire ça visiblement avec les shortcode http://www.webdesignerdepot.com/2013/06 ... hortcodes/

J'ai donc créé une fonction dans mon fichier functions.php :
function redirectof() {

// Création cookie

if(!isset ($_COOKIE[$v_username])){
 setcookie($v_username, $v_value, 120 * DAYS_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);
}

// Récupérer cookie

$page2=4*DAYS_IN_SECONDS;
$page3=7*DAYS_IN_SECONDS;

if(isset($_COOKIE[$v_username]) && ($_COOKIE[$v_value]>$page2) && ($_COOKIE[$v_value]<=$page3)) {
$pagev='page2';
echo $pagev;
}
elseif (isset($_COOKIE[$v_username]) && ($_COOKIE[$v_value]>168*DAYS_IN_SECONDS)) {
$pagev='page3.php';
echo $pagev;
}
else {
$pagev='page1.php';
echo $pagev;
}
?><center><iframe src="<?php echo $pagev; ?>" name="page" height="1500" marginheight="0" width=98%>Vous devez posséder un navigateur capable de prendre en charge les frame pour visionner ce contenu</iframe></center>
<?php
}

// Ajout du shortcode

add_shortcode('redirecto', 'redirectof');
Alors déjà c'est cool j'ai pas les mêmes erreurs qu'avant, j'ai bien la page "page1.php" qui s'affiche (echo $pagev)

En revanche, j'ai l'impression que le cookie n'est pas pris en compte, je le trouve pas dans mon navigateur...

Je n'y connais pas grand chose (pour ne pas dire rien) en cookie
J'ai testé ça, ajouté dans mon code entre les parties // Création cookie et // Récupérer cookie :
// Vérification si cookie OK

if(!isset($_COOKIE[$v_username])) {
  echo "The cookie: '" . $v_username . "' is not set.";
} else {
  echo "The cookie '" . $v_username . "' is set.";
  echo "Cookie is:  " . $_COOKIE[$v_username];
}
Et il me renvoie "The cookie: '' is not set."

ça ne fonctionne pas non plus avec :
add_action( 'init', 'setting_my_first_cookie' );

function setting_my_first_cookie() {
  setcookie( $v_username, $v_value, 30 * DAYS_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
juste après function redirectof() {

Donc je pense que mon cookie n'est pas du tout créé... comment faire ?

Merci :)