AJAX сохраняет только первую букву ввода

У меня есть запрос AJAX, который сериализует данные формы и отправляет их в базу данных. Когда данные сериализуются, я вижу, что он отображает полный текст inout, но когда он сохраняет его в базе данных, он сохраняет только первую букву каждого слова?

Например, он будет сериализовать это для отправки:

splashText=Silver Glaze

но база данных сохранится, если строки нет:

S

если в представленной таблице есть несколько строк, данные фиксируются в базе данных следующим образом:

row 1 would = S row 2 would = i

Где как я пытаюсь получить вот так:

row 1 would = Silver Glaze row 2 would = Next option selected in the row and so on...

Сериализованные данные, отправленные POST, выглядят следующим образом (с 2 строками):

job_ref=3123&job_desciption=321&sil_cost=1&sil_cost_price=2.00&sub_total=119.75&item_name%5B%5D=1&item_quantity%5B%5D=1&item_unit%5B%5D=1&item_glass%5B%5D=110&item_splash%5B%5D=20&item_colour%5B%5D=-&item_HQuan%5B%5D=1&item_HDiam%5B%5D=2.25&item_CQuan%5B%5D=1&item_Total%5B%5D=56.25&item_cil_row%5B%5D=0.000001&item_name%5B%5D=1&item_quantity%5B%5D=1&item_unit%5B%5D=1&item_glass%5B%5D=110&item_splash%5B%5D=20&item_colour%5B%5D=-&item_HQuan%5B%5D=1&item_HDiam%5B%5D=7.5&item_CQuan%5B%5D=1&item_Total%5B%5D=61.50&item_cil_row%5B%5D=0.000001&glassText=6mm Toughened Extra Clear6mm Toughened Extra Clear&splashText=Rainbow SparkleRainbow Sparkle&holeText=22mm27mm

Код для сериализации формы:

  var form_data = $(this).serialize() + '&glassText=' + $('.item_glass').children("option").filter(":selected").text() + '&splashText=' + $('.item_splash').children("option").filter(":selected").text() + '&holeText=' + $('.item_HDiam').children("option").filter(":selected").text();

+ Предназначен для получения текстового значения ввода вместо значения. Я думаю, это может быть проблема, но я не знаю, как ее исправить?

Сообщение PHP:

 for($count = 0; $count < count($_POST["item_name"]); $count++)
 {
  $query = "INSERT INTO tbl_order_items
  (order_id, item_name, item_quantity, item_unit,item_glass, item_splash, item_HQuan,item_HDiam,item_CQuan,item_colour,item_total,user_id)
  VALUES (:order_id, :item_name, :item_quantity, :item_unit,:item_glass,:item_splash,:item_HQuan,:item_HDiam,:item_CQuan,:item_colour,:item_total,:user_id)";
  $statement = $connect->prepare($query);
  $statement->execute(
   array(
    ':order_id'   => $order_id,
    ':item_name'  => $_POST["item_name"][$count],
    ':item_quantity' => $_POST["item_quantity"][$count],
    ':item_unit'  => $_POST["item_unit"][$count],
    ':item_glass'  => $_POST["glassText"][$count],
    ':item_splash'  => $_POST["splashText"][$count],
    ':item_HQuan'  => $_POST["item_HQuan"][$count],
    ':item_HDiam'  => $_POST["holeText"][$count],
    ':item_CQuan'  => $_POST["item_CQuan"][$count],
    ':item_colour'  => $_POST["item_colour"][$count],
    ':item_total'  => $_POST["item_Total"][$count],
    ':user_id'   => $user_id
   )
  );
 }
 $result = $statement->fetchAll();
 if (isset($result))
 {
  echo 'ok';
 }
}

Это сохраняемая динамическая таблица. Вот что такое счет.

Чтобы поместить контекст в динамическую таблицу, вот скриншот:

AJAX сохраняет только первую букву ввода:

Можете ли вы подтвердить и опубликовать здесь, какой текст вы получаете на php?

Himanshu Upadhyay 01.05.2018 12:54

Пожалуйста, предоставьте php-код.

T K 01.05.2018 12:55

отредактировано с помощью кода php

Chris Campbell 01.05.2018 12:55
$_POST["item_name"], скорее всего, является строкой, а не массивом. Таким образом, выполнение $string[0] вернет первую букву $string.
blex 01.05.2018 12:56

@blex это работает для всех других значений, кроме строковых значений. Все остальные плавают

Chris Campbell 01.05.2018 12:59

Можете ли вы опубликовать пример значения для вашей переменной JS form_data, чтобы мы могли воспроизвести проблему и поиграть с ней?

blex 01.05.2018 13:01

Если вы отправляете splashText=Silver Glaze, тогда $_POST["splashText"] действительно является строкой. Таким образом, $_POST["splashText"][$count] будет одним символом из этой строки.

David 01.05.2018 13:03

Это работает, если вы уберете это, но теперь при сохранении они сохраняются в виде большой строки в каждой строке. Есть ли способ сохранить каждую отдельную строку, как это делает [$ count]?

Chris Campbell 01.05.2018 13:17

@ChrisCampbell: Непонятно, что вы имеете в виду. Какие фактические данные отправляются на сервер? Какие изменения вы внесли в код на стороне сервера после того, как задали вопрос? Что не так? Приведите минимальный, но полный пример проблемы, о которой идет речь.

David 01.05.2018 13:18

Таким образом, в настоящее время с ': item_splash' => $ _POST ["splashText"] [$ count] он отправляет только первую букву каждой строки и сохраняет ее как несколько разных строк в базе данных. Без [$ count] каждая строка - это данные, введенные в каждую строку. Например: если в таблице введены 2 строки с splashText [1] = 123 и splashText [2] = 345, база данных будет хранить 123345 в каждой строке, но должна сохранить строку 1 как 123 и строку 2 как 345.

Chris Campbell 01.05.2018 13:27

@ChrisCampbell: Как могут splashText [1] = 123 и splashText [2] = 345 когда-либо быть правдой, если splashText - это строка "Silver Glaze"? Вам нужно будет представить полный и ясный пример проблемы в вопросе выше. В настоящее время за вашими расплывчатыми описаниями в комментариях трудно следить, и они не имеют особого смысла. Покажите данные, отправляемые на сервер, код на стороне сервера, сохраняющий эти данные, полученные сохраненные данные и конкретно укажите, какие результирующие данные неверны.

David 01.05.2018 13:34

Я обновил сообщение настолько точным описанием, насколько смог, и включил снимок экрана с фактической таблицей и сериализованными данными формы.

Chris Campbell 01.05.2018 15:06

используйте name = "item_name[]" (массив) в своей форме. доступ к нему в вашем php-скрипте, как этот $_POST["item_name"][$i] через цикл.

Sachi Tekina 02.05.2018 05:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
13
228
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы не предоставляете html-код, я предполагаю, что кнопка «Проверить цитату» является кнопкой отправки. Итак, попробуйте это:

меняться от

var form_data = $(this).serialize() + '&glassText=' + $('.item_glass').children("option").filter(":selected").text() + '&splashText=' + $('.item_splash').children("option").filter(":selected").text() + '&holeText=' + $('.item_HDiam').children("option").filter(":selected").text()

К:

var glassText = '';
$('.item_glass').each(function(){
    glassText+='&glassText[]='+$(this).find(":selected").text().replace(' ','+');
});

var splashText = '';
$('.item_splash').each(function(){
    splashText+='&splashText[]='+$(this).find(":selected").text().replace(' ','+');
});

var holeText = '';
$('.item_HDiam').each(function(){
    holeText+='&holeText[]='+$(this).find(":selected").text().replace(' ','+');
});

var form_data = $(this).serialize() + glassText + splashText + holeText; 

Другие вопросы по теме