Method POST pour afficher array

Résolu/Fermé
pjdebray Messages postés 4 Date d'inscription jeudi 29 octobre 2015 Statut Membre Dernière intervention 29 octobre 2015 - 29 oct. 2015 à 17:50
 Utilisateur anonyme - 29 oct. 2015 à 22:09
Bonjour à tous,

J'ai besoin de votre aide sur un "petit" problème de programmation.

Le sujet: Dans un fichier functions.php sont "stockés" dans des tableaux (array) trois films:

<?php

function getAllMovies(){
$films = array();

$titanic = array(
'title' => "Titanic",
'release_date' => new DateTime("1998-01-07"),
'directors' => array("James Cameron"),
'genres' => array("Drame", "Romance"),
'country' => "Américain",
'synopsys' => "Southampton, 10 avril 1912. Le paquebot le plus grand et le plus moderne du monde, réputé pour son insubmersibilité, le \"Titanic\", appareille pour son premier voyage. Quatre jours plus tard, il heurte un iceberg. A son bord, un artiste pauvre et une grande bourgeoise tombent amoureux.",
'review' => array(
'score' => 3
)
);
array_push($films, $titanic);

$intouchable = array(
'title' => "Intouchables",
'release_date' => new DateTime("2011-11-02"),
'directors' => array("Eric Toledano", "Olivier Nakache"),
'genres' => array("Comédie"),
'country' => "Français",
'synopsys' => "A la suite d'un accident de parapente, Philippe, riche aristocrate, engage comme aide à domicile Driss, un jeune de banlieue tout juste sorti de prison. Bref la personne la moins adaptée pour le job. Ensemble ils vont faire cohabiter Vivaldi et Earth Wind and Fire, le verbe et la vanne, les costumes et les bas de survêtement... Deux univers vont se télescoper, s'apprivoiser, pour donner naissance à une amitié aussi dingue, drôle et forte qu'inattendue, une relation unique qui fera des étincelles et qui les rendra... Intouchables.",
'review' => array(
'score' => 4
)
);
array_push($films, $intouchable);

$psychose = array(
'title' => "Psychose",
'release_date' => new DateTime("2006-07-02"),
'directors' => array("Alfred Hitchcock"),
'genres' => array("Thriller", "Epouvante-horreur"),
'country' => "Américain",
'synopsys' => "Marion Crane en a assez de ne pouvoir mener sa vie comme elle l'entend. Son travail ne la passionne plus, son amant ne peut l'épouser car il doit verser une énorme pension alimentaire le laissant sans le sou... Mais un beau jour, son patron lui demande de déposer 40 000 dollars à la banque. La tentation est trop grande, et Marion s'enfuit avec l'argent.
<br>Très vite la panique commence à se faire sentir. Partagée entre l'angoisse de se faire prendre et l'excitation de mener une nouvelle vie, Marion roule vers une destination qu'elle n'atteindra jamais. La pluie est battante, la jeune femme s'arrête près d'un motel, tenu par un sympathique gérant nommé Norman Bates, mais qui doit supporter le caractère possessif de sa mère.
<br>Après un copieux repas avec Norman, Marion prend toutes ses précautions afin de dissimuler l'argent. Pour se délasser de cette journée, elle prend une douche...",
'review' => array(
'score' => 2
)
);
array_push($films, $psychose);

return $films;
}

function getMovie($title){
$films = getAllMovies();

foreach ($films as $film) {
if ($film['title'] == $title) {
return $film;
}
}
// Film non trouvé
}


L'objectif de mon code: Afficher l'intégralité d'un tableau (donc toutes les information d'un seul film) qui aura le même titre que ma recherche.

J'ai un formulaire qui transmet une recherche:

Le formulaire:

 			<form method="POST" action="search2.php">
<input type="text" name="reponse">
<input type="submit" value="envoyer">



Ainsi qu'une page qui va réceptionner la recherche et utiliser la variable:

<?php
$title = $_POST['reponse'];
require_once('functions.php');
$film = getMovie($title);
?>

<?php require_once('layout/header.php'); ?>

<div class="content">

<h1><?php echo $film['title']; ?></h1>
<div class="movie-rate">
<?php
for ($i=1; $i <= 5; $i++) {
if ($i <= $film['review']['score']) {
?><i class="fa fa-star"></i><?php
} else {
?><i class="fa fa-star-o"></i><?php
}
}
?>
</div>
<div class="movie-info">
<span class="label label-info"><i class="fa fa-calendar"></i> </span>
<!-- Boucle sur les réalisateurs -->
<?php foreach($film['directors'] as $director) : ?>
<span class="label label-success"><i class="fa fa-user"></i> <?php echo $director; ?></span>
<?php endforeach; ?>
<!-- Boucle sur les genres -->
<?php foreach($film['genres'] as $genre) : ?>
<span class="label label-success"><i class="fa fa-tag"></i> <?php echo $genre; ?></span>
<?php endforeach; ?>
<span class="label label-warning"><i class="fa fa-globe"></i> <?php echo $film['country']; ?></span>
</div>
<p>
<?php echo $film['synopsys']; ?>
</p>
</div>

<?php require_once('layout/footer.php'); ?>


Si je test avec un GET et non un POST, cela fonctionne. mais là, rien à faire. Je n'ai pas vraiment de problème avec ça normalement, car jutilise des BDD et du Sql pour stocker et afficher les infos. Mais là c'est pour un travail de mon école, pas possible d'utiliser de BDD ni de Sql.

Merci d'avance ! :D
A voir également:

4 réponses

Utilisateur anonyme
29 oct. 2015 à 18:49
Je crois que le problème, il est dans functions.php. Tu souhaites savoir si une valeur est dans l'array films, nous inscrirons ainsi le nom des films en tant que clés, plutôt que d'aller chercher plus loin. Comme ceci, ça fonctionne?

//Inutile de garder la fonction ici,
//elle ne reçoit pas de paramètres
//et ne renvoie que $films.
$films = array(

	'Titanic' => array(
		'title'         => "Titanic",
		'release_date'  => new DateTime("1998-01-07"),
		//...
		),
	
	'Intouchables' => array(
		'title'         => "Intouchables",
		'release_date'  => new DateTime("2011-11-02"),
		//...
		),

	'Psychose' => array(
		'title'         => "Psychose",
		'release_date'  => new DateTime("2006-07-02"),
		//...
		)
	);

function getMovie($title, $array){
	//Ici, avec la nouvelle structure,
	//rien de plus simple. On regarde si 
	//$title est une clé de $films, si oui 
	//et bah on retourne les infos du film, 
	//sinon on écrit un truc comme Film introuvable!
	return (array_key_exists($title, $array) ? $array[$title] : 'Film introuvable!');
	}

//Quand tu appelleras la fonction getMovie,
//quelque chose aura changé toutefois.
//Il te faudra passer l'array $films dans
//les paramètres, comme suit:
$film = getMovie($title, $films);

0
pjdebray Messages postés 4 Date d'inscription jeudi 29 octobre 2015 Statut Membre Dernière intervention 29 octobre 2015
29 oct. 2015 à 19:22
Merci pour ta réponse !

J'ai assemblé le code avec tes remarques. Voila ce que ce donne :

<?php

function getAllMovies(){
$films = array();
$titanic = array(
'title' => "Titanic",
'release_date' => new DateTime("1998-01-07"),
'directors' => array("James Cameron"),
'genres' => array("Drame", "Romance"),
'country' => "Américain",
'synopsys' => "Southampton, 10 avril 1912. Le paquebot le plus grand et le plus moderne du monde, réputé pour son insubmersibilité, le \"Titanic\", appareille pour son premier voyage. Quatre jours plus tard, il heurte un iceberg. A son bord, un artiste pauvre et une grande bourgeoise tombent amoureux.",
'review' => array(
'score' => 3
)
);
array_push($films, $titanic);

$intouchable = array(
'title' => "Intouchables",
'release_date' => new DateTime("2011-11-02"),
'directors' => array("Eric Toledano", "Olivier Nakache"),
'genres' => array("Comédie"),
'country' => "Français",
'synopsys' => "A la suite d'un accident de parapente, Philippe, riche aristocrate, engage comme aide à domicile Driss, un jeune de banlieue tout juste sorti de prison. Bref la personne la moins adaptée pour le job. Ensemble ils vont faire cohabiter Vivaldi et Earth Wind and Fire, le verbe et la vanne, les costumes et les bas de survêtement... Deux univers vont se télescoper, s'apprivoiser, pour donner naissance à une amitié aussi dingue, drôle et forte qu'inattendue, une relation unique qui fera des étincelles et qui les rendra... Intouchables.",
'review' => array(
'score' => 4
)
);
array_push($films, $intouchable);

$psychose = array(
'title' => "Psychose",
'release_date' => new DateTime("2006-07-02"),
'directors' => array("Alfred Hitchcock"),
'genres' => array("Thriller", "Epouvante-horreur"),
'country' => "Américain",
'synopsys' => "Marion Crane en a assez de ne pouvoir mener sa vie comme elle l'entend. Son travail ne la passionne plus, son amant ne peut l'épouser car il doit verser une énorme pension alimentaire le laissant sans le sou... Mais un beau jour, son patron lui demande de déposer 40 000 dollars à la banque. La tentation est trop grande, et Marion s'enfuit avec l'argent.
<br>Très vite la panique commence à se faire sentir. Partagée entre l'angoisse de se faire prendre et l'excitation de mener une nouvelle vie, Marion roule vers une destination qu'elle n'atteindra jamais. La pluie est battante, la jeune femme s'arrête près d'un motel, tenu par un sympathique gérant nommé Norman Bates, mais qui doit supporter le caractère possessif de sa mère.
<br>Après un copieux repas avec Norman, Marion prend toutes ses précautions afin de dissimuler l'argent. Pour se délasser de cette journée, elle prend une douche...",
'review' => array(
'score' => 2
)
);
function getMovie($title, $array){

return (array_key_exists($title, $array) ? $array[$title] : 'Film introuvable!');
}

$film = getMovie($title, $films);
}


Il m'indique une erreur:


Fatal error: Call to undefined function getMovie() in /htdocs/travail/MyMovies/search2.php on line 5
0
pjdebray Messages postés 4 Date d'inscription jeudi 29 octobre 2015 Statut Membre Dernière intervention 29 octobre 2015
29 oct. 2015 à 19:33
Oup's j'ai fais une erreur, voici le bon "nouveau" code que j'ai tésté:

<?php

//Inutile de garder la fonction ici,
//elle ne reçoit pas de paramètres
//et ne renvoie que $films.
$films = array(

$titanic = array(
	  'title'         => "Titanic",
	  'release_date'  => new DateTime("1998-01-07"),
	  'directors'     => array("James Cameron"),
	  'genres'        => array("Drame", "Romance"),
	  'country'       => "Américain",
	  'synopsys'      => "Southampton, 10 avril 1912. Le paquebot le plus grand et le plus moderne du monde, réputé pour son insubmersibilité, le \"Titanic\", appareille pour son premier voyage. Quatre jours plus tard, il heurte un iceberg. A son bord, un artiste pauvre et une grande bourgeoise tombent amoureux.",
	  'review'        => array(
	    'score'         => 3)
		),
	
	'Intouchables' => array(
	$intouchable = array(
	  'title'         => "Intouchables",
	  'release_date'  => new DateTime("2011-11-02"),
	  'directors'     => array("Eric Toledano", "Olivier Nakache"),
	  'genres'        => array("Comédie"),
	  'country'       => "Français",
	  'synopsys'      => "A la suite d'un accident de parapente, Philippe, riche aristocrate, engage comme aide à domicile Driss, un jeune de banlieue tout juste sorti de prison. Bref la personne la moins adaptée pour le job. Ensemble ils vont faire cohabiter Vivaldi et Earth Wind and Fire, le verbe et la vanne, les costumes et les bas de survêtement... Deux univers vont se télescoper, s'apprivoiser, pour donner naissance à une amitié aussi dingue, drôle et forte qu'inattendue, une relation unique qui fera des étincelles et qui les rendra... Intouchables.",
	  'review'        => array(
	    'score'         => 4
	  )
	  ),


	$psychose = array(
	  'title'         => "Psychose",
	  'release_date'  => new DateTime("2006-07-02"),
	  'directors'     => array("Alfred Hitchcock"),
	  'genres'        => array("Thriller", "Epouvante-horreur"),
	  'country'       => "Américain",
	  'synopsys'      => "Marion Crane en a assez de ne pouvoir mener sa vie comme elle l'entend. Son travail ne la passionne plus, son amant ne peut l'épouser car il doit verser une énorme pension alimentaire le laissant sans le sou... Mais un beau jour, son patron lui demande de déposer 40 000 dollars à la banque. La tentation est trop grande, et Marion s'enfuit avec l'argent.
	  <br>Très vite la panique commence à se faire sentir. Partagée entre l'angoisse de se faire prendre et l'excitation de mener une nouvelle vie, Marion roule vers une destination qu'elle n'atteindra jamais. La pluie est battante, la jeune femme s'arrête près d'un motel, tenu par un sympathique gérant nommé Norman Bates, mais qui doit supporter le caractère possessif de sa mère.
	  <br>Après un copieux repas avec Norman, Marion prend toutes ses précautions afin de dissimuler l'argent. Pour se délasser de cette journée, elle prend une douche...",
	  'review'        => array(
	    'score'         => 2
	  )
	);

function getMovie($title, $array){
	//Ici, avec la nouvelle structure,
	//rien de plus simple. On regarde si 
	//$title est une clé de $films, si oui 
	//et bah on retourne les infos du film, 
	//sinon on écrit un truc comme Film introuvable!
	return (array_key_exists($title, $array) ? $array[$title] : 'Film introuvable!');
	}

//Quand tu appelleras la fonction getMovie,
//quelque chose aura changé toutefois.
//Il te faudra passer l'array $films dans
//les paramètres, comme suit:
$film = getMovie($title, $films);


Il m'indique également une erreur:

Parse error: syntax error, unexpected ';', expecting ')' in /htdocs/travail/MyMovies/functions.php on line 45
0
pjdebray Messages postés 4 Date d'inscription jeudi 29 octobre 2015 Statut Membre Dernière intervention 29 octobre 2015
29 oct. 2015 à 20:26
J'ai finalement réglé mon problème de mon côté. Problème de variable ! ;)
0
Utilisateur anonyme
29 oct. 2015 à 22:09
haha! heureux que ça ait enfin fonctionné! ;)
bon courage pour la suite.
0