PHP将数据插入SQL数据库表产生空白行

Posted

技术标签:

【中文标题】PHP将数据插入SQL数据库表产生空白行【英文标题】:PHP insert data into SQL Database Table produces blank row 【发布时间】:2019-03-22 14:32:14 【问题描述】:

我正在尝试将创建的表单中的数据插入到通过 ODBC 连接的 SQL Server 数据库表中。在我提交数据后,它显示为一个空白行,其中只有具有值的 ID。我对 php 非常陌生,并且从教程中获得了部分代码。这只是一个测试项目。代码如下:

<html>
<header>
<title>

</title>

</header>
<body>
<form action="\INSERTCODE.php" method="POST">
    <input type= "number" step="any" name="sepal_lengp" placeholder="Sepal Length">
    <input type= "number" step="any" name="sepal_widthp" placeholder="Sepal Width">
    <input type= "number" step="any" name="petal_lengp" placeholder="Petal Length">
    <input type= "number" step="any" name="petal_widthp" placeholder="Petal Width">
    <input type= "text" name="flower_type" placeholder="Flower Name">
    <button type="submit" name="submit" >INPUT VALUES</button>
</form>
<?php
    //display all results from table
    include("C:\Users\Dshop\Desktop\php-7.3.3\Server1\connection.php");
    $i=1;
    $sql = "SELECT * FROM dbo.textcsv";
    $result = odbc_exec( $connection, $sql );
    while($all =odbc_result_all($result,$i) )
        echo $all;





?>

</body>
</html>

这部分包括表格。文件名为 index1.php。

<?php

include("C:\Users\Dshop\Desktop\php-7.3.3\Server1\connection.php");

$sepal_lengp = $_POST['sepal_lengp']??'';
$sepal_widthp = $_POST['sepal_widthp']??'';
$petal_lengp = $_POST['petal_lengp']??'';
$petal_widthp = $_POST['petal_widthp']??'';
$flower_typep = $_POST['flower_typep']??'';



$dbinsert = "INSERT INTO dbo.textcsv (sepal_leng, sepal_width, petal_leng, petal_width, flower_type) VALUES ('$sepal_lengp', '$sepal_widthp', '$petal_lengp', '$petal_widthp', '$flower_typep');";

odbc_exec( $connection, $dbinsert ); 

HEADER("Location: ../index1.php?=success");

这部分向数据库表中插入数据,使用$_POST从index1.php中获取数据。该文件称为 INSERTCODE.php。 $connection 和 connection.php 是包含与 ODBC 的连接的文件。

对于这个测试项目,我使用了 Iris 数据集。我相信我必须使用 ODBC 和 SQL Server 而不是 mysql。 sql server是2014版本,php是7.33,使用node.js运行服务器。非常感谢您的帮助!

EDIT 我发现 $_POST 没有从表单中获取任何值。有什么想法吗?

EDIT 2 我已经尝试使用 $_REQUEST,检查 var_dump,并且做了所有这些事情,但我仍然一无所获。在去https://www.w3schools.com/php7/php7_forms.asp 获取示例表单后,我发现该示例也不起作用。现在我不确定问题是来自代码还是来自 php 配置之类的东西。需要帮助,请帮忙。

【问题讨论】:

Little Bobby 说 your script is at risk for SQL Injection Attacks.。即使escaping the string 也不安全! 不确定 type=number 和 step=any 是否真的适用于任何 webbrowser..以及它如何处理浮点数.... $sepal_lengp 在进入数据库之前包含什么? var_dump($sepal_lengp) @ChristianFelix imgur.com/a/wd9QPoI 当我从代码中删除步骤时,会发生这种情况。 $sepal_lengp 应该只是表单中的用户输入。编辑:不确定 var_dump 部分,你想让我回显它返回的内容吗?echo var_dump($sepal_lengp);给出字符串(0)“”。我有点新。 那么您的问题与您通过公式发布的值有关。你将数据发布到 INSERTCODE.php.... 你真的进入了这个文件吗?如果是,则 var_dump($_POST) 数据并检查这些值是否真的可用 @ChristianFelix 我刚刚检查并发现 INSERTCODE.php 没有从表单中获得任何值,有什么想法吗? 【参考方案1】:

您将变量视为字符串,通过查看您的数据库,您希望它们为浮点数。尝试在变量上使用 floatval( ) (http://php.net/manual/en/function.floatval.php) 以确保它们处于写入格式,这也将在某种程度上对它们进行清理,直到您将其更新为准备语句,以便您可以安全地绑定值并指定类型

【讨论】:

当我运行表单时,我在 $_POST(ex. $sepal_lengp = floatval($_POST['sepal_lengp']??'');) 上使用了 floatval(),现在它看起来像这样 @ 987654322@我现在要检查表单是否有任何数据。【参考方案2】:

将我的问题改写为“node.js 不获取发布数据”后,我发现了问题。 Node.js 需要额外的步骤来处理 POST 数据。因此,正因为如此,node.js 忽略了我的输入,并且 INSERTDATA.php 在没有任何数据的情况下运行以插入任何内容。原来问题的解决方案是使用 body-parser 或其他 solution from another question 之类的东西。

我采取的解决方案是卸载 node.js 并改用 XAMPP。它更容易使用。

还有人可以将我的问题标记为重复吗?

【讨论】:

以上是关于PHP将数据插入SQL数据库表产生空白行的主要内容,如果未能解决你的问题,请参考以下文章

通过 PDO 将 & 号插入 SQL 表

从 SQL 服务器动态地将单个记录插入到 MS 访问中

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

将下拉列表中的文本值传输到其各自的数据库 ID - sql 插入和 php

使用存储过程(SQL + C#)将数据插入一个表,然后将多行插入另一个表

为已经填充的表获取 SQL? PHPMyAdmin