Я хочу сохранить дополнительную информацию перед отправкой полного заказа в Paypal. Для каждого элемента я создал один столбец в моей базе данных MySQL, где я хочу его сохранить. Теперь я решил сохранить его как массив, который я могу прочитать позже для создания страницы PHP. Дополнительные поля берутся из полей формы ввода.
Используя массив, могу ли я быть уверенным в том, чтобы не смешивать информацию?
Вы можете сохранить массив, используя serialize
/ unserialize
. С этим решением они не могут быть легко использованы с других языков программирования, поэтому вы можете вместо этого использовать json_encode
/ json_decode
(что дает вам широко поддерживаемый формат). Избегайте использования implode
/ explode
для этого, так как вы, вероятно, окажетесь с ошибками или недостатками безопасности.
Обратите внимание, что это делает вашу таблицу ненормированной, что может быть плохой идеей, поскольку вы не можете легко запросить данные. Поэтому внимательно рассмотрите это, прежде чем идти вперед. Может вам нужно запросить данные для статистики или иным образом? Существуют ли другие причины для нормализации данных?
Кроме того, не сохраняйте исходный массив $_POST
. Кто-то может легко создать свою собственную веб-форму и опубликовать данные на вашем сайте, тем самым отправив действительно большую форму, которая занимает много места. Сохраните те поля, которые вы хотите, и убедитесь, что они проверяют данные перед сохранением (поэтому вы не получите недопустимые значения).
То, как это делается, – это сериализация массива, что означает «создание из него строки». Чтобы лучше понять это, посмотрите на это:
$array = array("my", "litte", "array", 2); $serialized_array = serialize($array); $unserialized_array = unserialize($serialized_array); var_dump($serialized_array); // gives back a string, perfectly for db saving! var_dump($unserialized_array); // gives back the array again
Используйте функцию PHP serialize()
для преобразования массивов в строки. Эти строки могут быть легко сохранены в базе данных MySQL. Используя unserialize()
они могут быть снова преобразованы в массивы, если это необходимо.
Чтобы преобразовать любой массив (или любой объект) в строку с помощью PHP, вызовите функцию serialize:
$array = array( 1, 2, 3 ); $string = serialize( $array ); echo $string;
$ string теперь будет содержать строчную версию массива. Выходной код приведенного выше кода выглядит следующим образом:
a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}
Чтобы преобразовать обратно из строки в массив, используйте unserialize:
// $array will contain ( 1, 2, 3 ) $array = unserialize( $string );
<?php $myArray = new array('1', '2'); $seralizedArray = serialize($myArray); ?>