В каком формате я должен отправить свои formData в PHP Backend? - PullRequest
1 голос
/ 11 октября 2019

В моем компоненте Vue я использую axios.post для отправки данных в мой бэкэнд PHP

 const formData = new FormData()
 const form_data = JSON.stringify( this.form_fields ).toString()
 formData.append( 'form_data', form_data )
 axios.post( url, formData )
        .then(response => 
        console.log(response))

Данные в моих form_data выглядят так:

 [{"title": "any title", "content":"any content"}, {"title": "any title", "content":"any content"}]

В PHP строка выглядиткак

  [{\"title\": \"any title\", \"content\":\"any content\"}, {\"title\": \"any title\", \"content\":\"any content\"}]

Я удаляю \ "с помощью str_replace, а затем отделяю строку для сохранения в моем бэкэнде.

К сожалению, если мой текст содержит разрывы строк, содержимое не может быть сохранено.

Как я могу отправить данные в php, ничего не потеряв? Также информация в формате html не сохраняется в моей базе данных.

Как должна выглядеть строка?

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Строка JSON выглядит просто отлично и не требует изменений. Помните, что на этом шаге разрывы строк HTML <br/> не преобразуются в \n.

Проблема заключается в стороне PHP, где вы заменяете \ на строку str_replace, которая, вероятно, также приведет к путаницевверх по новой строке \n символов.

Попробуйте правильно десериализовать строку JSON в php:

$decoded = json_decode($jsonString);

Попробуйте получить значения из массива $decoded. (Они должны быть в порядке, также с переносами строк.)

Ссылка: https://www.php.net/manual/en/function.json-decode.php

0 голосов
/ 12 октября 2019

У меня была функция, управляющая строкой

 function get_serialized_string( $data ) {
     $post = str_replace( '\"', '"', $data );
     $post = str_replace('<p><br></p>', '', $post );
     $post = str_replace( '\n', '"', $post );
    return serialize( json_decode( ( $post ) ) );
 }

, но у меня все еще есть проблема с сохранением содержимого.

, если моя текстовая область содержит ссылку, которая имеет форматированный цвет, например,rgba (0,0,0, 2,5), чем он вернет ноль.

мои данные axios в заголовке

 [{\"name\":\"Stanley\",\"email\":\"stan@stan.de\",\"description\":\"<p>Lorem ipsum dolor sit amet, <span style=\\\"color: rgb(230, 0, 0);\\\">consetetur sadipscing elitr,</span> sed diam nonumy eirmod tempor invidunt ut labore et&nbsp;</p><p><br></p>\",\"website\":\"https://test.de\"}]

как мне перевести строку, которая выглядит .i выглядит так:

 a:1:{i:0;O:8:"stdClass":4:{s:4:"name";s:7:"Stanley";s:5:"email";s:12:"stan@stan.de";s:11:"description";s:83:"<p>Lorem ipsum dolor sit amet, sed diam nonumy eirmod tempor invidunt ut labore</p>";s:7:"website";s:15:"https://test.de";}}

это будет работать, если я не отформатирую цвет текста

0 голосов
/ 11 октября 2019

Вместо этого:

const formData = new FormData()
const form_data = JSON.stringify( this.form_fields ).toString()
formData.append( 'form_data', form_data )

Вместо этого сделайте это:

var form = $("#formId")[0]; //Select your form with, say, id='formId'
var formData = new FormData(form);

Чтобы получить значения POSTed в PHP, вы можете перебрать массив POST,или получите их индивидуально. Например:

$something = $_POST['formElementName']; //formElementName is the name attribute of the element in your form
...