Как сделать так, чтобы переменная $ _SESSION НЕ перезаписывалась

Так что с моим сайтом у меня проблема в том, что моя переменная $ _SESSION перезаписывается, когда я этого не хочу. По сути, как работает мой сайт:

  1. Пользователь вводит свой отзыв, используя форму ввода.
  2. Информация, которую они вводят, сохраняется в новой переменной.
  3. Эти переменные затем сохраняются в моей базе данных mysqli.
  4. Затем создается новая страница .php (каждый раз, когда пользователь делает обзор) и копирует файл ‘template.php’, который содержит базовый макет моего сайта.
  5. Затем, используя заголовок, пользователь перенаправляется в новый файл .php.
  6. Затем начинается сеанс и создаются переменные сеанса, которые равны новой переменной, созданной на шаге 2.
  7. Файл ‘template.php’ имеет базовый макет веб-страницы, а также переменные $ _SESSION, отображаемые на странице, чтобы пользователь мог видеть их обзор.

Проблема в том, что когда пользователь делает новый отзыв, все предыдущие обзоры имеют ту же информацию, что и новый обзор, потому что переменная $ _SESSION изменилась. Как сделать так, чтобы информация, отображаемая в предыдущих обзорах, не изменялась (и по-прежнему отображалась) при создании нового отзыва.
Код для шага 1-6 (не включает установление соединения с базой данных mysql):

       <p>Please leave blank any entries below that you don't know</p>
<p>Artist:</p>
<input type="text" name="artistbox">
<p>Featured Artists:</p>
<input type="text" name="featuresbox">
<p>Title:</p>
<input type="text" name="songbox">
<p>Album:</p>
<input type="text" name="albumbox">
<p>Choose a genre:</p>
<select name="genre">
<option value="Pop">Pop</option>
<option value="Hip-hop">Hip-hop</option>
<option value="RnB">RnB</option>
<option value="EDM">Electronic Dance Music</option>
<option value="Jazz">Jazz</option>
<option value="Blues">Blues</option>
<option value="Rock">Rock</option>
<option value="Punk-rock">Punk-rock</option>
<option value="Reggae">Reggae</option>
<option value="Classic">Classic</option>
<option value="Funk">Funk</option>
<option value="Soul">Soul</option>
</select>
<p>Rating:</p>
<select name="rating">
<option value="0.5">0.5</option>
<option value="1.0">1.0</option>
<option value="1.5">1.5</option>
<option value="2.0">2.0</option>
<option value="2.5">2.5</option>
<option value="3.0">3.0</option>
<option value="3.5">3.5</option>
<option value="4.0">4.0</option>
<option value="4.5">4.5</option>
<option value="5.0">5.0</option>
</select>
<p>Comments (1000 character limit):</p>
<textarea name="commentsbox" cols="60" rows="7"></textarea>
<br>
<input class="submitbutton" type="submit" value="Submit">

$artistbox = $_POST['artistbox'];
$featuresbox = $_POST['featuresbox'];
$songbox = $_POST['songbox'];
$albumbox = $_POST['albumbox'];
$genre = $_POST['genre'];
$rating = $_POST['rating'];
$commentsbox = $_POST['commentsbox'];
date_default_timezone_set('NZ');
$time = date('Y/m/d H:i:s');

$queryartist = "INSERT INTO `artist` (`ArtistsName`)
VALUES ('{$artistbox}')";
$queryfeatures = "INSERT INTO `features` (`Features`)
VALUES ('{$featuresbox}')";
$querysong = "INSERT INTO `SongName` (`SongName`)
VALUES ('{$songbox}')";
$queryalbum = "INSERT INTO `album` (`Album`)
VALUES ('{$albumbox}')";
$querygenre = "INSERT INTO `genre` (`Genre`)
VALUES ('{$genre}')";
$queryrating = "INSERT INTO `rating` (`Rating`)
VALUES ('{$rating}')";
$querycomments = "INSERT INTO `comments` (`Comments`)
VALUES ('{$commentsbox}')";
$querydate = "INSERT INTO `DateReviewed` (`DateReviewed`)
VALUES ('{$time}')";

$conn->query($queryartist);
$conn->query($queryfeatures);
$conn->query($queryalbum);
$conn->query($querygenre);
$conn->query($queryrating);
$conn->query($querycomments);
$conn->query($querydate);

if ($conn->query($querysong) === TRUE)
{
$last_id = $conn->insert_id;
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

$querylink = "INSERT INTO `link` (`link`) VALUES ('{$link}')";
$conn->query($querylink);
$newpage = fopen("form_$last_id.php", "w+");
copy ('template.php', "form_$last_id.php");
header("location: form_$last_id.php");
session_start();
$_SESSION["artist"]=$artistbox;
$_SESSION["features"]=$featuresbox;
$_SESSION["album"]=$albumbox;
$_SESSION["genre"]=$genre;
$_SESSION["rating"]=$rating;
$_SESSION["comments"]=$commentsbox;
$_SESSION["songbox"]=$songbox;
$_SESSION["time"]=$time;
exit ();

Код для шага 7 (извлекает из файла template.php не весь код):

session_start();
$artist = $_SESSION["artist"];
$features = $_SESSION["features"];
$album = $_SESSION["album"];
$genre = $_SESSION["genre"];
$rating = $_SESSION["rating"];
$comments = $_SESSION["comments"];
$song = $_SESSION["songbox"];
$time = $_SESSION["time"];

<p>
<?php
echo '<b>', 'By: ', '</b>'. $artist . ' ft. ' . $features .
'</br>';
echo '<i>' . $album . '</br>', '</br>', '</i>';
echo '<b>', 'Genre: ', '</b>' . $genre . '</br>', '</br>';
echo '<b>', 'Rating: ', '</b>' . $rating . '/5', '</br>',
'</br>';
echo '<b>', 'Comments: ', '</b>', '</br>', '</br>' .
$comments;
?>
</p>

0

Решение

Организуйте каждый обзор по его первичному ключу в переменной сеанса, в результате вы получите многомерный массив.

Когда пользователь пишет новый отзыв, вы уже сохраняете его в своей базе данных. После этого добавьте рецензию в переменную сеанса, используя ее pk. Вам также нужно будет сохранить первичный ключ песни в таблице ссылок.

session_start();
$querylink = "INSERT INTO `link` (`link`) VALUES ('{$link}')";
$conn->query($querylink);

$_SESSION['reviews'][$conn->insert_id]["artist"] = $artistbox;
$_SESSION['reviews'][$conn->insert_id]["features"] = $featuresbox;
$_SESSION['reviews'][$conn->insert_id]["album"] = $albumbox;
$_SESSION['reviews'][$conn->insert_id]["genre"] = $genre;
$_SESSION['reviews'][$conn->insert_id]["rating"] = $rating;
$_SESSION['reviews'][$conn->insert_id]["comments"] = $commentsbox;
$_SESSION['reviews'][$conn->insert_id]["songbox"] = $time;

Подумайте об изменении вашего подхода к дизайну и сохраните идентификатор песни в таблице ссылок. Когда пользователь щелкает песню, вы можете использовать song_id для запроса вашей базы данных и отображения всех обзоров этой песни.

Когда пользователь пишет рецензию на песню, вы сохраните рецензию в своей базе данных, включая $ song_id, и добавите ее в переменную сеанса. Что-то вроде ниже.

session_start();
$querylink = "INSERT INTO `link` (`link`,`song_id`) VALUES ('{$link}','{$song_id}')";
$conn->query($querylink);

$_SESSION['reviews'][$song_id][$conn->insert_id]["artist"] = $artistbox;
$_SESSION['reviews'][$song_id][$conn->insert_id]["features"] = $featuresbox;
$_SESSION['reviews'][$song_id][$conn->insert_id]["album"] = $albumbox;
$_SESSION['reviews'][$song_id][$conn->insert_id]["genre"] = $genre;
$_SESSION['reviews'][$song_id][$conn->insert_id]["rating"] = $rating;
$_SESSION['reviews'][$song_id][$conn->insert_id]["comments"] = $commentsbox;
$_SESSION['reviews'][$song_id][$conn->insert_id]["songbox"] = $songbox;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]