我有一个多维数组($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>';
}
}
?>
您需要先启动会话才能使用它。
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();
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>';
}
}