la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

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 : la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

Re: la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

par Saian » 18 déc. 2019, 17:24

Et bien tu ne dois avoir aucune sortie avant le session_start hors la tu as un commentaire html avant <!-- fichier pour mieux organiser son code -->.

Si les erreurs étaient affichées tu aurais un header already sent sur le session_start ce qui empêche la session de fonctionner et donc le transfert de son contenu d'une page à l'autre.

Et au passage un conseil, ne ferme pas la balise php sur les fichiers ne contenant que du php, ça évite ce genre de problème avec par exemple un retour à la ligne malencontreux à la fin d'un fichier sous la balise fermante.

Re: la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

par jonat44 » 18 déc. 2019, 17:16

<!-- fichier pour mieux organiser son code -->
<?php
include 'constants.php';
include 'db.php';
include 'form.php';
// session_start();
include 'auth.php';
include 'session.php';
Voila mon include.php
merci pour ton aide

Re: la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

par Saian » 18 déc. 2019, 17:08

Il y a une balise PHP sur le forum qui permet de rendre tes codes plus lisibles. Sinon je ne vois pas le problème, tu appelles setFlash puis fais une redirection avec header suivit de die, c'est très bien. Et dans l'include header tu appelles la fonction flash. Donc à moins que $_SESSION['Flash'] soit reset dans include.php...?

PS : pour moi le seul bémol c'est sur setFlash :
function setFlash($message, $type = 'success')
{
  $_SESSION['Flash'] = [
    'message' => $message,
    'type' => $type
  ];
}

Re: la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

par jonat44 » 18 déc. 2019, 16:59


Salut, si ce n'est que je ne vois pas le session_start et que je ne vois pas l'initialisation de $_SESSION['Flash'], je ne vois pas de problème à première vue.
Merci de ta réponse !
Voici le session_start()
La prochaine fois je mettrai tout mes scripts..



l===============
le fichier auth.php
l===============
<?php
session_start();

if (!isset($auth)) {
if (!isset($_SESSION['Auth']['id'])) {
header('Location:' . WEBROOT . 'login.php');
die();
}
}
?>

Re: la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

par Saian » 18 déc. 2019, 16:03

Salut, si ce n'est que je ne vois pas le session_start et que je ne vois pas l'initialisation de $_SESSION['Flash'], je ne vois pas de problème à première vue.

la fonction unset() lorsqu'elle est activé bloque l'affichage du message de "Vous êtes maintenant connecté"

par jonat44 » 18 déc. 2019, 15:35

Bonjour,
Je débute sur php et je fais mon portfolio en brut

Le soucis que je rencontre est que la fonction unset() bloque le traitement de mon formulaire dans le fichier login.php
Lorsque je me connecte le message générer par setFlash() doit s'afficher. Et unset() doit me permettre a la l'actualisation de la page index.php de faire disparaître le message setFlash() grâce au die() qui interrompt le script.

Lorsque je commente la fonction unset() dasn session.php mon message
reste et ne disparaît pas lors de l'actualisation.
========================
if ($select->rowCount() > 0) {
$_SESSION['Auth'] = $select->fetch();
setFlash('Vous êtes maintenant connecté');
header('Location:' . WEBROOT . 'admin/index.php');
die();
}
========================


Merci de votre aide et j’espère avoir été clair.
en vous remerciant par avance de votre œil extérieur;
cdt


======================================
Fichier session.php
=====================================
<?php
function flash()
{
if (isset($_SESSION['Flash'])) {
extract($_SESSION['Flash']);
// var_dump($_SESSION['Flash']);
unset($_SESSION['Flash']);
return "<div class='alert alert-$type'>$message</div>";
}
}
function setFlash($message, $type = 'success')
{
$_SESSION['Flash']['message'] = $message;
$_SESSION['Flash']['type'] = $type;
}
=============================================
Fichier login .php
==============================================
<?php
$auth = 0;
include 'lib/include.php';

// traitement du formulaire====================================================

if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $db->quote($_POST['username']);
// protege des caracteres comme les guillemets ou autre
$password = sha1($_POST['password']);

$select = $db->query("SELECT * FROM users WHERE username=$username AND password = '$password'");

if ($select->rowCount() > 0) {
$_SESSION['Auth'] = $select->fetch();
setFlash('Vous êtes maintenant connecté');
header('Location:' . WEBROOT . 'admin/index.php');
die();
}
}

// inclusion du header=========================================================
include 'partial/header.php';
?>


<form action="#" method="post">
<!-- methode par defaut de form = GET les variable se retrouve dans l'url
nous on veux post pour pouvoir les recuperer dans la variable $_POST -->
<div class='form-group'>
<label for="username">Nom d'utilisateur</label>
<?= input('username'); ?>

</div>
<div class='form-group'>
<label for="password">Password</label>
<input type="password" class="form-control" id='password' name="password">
</div>
<button type='submit' class="btn btn-default">Se connecter</button>
</form>

<?php include 'lib/debug.php';?>
<?php include 'partial/footer.php';?>

========================
fichier header.php
=========================

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/boot ... ap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<title>Portfolio</title>
</head>
<body>
<div class="navbar navbar-fixed-top navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">Mon portfolio PHP</a>
</div>
</div>
</div>
<div class="container">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

<?= flash(); ?>


========================
fichier index.php
=========================
<!-- contient plusieurs include -->
<?php $auth = 0; ?>
<?php include 'lib/include.php'; ?>
<?php include 'partial/header.php'; ?>



<h1>Le fameux portfolio en PHP</h1>

<?php include 'lib/debug.php'; ?>
<?php include 'partial/footer.php';?>