У меня есть запрос 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';
}
}
Это сохраняемая динамическая таблица. Вот что такое счет.
Чтобы поместить контекст в динамическую таблицу, вот скриншот:
Пожалуйста, предоставьте php-код.
отредактировано с помощью кода php
$_POST["item_name"]
, скорее всего, является строкой, а не массивом. Таким образом, выполнение $string[0]
вернет первую букву $string
.
@blex это работает для всех других значений, кроме строковых значений. Все остальные плавают
Можете ли вы опубликовать пример значения для вашей переменной JS form_data
, чтобы мы могли воспроизвести проблему и поиграть с ней?
Если вы отправляете splashText=Silver Glaze
, тогда $_POST["splashText"]
действительно является строкой. Таким образом, $_POST["splashText"][$count]
будет одним символом из этой строки.
Это работает, если вы уберете это, но теперь при сохранении они сохраняются в виде большой строки в каждой строке. Есть ли способ сохранить каждую отдельную строку, как это делает [$ count]?
@ChrisCampbell: Непонятно, что вы имеете в виду. Какие фактические данные отправляются на сервер? Какие изменения вы внесли в код на стороне сервера после того, как задали вопрос? Что не так? Приведите минимальный, но полный пример проблемы, о которой идет речь.
Таким образом, в настоящее время с ': item_splash' => $ _POST ["splashText"] [$ count] он отправляет только первую букву каждой строки и сохраняет ее как несколько разных строк в базе данных. Без [$ count] каждая строка - это данные, введенные в каждую строку. Например: если в таблице введены 2 строки с splashText [1] = 123 и splashText [2] = 345, база данных будет хранить 123345 в каждой строке, но должна сохранить строку 1 как 123 и строку 2 как 345.
@ChrisCampbell: Как могут splashText [1] = 123 и splashText [2] = 345 когда-либо быть правдой, если splashText
- это строка "Silver Glaze"? Вам нужно будет представить полный и ясный пример проблемы в вопросе выше. В настоящее время за вашими расплывчатыми описаниями в комментариях трудно следить, и они не имеют особого смысла. Покажите данные, отправляемые на сервер, код на стороне сервера, сохраняющий эти данные, полученные сохраненные данные и конкретно укажите, какие результирующие данные неверны.
Я обновил сообщение настолько точным описанием, насколько смог, и включил снимок экрана с фактической таблицей и сериализованными данными формы.
используйте name = "item_name[]"
(массив) в своей форме. доступ к нему в вашем php-скрипте, как этот $_POST["item_name"][$i]
через цикл.
Поскольку вы не предоставляете 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;
Можете ли вы подтвердить и опубликовать здесь, какой текст вы получаете на php?