Значение Select-Option вставляется как «0» в базу данных вместо фактического значения

Я пытаюсь вставить значения параметра выбора в свою базу данных с помощью 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();

проблемы с php (скорее всего), поэтому вам нужно включить это

user10051234 28.05.2019 00:38

@tim хорошо включил php-файл и код

chemdol 28.05.2019 00:41

ваша публикация из ajax, поэтому ее $_POST в php, а не $_GET

user10051234 28.05.2019 00:48

@tim Два (int)$_GET['strid'] и (int)$_GET['prodid'] не предназначены для публикации в базе данных. Это просто переменные $_GET из адреса ссылки, которые нужно вставить в файл header().

chemdol 28.05.2019 00:55
$toctprodid = (int)$_GET['prodid']; но в URL-адресе, вызываемом ajax, нет prodid=.
user10051234 28.05.2019 01:05

@chemdol, когда поле выбора скрыто, а если нет, то скройте ввод. И скрыто php или js? Это решит вашу проблему.

daremachine 28.05.2019 01:14

@tim хорошо, спасибо, что указали на одну ошибку, но у меня все еще есть проблемы с вставленным значением 0

chemdol 28.05.2019 01:34

@tim nm решил эту проблему, добавив скрытое поле ввода, но все равно спасибо за исправление этой ошибки :)

chemdol 28.05.2019 01:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Опечатка вашего выбора имеет name=toctquant, но <input type = "text" name = "toctquant"> имеет то же имя, который переопределяет выбранный ранее. Изменить другое имя.

Можно ли иметь несколько HTML-форм с одинаковым именем?

Вот почему я упомянул в своем описании, что они оба имеют одно и то же имя по какой-то причине. Я просмотрел это и обнаружил, что многие ответчики на StackOverflow пришли к выводу: «Да, вы можете иметь одно и то же поле name+value для разных входных данных, и они все равно будут вставлены в базу данных без проблем». Я даже пробовал это сам без кода Ajax, и это сработало. Итак, основываясь только на этом выводе, это не будет «опечаткой», не так ли? Если только это не проблема только Ajax, где все поля name+value ДОЛЖНЫ быть уникальными.

chemdol 28.05.2019 01:00

В html5 запрещено иметь одно и то же имя в одной коллекции форм, кроме переключателей.

daremachine 28.05.2019 01:03

Но вы имеете в виду HTML-формы. Моя проблема связана со значениями Выбрать и Вход. Согласно этому ответу здесь, датированному после создания предоставленной вами ссылки:

chemdol 28.05.2019 01:17

(не закончил с этим последним вопросом): «Нет, атрибуты имени не обязательно должны быть уникальными. Вы можете иметь одинаковый атрибут имени в нескольких полях ввода»

chemdol 28.05.2019 01:18

опубликовано по этой ссылке stackoverflow.com/questions/25364924/…

chemdol 28.05.2019 01:19

Хорошо, я отметил ваш ответ как лучший, потому что обнаружил, что, добавив скрытое поле ввода, я смог вставить выбранное имя в базу данных. Большое спасибо за ваш совет!

chemdol 28.05.2019 01:39

Я рад вам помочь. К вашему сведению, давать одинаковые имена в одной форме - это всегда ад, но не сейчас :)

daremachine 28.05.2019 01:42

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