MySQL — PHP сохранить массив в вопросе SQL

Я неоднократно использовал форму и страницу сохранения, чтобы сохранить ответы пользователей в моей базе данных SQL. Первоначально я сохранял ответы в массив, и как только цель была достигнута, я использовал цикл, чтобы передать все значения массива в базу данных, код страницы обновления выглядел так:

unset($_SESSION['myanswers']);

$_SESSION['myanswers'] = array();
$_SESSION['myanswers']=array(
"File"=>$_POST['file'],
"Rating"=>$_POST['like'],
"Repetitions"=>$_SESSION['reps'],
"degradation"=>$_POST['degradation']
);


$f1=$_SESSION['myanswers']['File'];
$r1=$_SESSION['myanswers']['Rating'];
$r2=$_SESSION['myanswers']['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$_SESSION['myanswers']['degradation'];


array_push($_SESSION['answers'], $_SESSION['myanswers']);
if($_SESSION['counter']==goal){

require 'connect.php';

foreach( $_SESSION['answers'] as $key => $obj)
{



$f1=$obj['File'];
$r1=$obj['Rating'];
$r2=$obj['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$obj['degradation'];

$sql = "INSERT INTO `array`(`id`, `file`, `rating`, `repetitions`, `degredation`) VALUES ('$the_id', '$f1', '$r1', '$r2', '$the_deg')";
mysql_query($sql);



}

header("Location: MyEndPage");
die();
}else{
header("Location: MyFormPage");
die();
}

Этот код работал нормально, но тогда мне нужно было сохранить все ответы сразу, а не тогда, когда цель была достигнута. Поэтому я изменил код на следующее:

unset($_SESSION['myanswers']);

$_SESSION['myanswers'] = array();
$_SESSION['myanswers']=array(
"File"=>$_POST['file'],
"Rating"=>$_POST['like'],
"Repetitions"=>$_SESSION['reps'],
"degradation"=>$_POST['degradation']
);


$f1=$_SESSION['myanswers']['File'];
$r1=$_SESSION['myanswers']['Rating'];
$r2=$_SESSION['myanswers']['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$_SESSION['myanswers']['degradation'];


require 'connect.php';
$sql = "INSERT INTO `array`(`id`, `file`, `rating`, `repetitions`, `degredation`) VALUES ('$the_id', '$f1', '$r1', '$r2', '$the_deg')";
mysql_query($sql);





if($_SESSION['counter']==goal){
header("Location: MyEndPage");
die();
}else{
header("Location: MyFormPage");
die();
}

Это когда проблема появилась, новые записи сохраняются всегда в том же месте, между старыми и новыми данными. Например, если до изменения я сохранил 5 записей, их порядок в массиве sql будет таким:

1, имя1, данные1
2, имя2, данные2
3, имя3, данные3
4, имя4, данные4
5, имя5, данные5

Добавление многократно новых записей с новым кодом было проблематичным, если, например, мы добавляем записи 6,7,8, они добавляются следующим образом:

1, имя1, данные1 | 1, имя1, данные1 | 1, имя1, данные1
2, имя2, данные2 | 2, имя2, данные2 | 2, имя2, данные2
3, имя3, данные3 | 3, имя3, данные3 | 3, имя3, данные3
4, имя4, данные4 | 4, имя4, данные4 | 4, имя4, данные4
5, имя5, данные6 | 5, имя5, данные6 | 5, имя5, данные6
6, имя6, данные5 | 7, имя7, данные7 | 8, имя8, данные8
——————— | 6, имя6, данные6 | 7, имя7, данные5
——————— | ——————— | 6, имя6, данные6

По какой-то причине вставка в не идет в конец массива sql, а является стеком в конце данных, собранных со старым кодом. Я попробовал некоторые изменения в коде, но ничего не получалось.

1

Решение

Базы данных не обязательно хранят новые записи в конце таблицы. Они также могут повторно использовать пространство, которое было освобождено предыдущим удалением.

Кроме того, порядок может показаться случайным по любой причине. Особенно, когда вы фильтруете (где предложение) или присоединяетесь к другим таблицам, это может повлиять на порядок, поскольку MySQL использует определенные индексы для фильтрации или объединения и часто возвращает фактические данные в этом порядке.

Независимо от причины, если вы запрашиваете данные, вы можете получить эти данные в произвольном порядке. Если вам нужна информация в определенном порядке, примените этот порядок, добавив ORDER BY пункт к вашему запросу.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector