Я пытаюсь вставить значения параметра выбора в свою базу данных с помощью Ajax, но он будет продолжать вставлять в базу данных «0», а не фактическое значение, или будет возвращаться как «нулевое» значение. Однако я могу успешно вставить значение опции выбора без кода Ajax. Но я могу вставлять значения, используя поле ввода текста с кодом Ajax. Значения name
для моего выбора и ввода текста одинаковы (поскольку они оба должны вставлять одни и те же данные в базу данных). Когда опция выбора скрыта, текстовый ввод вставит свое значение в базу данных и наоборот. Итак, мой главный вопрос: как мне получить фактическое значение для параметра выбора, которое будет вставлено в базу данных (потому что все, что он вставляет, равно «0» или возвращается с ошибкой «null»)?
Это html для формы, которая включает в себя опцию выбора и поле ввода текста, которые оба имеют атрибут name = "toctquant"
:
<form method = "post" action = "tocarthand.php?strid=<?php echo $prodtab->strid; ?>&prodid=<?php echo $prodtab->prodid; ?>" id = "toctform">
<select name = "toctquant" id = "quantsel" class = "qinp">
<?php $q = $prodtab->quant; ?>
<?php for ($q = 1; $q <= 10; $q++): ?>
<option value = "<?php echo $q; ?>"><?php echo $q; ?></option>
<?php endfor; ?>
<?php if ($q > 10): ?>
<option value = "<?php echo $q; ?>"><?php echo $q; ?>+</option>
<?php endif; ?>
</select>
<input type = "text" name = "toctquant" class = "inphid qinp">
<button type = "submit" name = "tocartbut" id = "tocartbut">Add to Cart</button>
</form>
<div id = "result"></div>
Это код Ajax, с которым у меня проблемы. Он будет отправлять значение только для ввода текста, но не для значения параметра выбора:
$("#toctform").submit(function(e) {
var data = $("#toctform").serialize();
$.ajax({
data: data,
type: "post",
url: "tocarthand.php",
success: function(data){
alert("Data Save: " + data);
}
});
});
Обновлено: включен php-код для файла tocarthand.php
$strid = (int)$_GET['strid'];
$prodid = (int)$_GET['prodid'];
$toctprodid = (int)$_GET['prodid'];
$toctuserid = $_SESSION['userid'];
$toctquant = $_POST['toctquant'];
$stmt = $conn->prepare("INSERT INTO tocart (toctprodid, toctuserid, toctquant) VALUES (?, ?, ?)");
$stmt->bind_param("iii", $toctprodid, $toctuserid, $toctquant);
$stmt->execute();
$stmt->close();
header('Location: itempage.php?strid='.$strid.'&prodid='.$prodid.'&insert=success');
$conn->close();
@tim хорошо включил php-файл и код
ваша публикация из ajax, поэтому ее $_POST в php, а не $_GET
@tim Два (int)$_GET['strid']
и (int)$_GET['prodid']
не предназначены для публикации в базе данных. Это просто переменные $_GET из адреса ссылки, которые нужно вставить в файл header()
.
$toctprodid = (int)$_GET['prodid'];
но в URL-адресе, вызываемом ajax, нет prodid=
.
@chemdol, когда поле выбора скрыто, а если нет, то скройте ввод. И скрыто php или js? Это решит вашу проблему.
@tim хорошо, спасибо, что указали на одну ошибку, но у меня все еще есть проблемы с вставленным значением 0
@tim nm решил эту проблему, добавив скрытое поле ввода, но все равно спасибо за исправление этой ошибки :)
Опечатка вашего выбора имеет name=toctquant
, но <input type = "text" name = "toctquant">
имеет то же имя, который переопределяет выбранный ранее. Изменить другое имя.
Можно ли иметь несколько HTML-форм с одинаковым именем?
Вот почему я упомянул в своем описании, что они оба имеют одно и то же имя по какой-то причине. Я просмотрел это и обнаружил, что многие ответчики на StackOverflow пришли к выводу: «Да, вы можете иметь одно и то же поле name+value
для разных входных данных, и они все равно будут вставлены в базу данных без проблем». Я даже пробовал это сам без кода Ajax, и это сработало. Итак, основываясь только на этом выводе, это не будет «опечаткой», не так ли? Если только это не проблема только Ajax, где все поля name+value
ДОЛЖНЫ быть уникальными.
В html5 запрещено иметь одно и то же имя в одной коллекции форм, кроме переключателей.
Но вы имеете в виду HTML-формы. Моя проблема связана со значениями Выбрать и Вход. Согласно этому ответу здесь, датированному после создания предоставленной вами ссылки:
(не закончил с этим последним вопросом): «Нет, атрибуты имени не обязательно должны быть уникальными. Вы можете иметь одинаковый атрибут имени в нескольких полях ввода»
опубликовано по этой ссылке stackoverflow.com/questions/25364924/…
Хорошо, я отметил ваш ответ как лучший, потому что обнаружил, что, добавив скрытое поле ввода, я смог вставить выбранное имя в базу данных. Большое спасибо за ваш совет!
Я рад вам помочь. К вашему сведению, давать одинаковые имена в одной форме - это всегда ад, но не сейчас :)
проблемы с php (скорее всего), поэтому вам нужно включить это