A voir également:
- Php redirect
- Easy php - Télécharger - Divers Web & Internet
- \R php ✓ - Forum PHP
- Br php ✓ - Forum PHP
- Expert php - Télécharger - Langages
- Php echo image ✓ - Forum PHP
9 réponses
Utilisateur anonyme
1 avril 2008 à 14:49
1 avril 2008 à 14:49
d'autres choses (toujours avec mes codes)
<meta http-equiv='Refresh' content='2;URL=page_admin.php?<?php echo "log=".$_SESSION['log']."&psw=".$_SESSION['psw'];?>'>
ceci permet de passer les variables de session en GET et donc de les récupérer.
if (isset($_GET['log'])) {
//echo "<pre>";print_r($_GET);echo "</pre>";
$_SESSION['log']= $_GET['log'];
$_SESSION['psw']= $_GET['psw'];
}
enfin un autre truc lié à http-equiv
trouvé sur le net
Lorsqu'on fait une redirection avec la fonction php "header( url )" ET que l'url que l'on choisi est absolue, c'est a dire du type
"https://openclassrooms.com/fr/", ALORS php choisi de NE PAS transmettre les variable de session CAR il (php) considère que ca comporte des dangers, et que cette demande d'url à votre serveur peut venir d'un autre site : craker, pirateur etc...
SI vous avez un url relatif, la, php conserve les sessions CAR la demande vient forcément d'un client du site.
<meta http-equiv='Refresh' content='2;URL=page_admin.php?<?php echo "log=".$_SESSION['log']."&psw=".$_SESSION['psw'];?>'>
ceci permet de passer les variables de session en GET et donc de les récupérer.
if (isset($_GET['log'])) {
//echo "<pre>";print_r($_GET);echo "</pre>";
$_SESSION['log']= $_GET['log'];
$_SESSION['psw']= $_GET['psw'];
}
enfin un autre truc lié à http-equiv
trouvé sur le net
Lorsqu'on fait une redirection avec la fonction php "header( url )" ET que l'url que l'on choisi est absolue, c'est a dire du type
"https://openclassrooms.com/fr/", ALORS php choisi de NE PAS transmettre les variable de session CAR il (php) considère que ca comporte des dangers, et que cette demande d'url à votre serveur peut venir d'un autre site : craker, pirateur etc...
SI vous avez un url relatif, la, php conserve les sessions CAR la demande vient forcément d'un client du site.
Utilisateur anonyme
1 avril 2008 à 12:00
1 avril 2008 à 12:00
En fait je bidouille pour trouver le problème.
j'ai donc créer des fichiers que je suppose faire la même chose que toi.
je mets des session_start, des session_unset et des session_destroy pour voir mais rien n'y fait.
Je pense que le problème vient du fait de ce popup (window.open).
admin.php est dans une appli (appli1),
on ouvre une fenêtre(popup = autre appli (appli2) dans laquelle on fait la saisie de variables, dans cette même fenêtre on crée les variables de session
puis on retourne dans admin.php soit appli1
les variables de session ne passent pas d'une appli à l'autre.
ce qui n'est pas le cas quand on enchaine ou qu'on inclut des script php, on reste alors dans la même appli.
si là où j'initialise mes variables de session, je fais un include d'un fichier qui fait print_r($_SESSION), il récupère bien ces variables.
ci après les fichiers créés pour les tests
-----page_admin.php ----<html>
<SCRIPT language='javascript'>
function ouvre_login()
{
window.open('extr.html','Login','menubar=no, status=no, scrollbars=no, menubar=no, width=300, height=200');
}
</SCRIPT>
<body>
<?php
//session_start();
if (!isset($_SESSION['log'])) {
?>
<a href="#" onClick='ouvre_login();'>M'identifier</a>
<br>
Page initiale
<br>
<?php
}
else {
echo "page principale";
echo $_SESSION['log'];
//echo "vous êtes connectée en : ".$_SESSION['log']."<br>";
}
?>
</body>
</html>
------ extr.html -------
<html>
<form method='post' action='extr.php'>
login<input type ='text'name='login'><br>
pw <input type='text' name='pwd'><br>
<input type='submit' value='ok'>
</form>
</html>
---initialise var session ------------<?php
extract($_POST);
$_SESSION['log']= $login;
$_SESSION['psw']= $pwd;
include ('bidouille.php');
?>
<meta http-equiv='Refresh' content='2;URL=page_admin.php'>
</html>
--bidouille.php----
<?php
print_r($_SESSION);
?>
j'ai donc créer des fichiers que je suppose faire la même chose que toi.
je mets des session_start, des session_unset et des session_destroy pour voir mais rien n'y fait.
Je pense que le problème vient du fait de ce popup (window.open).
admin.php est dans une appli (appli1),
on ouvre une fenêtre(popup = autre appli (appli2) dans laquelle on fait la saisie de variables, dans cette même fenêtre on crée les variables de session
puis on retourne dans admin.php soit appli1
les variables de session ne passent pas d'une appli à l'autre.
ce qui n'est pas le cas quand on enchaine ou qu'on inclut des script php, on reste alors dans la même appli.
si là où j'initialise mes variables de session, je fais un include d'un fichier qui fait print_r($_SESSION), il récupère bien ces variables.
ci après les fichiers créés pour les tests
-----page_admin.php ----<html>
<SCRIPT language='javascript'>
function ouvre_login()
{
window.open('extr.html','Login','menubar=no, status=no, scrollbars=no, menubar=no, width=300, height=200');
}
</SCRIPT>
<body>
<?php
//session_start();
if (!isset($_SESSION['log'])) {
?>
<a href="#" onClick='ouvre_login();'>M'identifier</a>
<br>
Page initiale
<br>
<?php
}
else {
echo "page principale";
echo $_SESSION['log'];
//echo "vous êtes connectée en : ".$_SESSION['log']."<br>";
}
?>
</body>
</html>
------ extr.html -------
<html>
<form method='post' action='extr.php'>
login<input type ='text'name='login'><br>
pw <input type='text' name='pwd'><br>
<input type='submit' value='ok'>
</form>
</html>
---initialise var session ------------<?php
extract($_POST);
$_SESSION['log']= $login;
$_SESSION['psw']= $pwd;
include ('bidouille.php');
?>
<meta http-equiv='Refresh' content='2;URL=page_admin.php'>
</html>
--bidouille.php----
<?php
print_r($_SESSION);
?>
Deallyra
Messages postés
3
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
1 avril 2008
1
1 avril 2008 à 13:10
1 avril 2008 à 13:10
Re,
Tu as peut-être raison, mais ce qui me taraude le plus, c'est que tout mon code, même si y'a une appli1 et une appli2, fonctionne parfaitement en local. Mais pas quand je l'uploade sur le serveur, c'est la que le bas blesse et que ma page_admin.php ne parvient pas a récupérer mes variables de session. Il est là mon vrai problème ^^ Pourquoi ca fonctionne sur l'un et pas sur l'autre ?
Enfin, grand merci pour tout le temps que tu perds en essayant de m'aider :P Je vais peut-être tenter autre chose...
\o/
Tu as peut-être raison, mais ce qui me taraude le plus, c'est que tout mon code, même si y'a une appli1 et une appli2, fonctionne parfaitement en local. Mais pas quand je l'uploade sur le serveur, c'est la que le bas blesse et que ma page_admin.php ne parvient pas a récupérer mes variables de session. Il est là mon vrai problème ^^ Pourquoi ca fonctionne sur l'un et pas sur l'autre ?
Enfin, grand merci pour tout le temps que tu perds en essayant de m'aider :P Je vais peut-être tenter autre chose...
\o/
sans doute la différence entre php4 et php5 car mes tests sont fait en php 4.
ce que je peux te dire sur les variables de session entre php4 et php5 c'est l'un les passe par variable (php4) et l'autre par pointeur (php5).
ce ce fait si en php 5 tu as :
$toto = 1;
$_SESSION['toto'] = $toto;
et que plus loin tu fasses $toto = 2;
la variable de session est, elle aussi modifiée sans avor refait l'affectation.
ce que je peux te dire sur les variables de session entre php4 et php5 c'est l'un les passe par variable (php4) et l'autre par pointeur (php5).
ce ce fait si en php 5 tu as :
$toto = 1;
$_SESSION['toto'] = $toto;
et que plus loin tu fasses $toto = 2;
la variable de session est, elle aussi modifiée sans avor refait l'affectation.
Utilisateur anonyme
1 avril 2008 à 10:03
1 avril 2008 à 10:03
Bonjour,
C'est possible que la différence de version ait une incidence.
mais quand même
une certirude cependant c'est que les variables de session ne fonctionne pas de la même manière en 5 et en 4.
Pourquoi une popup et pas un formulaire ?
pouvez-vous donner une partie du code ?
C'est possible que la différence de version ait une incidence.
mais quand même
une certirude cependant c'est que les variables de session ne fonctionne pas de la même manière en 5 et en 4.
Pourquoi une popup et pas un formulaire ?
pouvez-vous donner une partie du code ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tout d'abord, merci de votre aide.
C'est une popup avec un formulaire dedans ;), je l'ai fait de cette manière car c'est ce qu'on m'a demandé et que c'est, il est vrai, plus esthétique !
Pour le morceau de code :
Contenu de la page de mon popup :
<form action='redirect.php' method='post' name='form1' target='administration' onsubmit='self.close()'>
<h4>Connexion administrateur</h4>
<p><b class='texte_news'>Login :
<input name='login' type='text' on/>
</b><b class='texte_news'><p>Mot de passe :
<input name='mdp' type='password' />
<p>
<input name='submit' type='submit' value='Envoyer'/>
</b>
</form>
redirect.php étant la page qui vérifie que les informations entrées correspondent à celles de la bdd et qui incrémente les variables de session.
La target du form est la page principale que j'ai donc nommé 'administration'.
Contenu de la page redirect.php :
session_start();
$loginOK = false;
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['mdp'])) )
{
extract($_POST);
$login=$_POST['login'];
// On va chercher le mot de passe afférent à ce login
$sql = "SELECT mdp, accueil_news_dates, rh_news_dates, agenda_maire, location_salle, location_voiture_portable FROM login_mdp WHERE login = '".addslashes($login)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
// On vérifie que l'utilisateur existe bien
if (mysql_num_rows($req) > 0)
{
$data = mysql_fetch_assoc($req);
// On vérifie que son mot de passe est correct
if ($mdp == $data['mdp'])
{
$loginOK = true;
}
}
}
// Si le login a été validé on met les données en session
if ($loginOK)
{
$_SESSION['login'] = $login;
$_SESSION['mdp'] = $data['mdp'];
$_SESSION['accueil_news_dates'] = $data['accueil_news_dates'];
$_SESSION['rh_news_dates'] = $data['rh_news_dates'];
$_SESSION['agenda_maire'] = $data['agenda_maire'];
$_SESSION['location_salle'] = $data['location_salle'];
$_SESSION['location_voiture_portable'] = $data['location_voiture_portable'];
?>
<meta http-equiv="Refresh" content="2;URL=page_admin_test.php">
<?php
}
else
{
echo '<b class="rouge">Une erreur est survenue, veuillez réessayer !
<p><input type="button" value="Retour" onclick="history.go(-1)"</b>';
}
mysql_close();
?>
Dans ma page admin, je ne pense pas qu'il y aura quelquechose qui pourra vous aider, j'affiche juste dedans des morceaux différents de page selon les droits ($_SESSION['accueil_news_dates'] etc...) définis pour cet utilisateur-là !
C'est une popup avec un formulaire dedans ;), je l'ai fait de cette manière car c'est ce qu'on m'a demandé et que c'est, il est vrai, plus esthétique !
Pour le morceau de code :
Contenu de la page de mon popup :
<form action='redirect.php' method='post' name='form1' target='administration' onsubmit='self.close()'>
<h4>Connexion administrateur</h4>
<p><b class='texte_news'>Login :
<input name='login' type='text' on/>
</b><b class='texte_news'><p>Mot de passe :
<input name='mdp' type='password' />
<p>
<input name='submit' type='submit' value='Envoyer'/>
</b>
</form>
redirect.php étant la page qui vérifie que les informations entrées correspondent à celles de la bdd et qui incrémente les variables de session.
La target du form est la page principale que j'ai donc nommé 'administration'.
Contenu de la page redirect.php :
session_start();
$loginOK = false;
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['mdp'])) )
{
extract($_POST);
$login=$_POST['login'];
// On va chercher le mot de passe afférent à ce login
$sql = "SELECT mdp, accueil_news_dates, rh_news_dates, agenda_maire, location_salle, location_voiture_portable FROM login_mdp WHERE login = '".addslashes($login)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
// On vérifie que l'utilisateur existe bien
if (mysql_num_rows($req) > 0)
{
$data = mysql_fetch_assoc($req);
// On vérifie que son mot de passe est correct
if ($mdp == $data['mdp'])
{
$loginOK = true;
}
}
}
// Si le login a été validé on met les données en session
if ($loginOK)
{
$_SESSION['login'] = $login;
$_SESSION['mdp'] = $data['mdp'];
$_SESSION['accueil_news_dates'] = $data['accueil_news_dates'];
$_SESSION['rh_news_dates'] = $data['rh_news_dates'];
$_SESSION['agenda_maire'] = $data['agenda_maire'];
$_SESSION['location_salle'] = $data['location_salle'];
$_SESSION['location_voiture_portable'] = $data['location_voiture_portable'];
?>
<meta http-equiv="Refresh" content="2;URL=page_admin_test.php">
<?php
}
else
{
echo '<b class="rouge">Une erreur est survenue, veuillez réessayer !
<p><input type="button" value="Retour" onclick="history.go(-1)"</b>';
}
mysql_close();
?>
Dans ma page admin, je ne pense pas qu'il y aura quelquechose qui pourra vous aider, j'affiche juste dedans des morceaux différents de page selon les droits ($_SESSION['accueil_news_dates'] etc...) définis pour cet utilisateur-là !
Utilisateur anonyme
1 avril 2008 à 10:40
1 avril 2008 à 10:40
re bonjour,
je ne trouve rien ici.
je reprends;
une page principale appelle le popup-formulaire qui renvoit sur redirect.php lequel initialise les variables de session.
pouvez-vous me donner la ligne de la page princiaple qui appelle le formulaire
et
la ligne de retour de redirect.php vers la page principale (à moins que cela soit des include)
je ne trouve rien ici.
je reprends;
une page principale appelle le popup-formulaire qui renvoit sur redirect.php lequel initialise les variables de session.
pouvez-vous me donner la ligne de la page princiaple qui appelle le formulaire
et
la ligne de retour de redirect.php vers la page principale (à moins que cela soit des include)
Oui, vous avez tout compris ^^
La ligne de la page qui appelle le formulaire est la suivante :
<a onClick='ouvre_login();' class='planning'>M'identifier</a>
ouvre_login() correspond à cette fonction-là :
<SCRIPT language='javascript'>
function ouvre_login()
{
window.open('login_admin.html','Login','menubar=no, status=no, scrollbars=no, menubar=no, width=300, height=200');
}
</SCRIPT>
La ligne de retour de redirect.php vers la page principale est :
<meta http-equiv='Refresh' content='2;URL=page_admin.php'>
La ligne de la page qui appelle le formulaire est la suivante :
<a onClick='ouvre_login();' class='planning'>M'identifier</a>
ouvre_login() correspond à cette fonction-là :
<SCRIPT language='javascript'>
function ouvre_login()
{
window.open('login_admin.html','Login','menubar=no, status=no, scrollbars=no, menubar=no, width=300, height=200');
}
</SCRIPT>
La ligne de retour de redirect.php vers la page principale est :
<meta http-equiv='Refresh' content='2;URL=page_admin.php'>
Utilisateur anonyme
1 avril 2008 à 11:17
1 avril 2008 à 11:17
Les tests que je fais me renvoient :
Page principale
Notice: Undefined variable: _SESSION in page_admin.php on line 14 vous êtes connectée en :
ligne qui est (echo "vous êtes connectée en : ".$_SESSION['log']."<br>";)
(et ce dans la fenêtre popup)
Il est étonnant que je n'aie pas le $ de cette variable. avez vous un message d'erreur ?
Page principale
Notice: Undefined variable: _SESSION in page_admin.php on line 14 vous êtes connectée en :
ligne qui est (echo "vous êtes connectée en : ".$_SESSION['log']."<br>";)
(et ce dans la fenêtre popup)
Il est étonnant que je n'aie pas le $ de cette variable. avez vous un message d'erreur ?
Deallyra
Messages postés
3
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
1 avril 2008
1
1 avril 2008 à 11:30
1 avril 2008 à 11:30
Non je n'ai pas de message d'erreur sinon j'aurai de suite vérifié d'où ca venait !
Et comment peut-il y avoir une erreur de session dans la popup étant donné que quand on l'ouvre c'est pour s'identifier, et de ce fait aucune session n'est encore démarrée...
Quand on ouvre la page_admin.php en étant identifié, on ne voit même pas le lien qui ouvre la popup et nous propose de nous identifier ! On le voit seulement si il n'y a aucune session de démarrée.
La popup qui s'ouvre est login_admin.html, donc il ne peut pas y avoir de session dedans étant donné que les sessions sont du php. (ou alors y'a un truc qui m'échappe ;))
Merci encore de ton aide et du temps que tu prends pour m'aider !
Et comment peut-il y avoir une erreur de session dans la popup étant donné que quand on l'ouvre c'est pour s'identifier, et de ce fait aucune session n'est encore démarrée...
Quand on ouvre la page_admin.php en étant identifié, on ne voit même pas le lien qui ouvre la popup et nous propose de nous identifier ! On le voit seulement si il n'y a aucune session de démarrée.
La popup qui s'ouvre est login_admin.html, donc il ne peut pas y avoir de session dedans étant donné que les sessions sont du php. (ou alors y'a un truc qui m'échappe ;))
Merci encore de ton aide et du temps que tu prends pour m'aider !
Deallyra
Messages postés
3
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
1 avril 2008
1
1 avril 2008 à 15:59
1 avril 2008 à 15:59
Rebonjour, oui j'étais tombé là-dessus aussi, et en effet j'utilise des url relatives, c'est plus logique dans mon cas, et je n'utilise pas de redirection de type header(url) ! Merci encore de ton aide mais j'avais déjà pas mal tourné sur les forums pour trouver une solution à mon problème !
-------
\o/
-------
\o/
10 avril 2012 à 17:00
merci ;)