【问题标题】:Select-Option value inserting as "0" to database instead of actual valueSelect-Option 值作为“0”插入数据库而不是实际值
【发布时间】:2019-10-13 10:39:42
【问题描述】:

我正在尝试使用 Ajax 将选择选项值插入到我的数据库中,但它会继续向数据库中插入“0”而不是实际值,否则它将返回为“null”值。但是,我能够在没有 Ajax 代码的情况下成功插入选择选项值。但是我可以使用带有 Ajax 代码的文本输入字段来插入值。我的选择和文本输入的name 值是相同的(因为它们都应该将相同的数据插入数据库)。隐藏选择 - 选项时,文本输入将将其值插入数据库并使Visea。所以我的主要问题是,如何获取要插入数据库的选择选项的实际值(因为它插入的都是“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);
        }
    });
});

编辑:包含文件tocarthand.php的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 上(很可能),所以你需要包含它
  • @tim ok 包含 php 文件和代码
  • 你从 ajax 发帖,所以它在 php 中的 $_POST 不是 $_GET
  • @tim 这两个(int)$_GET['strid'](int)$_GET['prodid'] 不用于发布到数据库中。它们只是来自要插入到header() 的链接地址的 $_GET 变量。
  • $toctprodid = (int)$_GET['prodid']; 但是ajax调用的url里面没有prodid=

标签: php jquery ajax


【解决方案1】:

你的选择有name=toctquant,但&lt;input type="text" name="toctquant"&gt;同名,它覆盖了之前的选择。更改其他名称。

Is it OK to have multiple HTML forms with the same name?

【讨论】:

  • 这就是为什么我在描述中提到它们都具有相同名称的原因。我查了一下,发现 StackOverflow 上的许多回答者总结说:“是的,你可以为不同的输入使用相同的 name+value 字段,并且它们仍然可以毫无问题地插入到数据库中。”我什至在没有 Ajax 代码的情况下自己尝试过这个,它确实有效。因此,仅基于该结论,它就不会是“错字”,对吗?除非这是一个仅限 Ajax 的问题,其中所有 name+value 字段必须是唯一的。
  • 不允许 html5 中的 No 在一个表单集合中具有相同的名称,但单选按钮除外。
  • 但是你指的是 HTML 表单。我的问题是 selectinput 值。根据您提供的链接创建后的此答案:
  • (没有完成最后一个问题):“不,名称属性不需要是唯一的。您可以在多个输入字段中具有相似的名称属性”
猜你喜欢
  • 2018-12-03
  • 2021-05-05
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
相关资源
最近更新 更多