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数据库表产生空白行的主要内容,如果未能解决你的问题,请参考以下文章
Ajax 无法正常工作。 PHP 无法在 SQL 中插入数据
将下拉列表中的文本值传输到其各自的数据库 ID - sql 插入和 php