打印多维数组

问题描述 投票:0回答:1

我有一个多维数组($SESSION),在写入它之后(使用函数 ajout_liste),我想打印它(使用函数 affiche_liste)。我的问题是即使我写在里面 $SESSION 总是空的。
有什么想法吗?

 <?php
    
    class liste_livre{
        public $SESSION = array('Titre' => array(),
                                'Auteur' => array(),
                                'Editeur' => array(),
                                'Annee' => array(),
                                );
        // create a formulary
        public function notre_formulaire() {
    
            $str = '<form action="" method="POST">';
            $str .= 'Que voulez vous faire ?<br>';
            $str .= 'Ajouter un livre<br>';
            $str .= '<input type="radio" name="radio" value="ajoute"><br>';
            $str .= '<input type="text" name="titre" placeholder="Titre">';
            $str .= '<input type="text" name="auteur" placeholder="Auteur">';
            $str .= '<input type="text" name="editeur" placeholder="Editeur">';
            $str .= '<input type="text" name="annee" placeholder="Annee">';
            $str .= '<br>';
            $str .= 'Afficher la liste des livres<br>';
            $str .= '<input type="radio" name="radio" value = "affiche"><br>';
            $str .= '<p>';
            $str .= '<input type="Submit" name="submit" value = "Valider">';
            $str .= '</form>';
    
            return $str;
        }
    
        public function form_liste(){
            //ADD ERROR IF EMPTY !!!!!!!!!!!!!
            $titre = $auteur = $editeur = $annee = "";
    
            // print the formulary
            echo $this-> notre_formulaire();
    
            // the choice
            if (isset($_POST['radio'])) {
                // On recupere son choix dans la variable $choix
                $choix = $_POST['radio'];
                // Si cette variable est egale à ajout, c'est a dire si la personne veut ajouter un nouveau livre
                if( $choix == 'ajoute' ){
                    echo $this->ajout_liste($_POST["titre"],$_POST["auteur"],$_POST["editeur"],$_POST["annee"]);
                }
                // Si la personne veut juste afficher les livres 
                else if ( $choix == 'affiche' ){
                    $this->affiche_list();
                }
            }
        }
        //add a book
        public function ajout_liste($titre,$auteur,$editeur,$annee){
            $this ->SESSION['Titre'] = $titre;
            $this ->SESSION['Auteur'] = $auteur;
            $this ->SESSION['Editeur'] = $editeur;
            $this ->SESSION['Annee'] = $annee;
            echo $titre;
            echo $auteur;
            echo $editeur;
            echo $annee;
        }
    
        // print the list
        public function affiche_list(){
    
            $nb = count($this->SESSION['Titre']);
            if ($nb != 0){
                foreach ($this -> SESSION as $masterkey => $mastervalue) {
                
                    for($x = 0; $x <= $nb; $x++){
                        echo "<p>".$masterkey." ".$mastervalue[$x]."<br>";
                    }
    
                }
            }
            else{
                echo "Il n'y a pas de livre ! Veuillez en enregistrer pour pouvoir les afficher ";
                }
    
             }
            /*
            echo $this ->SESSION['Titre'];
            echo $this ->SESSION['Auteur'];
            echo $this ->SESSION['Editeur']; 
            echo $this ->SESSION['Annee']; */
    
        }
    }       
    ?>

编辑:
感谢 index.php 文件,我调用了所有函数:

<?php
@ini_set('display_errors', 'on');

require_once('page.php');
require_once('liste_livre.php');

$form = new liste_livre();
$pag = new Page();


echo $pag->entete('premiere page');
$form -> form_liste();
echo $pag->piedPage();

?>

这是我添加一本书时得到的:

当我想打印图书列表时(即使在我添加了一本:在本例中是哈利波特),我有这个,这意味着它是空的:

EDIT2:这是 Page 类的代码

<?php

class Page {

    private $titre;

    public function entete($title)
    {
        $this->titre = $title;
        return '<!doctype html>
        <html lang="fr">
        <head>
            <meta charset="utf-8">
            <title>'.$this->titre.'</title>
            <!--<link rel="stylesheet" href="style.css">  fichier a creer -->
            <!--<script src="script.js"></script>  fichier a creer -->
        </head>
        <body>';
    }

    public function piedPage()
    {
        return '</body></html>';
    }

}
?>
php arrays multidimensional-array
1个回答
0
投票

您需要先启动会话才能使用它。

您可以使用

session_start

<?php
@ini_set('display_errors', 'on');
session_start(); // <-- start the session and make $_SESSION available

require_once('page.php');
require_once('liste_livre.php');

$form = new liste_livre();
$pag = new Page();


echo $pag->entete('premiere page');
$form -> form_liste();
echo $pag->piedPage();

或者您可以在 php.ini 文件中启用

session.auto_start
,但这会影响服务器上的所有 php 文件,并可能会破坏依赖启动自己会话的系统。

[PHP]
session.auto_start = 1

如果您确实想使用名为

$SESSION
的全局变量,则需要在使用时使其可用。

<?php
@ini_set('display_errors', 'on');

global $SESSION; // <-- make $SESSION a global

require_once('page.php');
require_once('liste_livre.php');

$form = new liste_livre();
$pag = new Page();

echo $pag->entete('premiere page');
$form -> form_liste();
echo $pag->piedPage();

然后同样获取

$SESSION
中的全局
liste_livre

<?php
global $SESSION; // <-- tell PHP to use global $SESSION and not a class specific version

class liste_livre{
    // This won't use the global $SESSION and will instead use $this->SESSION;
    public $SESSION = array('Titre' => array(),
                            'Auteur' => array(),
                            'Editeur' => array(),
                            'Annee' => array(),
                            ); 

    // create a formulary
    public function notre_formulaire() {
        global $SESSION; // <-- global $SESSION

        // Get something from global session
        $SESSION['something'];

        // Get something from class session
        $this->SESSION['Titre'];
...

如果您想在

$form
中使用
$page
会话,您也可以这样做,但您需要将
$form
设置为全局或在
Page
中调用它:

<?php
require_once('liste_livre.php');

class Page {

    private $titre;

    public function entete($title)
    {
        $form = new liste_livre();

        $this->titre = $form->SESSION['Titre'];
        return '<!doctype html>
        <html lang="fr">
        <head>
            <meta charset="utf-8">
            <title>'.$this->titre.'</title>
            <!--<link rel="stylesheet" href="style.css">  fichier a creer -->
            <!--<script src="script.js"></script>  fichier a creer -->
        </head>
        <body>';
    }

    public function piedPage()
    {
        return '</body></html>';
    }

}

全球示例

<?php
@ini_set('display_errors', 'on');

require_once('page.php');
require_once('liste_livre.php');

global $form; // <-- make $form global

$form = new liste_livre();
$pag = new Page();


echo $pag->entete('premiere page');
$form -> form_liste();
echo $pag->piedPage();

$form
 中使用 
Page

<?php

class Page {

    private $titre;

    public function entete($title)
    {
        global $form; // <-- use global $form

        $this->titre = $form->SESSION['Titre'];
        return '<!doctype html>
        <html lang="fr">
        <head>
            <meta charset="utf-8">
            <title>'.$this->titre.'</title>
            <!--<link rel="stylesheet" href="style.css">  fichier a creer -->
            <!--<script src="script.js"></script>  fichier a creer -->
        </head>
        <body>';
    }

    public function piedPage()
    {
        return '</body></html>';
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.