无法获取表单以插入数据

Posted

技术标签:

【中文标题】无法获取表单以插入数据【英文标题】:Can´t get form to insert data 【发布时间】:2018-05-05 10:33:09 【问题描述】:

我正在为插入 mysql 数据库的表单而苦苦挣扎。填写表格后,我收到以下错误消息

bad query: INSERT INTO gjenstand(idselger,bilde,beskrivelse,idkategori,minstepris,utlopsdato) VALUES (1,23.jpeg,TVbord,,950,2018-06-23)

没有插入的信息有如下代码:

$conn=mysqli_connect ("localhost","root","root", "bruktbutikk");
    $sql1="select beskrivelse from kategori";
$datasett1 = $conn->query($sql1);


if(isset($_POST["submit"]))

    $sql =sprintf("INSERT INTO gjenstand(idselger,bilde,beskrivelse,idkategori,minstepris,utlopsdato) VALUES (%s,%s,%s,%s,%s,%s)",

                  $tilkobling->real_escape_string($_POST["lstnavn"]),
                  $tilkobling->real_escape_string($_POST["txtbilde"]),
                  $tilkobling->real_escape_string($_POST["txtbeskrivelse"]),
                  $tilkobling->real_escape_string($_POST["lstkategori"]),
                  $tilkobling->real_escape_string($_POST["txtminste_pris"]),
                  $tilkobling->real_escape_string($_POST["txtutlopsdato"])

         );

         $tilkobling->query($sql,$sql1) or die ("bad query:$sql");

这里是缺少值的表单的代码:

 <form method="post">
        <div>
        <label for="lstkategori">Kategori:</label>
        <select name="lstkategori" id="lstkategori">
         <?php while($rad=mysqli_fetch_array($datasett1))  ?>
             <option value="<?php echo $rad["idkategori"]; ?>"> <?php echo $rad["beskrivelse"]; ?>
             </option>
            <br><br><br>
         <?php  ?> <br><br>
         </select>

提前非常感谢您抽出时间帮助我

【问题讨论】:

如果您将值作为参数传入,则无需转义。 您不能将两个查询传递给$tilkobling-&gt;query() 根据您帖子顶部的错误查询行,看起来表单上的至少一个值没有完成,因为您根本没有检查它是否生成的 SQL 查询是否无效(请注意值部分中的 2 个逗号)。 什么是$tilkbling,不应该是$conn吗? 我必须将 $tilkobling 和 $conn 都作为定义的变量 【参考方案1】:

您需要在包含字符串的值周围加上引号。

$sql =sprintf("INSERT INTO gjenstand(idselger,bilde,beskrivelse,idkategori,minstepris,utlopsdato) VALUES (%s,'%s','%s','%s',%s,'%s')",

但最好改用参数化查询:

$sql = "INSERT INTO gjenstand(idselger,bilde,beskrivelse,idkategori,minstepris,utlopsdato) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("isssis", $_POST["lstnavn"], $_POST["txtbilde"], $_POST["txtbeskrivelse"], $_POST["lstkategori"], $_POST["txtminste_pris"], $_POST["txtutlopsdato"]);
$stmt->execute();

【讨论】:

非常感谢您的回复@Barmar,不幸的是它仍然没有插入到第 4 列“idkategori”中。错误代码仍将第 4 列的值显示为空白。但无论如何还是非常感谢你。至于第二个建议,我从未尝试过参数化查询,所以我不知道应该如何使用它。我需要把 $stmt 变量放在某个地方吗? 第4列是空白的,因为变量的值是空白的。 我已经向您展示了您需要用于参数化查询的确切代码。它替换了if (isset($_POST['submit'])) 之后的所有内容 谢谢,我得到了它的工作,尽管我仍然没有在我的 idkatergori 列中插入任何值。我怀疑该特定项目的表单本身可能有问题。将其从列表更改为 txt 后,我​​成功输入了该值,但这显然对用户不太友好,因为用户需要知道不同的类别 ID 编号。 您是否查看了 html 源代码以确保将正确的值放入选项的 value="" 中?

以上是关于无法获取表单以插入数据的主要内容,如果未能解决你的问题,请参考以下文章

无法将数据表插入表单(访问项目)

用servlet收集表单数据,然后怎么将收集到的数据插入到数据库中

我如何以表格形式查看 ms 访问表单中的所有插入数据

我无法将数据插入数据库

Ajax 无法正常工作。 PHP 无法在 SQL 中插入数据

我无法将表单信息插入我的数据库中,我不断收到 404 错误