Я пытаюсь добавить значения в массив в php через форму HTML и скрытые поля. Сначала я получаю значения из записей в моем php-файле, а затем добавляю значения в массив, как это делается в index.php:
<?php
$gamelist = filter_input(INPUT_POST, 'gamelist',FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$key = filter_input(INPUT_POST, 'gameID', FILTER_VALIDATE_INT);
$team1 = filter_input(INPUT_POST, 'teamID1', FILTER_VALIDATE_INT);
$team2 = filter_input(INPUT_POST, 'teamID2', FILTER_VALIDATE_INT);
$date = filter_input(INPUT_POST, 'date');
if ($gamelist === NULL) {
$gamelist = array();}
if ($new_game === NULL) {
$new_game = array();}//get action variable from POST
$action = filter_input(INPUT_POST, 'action');
//initialize error messages array
$errors = array();
//process
switch( $action ) {
case 'Add Game':$new_game[] = $date;
$new_game[] = $team1;
$new_game[] = $team2;$gamelist[] = $new_game;
break;
case 'Delete Game':
$game_index = filter_input(INPUT_POST, 'gameID', FILTER_VALIDATE_INT);
if ($game_index === NULL || $game_index === FALSE) {
$errors[] = 'The game cannot be deleted.';
} else {
unset($gamelist[$game_index]);
$gamelist = array_values($gamelist);
}
break;}
include('gamelist.php');
?>
Вывод для этого кода это ниже. Это именно то, что я хочу.
Array
(
[0] => Array
(
[0] => 2/30/15
[1] => 1
[2] => 2
)
)
Однако, когда добавляется другая игра (когда в $ gamelist [] добавляется другой массив), массив забывает предыдущий массив и превращается в этот:
Array
(
[0] => Array
[1] => Array
(
[0] => 5/17/2015
[1] => 2
[2] => 3
)
)
Мне нужно массив [0], чтобы все еще иметь значения, которые я передал ему раньше.
Есть идеи???
Ниже приведена полная сторона html (gamelist.php) со скрытыми полями:
<?php
require('../database.php');
$query = 'SELECT * FROM team_table';
$statement = $db->prepare($query);
$statement->execute();
$teams = $statement->fetchAll();
$team = $statement->fetch();
$statement->closeCursor();
?><!DOCTYPE html>
<html>
<head>
<title>RP LL Game List</title><link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body>
<header>
<h1>RP LL Game List</h1>
</header>
<main><!-- Dumping gamelist and errors arrays -->
<h2>Errors:</h2>
<?php if (count($errors) == 0) : ?>
<p>There are no errors</p>
<?php else: ?>
<ul>
<?php foreach($errors as $error) : ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?></ul>
<?php endif; ?><h2>Games:</h2>
<?php if (count($gamelist) == 0) : ?>
<p>There are no games in the game list.</p>
<?php else: ?>
<ul>
<?php print_r($gamelist); ?>
<?php foreach($gamelist as $game) : ?>
<li><?php print_r($game); ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<br>
<!-- Add Game Form -->
<h2>Add Game:</h2>
<form action="." method="post" >
<?php foreach( $gamelist as $game ) : ?>
<input type="hidden" name="gamelist[]" value="<?php echo $game; ?>">
<?php print_r($gamelist); ?>
<?php endforeach; ?>
<label>Team1:</label>
<select name="teamID1">
<?php foreach ($teams as $team) : ?>
<option value="<?php echo $team['team_id']; ?>">
<?php echo $team['name_col']; ?>
</option>
<?php endforeach; ?>
</select><br>
<label>Team2:</label>
<select name="teamID2">
<?php foreach ($teams as $team) : ?>
<option value="<?php echo $team['team_id']; ?>">
<?php echo $team['name_col']; ?>
</option>
<?php endforeach; ?>
</select><br>
<label>Date:</label>
<input type="text" name="date"><input type="submit" name="action" value="Add Game">
</form>
<br><?php if (count($gamelist) > 0 && empty($game_to_modify)) : ?>
<h2>Select game:</h2>
<form action="." method="post" >
<?php foreach( $gamelist as $key => $game ) : ?>
<input type="hidden" name="gamelist[]"value="<?php print_r($game[$key]); ?>">
<?php endforeach; ?><label>Game:</label>
<select name="gameID">
<?php foreach( $gamelist as $key => $game ) : ?>
<option value="<?php echo $game[$key]; ?>">
<?php echo $game; ?>
</option>
<?php endforeach; ?>
</select><input type="submit" name="action" value="Delete Game"></form>
<?php endif; ?></main>
</body>
</html>
каждый раз, когда вы отправляете форму, значения не будут заполнены, вместо этого попробуйте использовать сессию, чтобы вы могли иметь предыдущие значения в желаемом массиве
Других решений пока нет …