$ _SESSION上的未定义变量

时间:2016-05-07 15:52:49

标签: php session

我初始化了我的$_SESSION var但是当我在没有提交表单的情况下启动索引时出现这些错误:

if(!empty($_POST)){
    $_SESSION['idZone'] = 0;
    $_SESSION['idSalle'] = 0;
    $_SESSION['idUtilisateur'] = 0;
    $_SESSION['dateDebut'] = 0 ;
    $_SESSION['dateFin'] = 0;
}
?>

Screenshot of Errors

这是我的完整代码:

<?php 
include('fonctionsBDD.php');
$bdd = connectionBDD(); 

session_start();

if(!empty($_POST)){
    $_SESSION['idZone'] = 0;
    $_SESSION['idSalle'] = 0;
    $_SESSION['idUtilisateur'] = 0;
    $_SESSION['dateDebut'] = 0 ;
    $_SESSION['dateFin'] = 0;
}
?>

<!-- Choix des filtres à afficher -->
<p>Quels filtres afficher ?</p>
<form action="" method="POST">
    <input type="checkbox" name="cbx-zones">Zones</input> 
    <input type="checkbox" mname="cbx-salles">Salles</input>
    <input type="checkbox" name="cbx-dates">Date</input> 
    <input type="checkbox" name="cbx-heures">Heures</input> 
    <p><input type="submit" /></p>
</form>

<!-- Zone filtres -->
<div class="FiltreSalle">
    <form action="" method="POST">
    <?php 
    if (isset($_POST['cbx-zones'])) {
        /* COntenu d'un filtre ici */
    }
    ?>
<!-- Filtre par Area Name-->
    <form action="" method="POST">
        <br /><br />
        <label>Choisir la zone </label><br />
        <select name="zone">
            <?php echo "<option unselected>- - - Choisissez  une zone - - - </option>\n";
    $reponseSalle = $bdd->query('SELECT * FROM mrbs_area ORDER BY area_name');

        while ($donnees = $reponseSalle->fetch(PDO::FETCH_OBJ)) {
        ?>
            <option value="<?php echo $donnees->id; ?>"> <?php echo $donnees->area_name; ?></option>
        <?php
        }
        ?>
        </select>

        <!-- Filtre par salle -->
        <br /><br />

        <label>Choisir la salle</label><br />
        <select name="salle"> 
            <?php echo "<option unselected>- - - Choisissez  une salle - - - </option>\n";
        $reponseSalle = $bdd->query('SELECT * FROM mrbs_room ORDER BY room_name');

        while ($donnees = $reponseSalle->fetch(PDO::FETCH_OBJ)) {
        ?>
            <option value="<?php echo $donnees->id; ?>"> <?php echo $donnees->room_name; ?></option>
        <?php
        } 
        ?>
        </select>

        <!-- Filtre par utilisateurs-->
        <br /><br />
        <label>Choisir l'utilisateur</label><br />
        <select name="utilisateur">
            <?php echo "<option unselected>- - - Choisissez  un utilisateur - - - </option>\n";
        $reponseSalle = $bdd->query('SELECT * FROM mrbs_users ORDER BY name');

        while ($donnees = $reponseSalle->fetch(PDO::FETCH_OBJ)) {
        ?>
            <option value="<?php echo $donnees->id; ?>"> <?php echo $donnees->name; ?></option>
        <?php
        }
        ?>
        </select>

        <!-- Filtres par DatePicker -->
        <br /> <br />
<script>
$(function() {
    $("#from").datepicker({
        defaultDate: "+1d",
        changeMonth: true,
        numberOfMonths: 1,
        dateFormat : '@',
        onClose: function( selectedDate ) {
            $( "#to" ).datepicker( "option", "minDate", selectedDate );
        }
    });
    $("#to").datepicker({
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 1,
        dateFormat : '@',
        onClose: function( selectedDate ) {
            $( "#from" ).datepicker( "option", "maxDate", selectedDate );
            var currentDate = $( ".selector" ).datepicker( "getDate" );
        }
    });
});
</script>
        <label for="from">Du</label>
        <input type="text" id="from" name="from">
        <label for="to">Au</label>
        <input type="text" id="to" name="to">
        <input type='submit' value='Submit'><br /><br />
    </form>
    <!-- Traitement des données -->
<?php
$_SESSION['idZone'] = $_POST['zone'];
$_SESSION['idSalle'] = $_POST['salle'];
$_SESSION['idUtilisateur'] = $_POST['utilisateur'];
$_SESSION['dateDebut'] = $_POST["from"];
$_SESSION['dateFin'] = $_POST["to"];

echo('La zone séléctionnée est :' . $_SESSION['idZone']  . '<br />');
echo('La salle séléctionnée est :' . $_SESSION['idSalle']  . '<br />');
echo('L utilisateur séléctionné est :' . $_SESSION['idUtilisateur']  . '<br />');
echo('La date de début séléctionnée est :' . $_SESSION['dateDebut']  . '<br />');
echo('La date de fin séléctionnée est :' . $_SESSION['dateFin'] . '<br />');      
?>

我认为我的初始化不好,但我不知道为什么。如果有人可以帮助我:)。

3 个答案:

答案 0 :(得分:3)

使用会话的一种最佳方式是 在任何其他代码之前,会话应始终首先在文件中开始。 像这样

<?php
session_start() ;

include('fonctionsBDD.php');
$bdd = connectionBDD(); 
.....

答案 1 :(得分:1)

您希望在未发布值时进行初始化,对吗?

所以,摆脱!

if(empty($_POST)){
      $_SESSION['idZone'] = 0;
      $_SESSION['idSalle'] = 0;
      $_SESSION['idUtilisateur'] = 0;
      $_SESSION['dateDebut'] = 0 ;
      $_SESSION['dateFin'] = 0;
  }
  ?>

答案 2 :(得分:1)

这部分代码依赖于POST (位于脚本底部),而您没有检查帖子:

<?php
$_SESSION['idZone'] = $_POST['zone'];
$_SESSION['idSalle'] = $_POST['salle'];
$_SESSION['idUtilisateur'] = $_POST['utilisateur'];
$_SESSION['dateDebut'] = $_POST["from"];
$_SESSION['dateFin'] = $_POST["to"];


echo('La zone séléctionnée est :' . $_SESSION['idZone']  . '<br />');
echo('La salle séléctionnée est :' . $_SESSION['idSalle']  . '<br />');
echo('L utilisateur séléctionné est :' . $_SESSION['idUtilisateur']  . '<br />');
echo('La date de début séléctionnée est :' . $_SESSION['dateDebut']  . '<br />');
echo('La date de fin séléctionnée est :' . $_SESSION['dateFin'] . '<br />');      
?>

您需要使用if,因为您可能会在页面顶部指定:

if(isset($_SESSION['idZone']))
    echo 'La zone séléctionnée est :'.$_SESSION['idZone'].'<br />';

if(isset($_SESSION['idSalle']))
    echo 'La salle séléctionnée est :'.$_SESSION['idSalle'].'<br />';

if(isset($_SESSION['idUtilisateur']))
    echo 'L utilisateur séléctionné est :'.$_SESSION['idUtilisateur'].'<br />');

if(isset($_SESSION['dateDebut']))
    echo 'La date de début séléctionnée est :'.$_SESSION['dateDebut'].'<br />');

if(isset($_SESSION['dateFin']))
    echo 'La date de fin séléctionnée est :'.$_SESSION['dateFin'].'<br />');

并删除底部的所有内容:

$_SESSION['idZone'] = $_POST['zone'];
$_SESSION['idSalle'] = $_POST['salle'];
$_SESSION['idUtilisateur'] = $_POST['utilisateur'];
$_SESSION['dateDebut'] = $_POST["from"];
$_SESSION['dateFin'] = $_POST["to"];