从 HTML 表单向 MySQL 数据库添加数据
Posted
技术标签:
【中文标题】从 HTML 表单向 MySQL 数据库添加数据【英文标题】:Adding Data to a MySQL Database from an HTML Form 【发布时间】:2013-04-14 07:27:20 【问题描述】:大家好,我有一个用于将数据放入 mysql 数据库的基本 Web 表单,我创建了代码来报告我是否正确连接到我的数据库,并且在我测试它的表单完成后它就是这样,它似乎可以我期望什么,但是当我进入我的数据库时,实际上没有输入任何数据?我已经在本地和服务器上尝试过,两者都做同样的事情。这是我的两个 .php 表单供您查看,我在本地机器上使用 MAMP 进行测试,以防万一我做错了什么:
virtualWalkLog.php
<form action="hazardsform.php" method="POST" />
<p>ROUTE: <input type="text" name="ROUTE" /></p>
<p>ADDRESS: <input type="text" name="ADDRESS" /></p>
<p>LATITUDE: <input type="text" name="LATITUDE" /></p>
<p>LONGITUDE: <input type="text" name="LONGITUDE" /></p>
<p>HAZARD: <input type="text" name="HAZARD" /></p>
<p>RISK: <input type="text" name="RISK" /></p>
<input type="submit" value="Submit" />
</form>
hazardsform.php
<?php
define('DB_NAME', 'virtualWalkLog');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'localhost');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link)
die('Could not connect: ' . mysql_error());
$db_selected = mysql_select_db(DB_NAME, $link);
if (!$db_selected)
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
$value = $_POST['ROUTE'];
$value = $_POST['ADDRESS'];
$value = $_POST['LATITUDE'];
$value = $_POST['LONGITUTE'];
$value = $_POST['HAZARD'];
$value = $_POST['RISK'];
$sql = "INSERT INTO rmbhazards (ROUTE, ADDRESS, LATITUDE, LONGITUDE, HAZARD, RISK) VALUES ('$value', '$value2',
'$value3', '$value4', '$value5', '$value6')";
mysql_close();
提前致谢
【问题讨论】:
您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。 【参考方案1】:你没有执行你的query
,这就是为什么没有插入数据。尝试放置后
$sql = "INSERT INTO rmbhazards (ROUTE, ADDRESS, LATITUDE, LONGITUDE, HAZARD, RISK) VALUES ('$value', '$value2', '$value3', '$value4', '$value5', '$value6')";
这个
$result = mysql_query($sql);
所有值都在一个变量 $value
中,因此您最终会在表中得到所有相同的结果,因此请更改为适合您的查询
$value = $_POST['ROUTE'];
$value2 = $_POST['ADDRESS'];
$value3 = $_POST['LATITUDE'];
$value4 = $_POST['LONGITUTE'];
$value5 = $_POST['HAZARD'];
$value6 = $_POST['RISK'];
我还建议您停止使用 mysql_
api,因为它们已被弃用,请切换到 PDO
或 mysqli
此外,您已准备好mysql injection
。这里有一个很好的教程,可以向您解释所有相关内容 -> How can I prevent SQL injection in PHP?
【讨论】:
非常感谢您指出我的错误,在阅读了您的 cmets 之后,我设法让这个工作正常了,谢谢。 在我阅读 mysql_* 之前,我将使用一个表单,该表单不会对人们公开,只对一个人公开,但 sql 注入仍然可以找到我的表单?我的表格也在向我的数据库发送纬度和经度坐标,纬度发送完美,但纬度为负数,即 -6.12345 在我的数据库中显示为 0。任何想法为什么会发生这种情况? @futhark 是获取表单还是发布表单?【参考方案2】:您正在将所有输入字段值捕获到一个变量中。您需要执行 mysql_query 才能使其工作。改变这个:-
$value = $_POST['ROUTE'];
$value = $_POST['ADDRESS'];
$value = $_POST['LATITUDE'];
$value = $_POST['LONGITUTE'];
$value = $_POST['HAZARD'];
$value = $_POST['RISK'];
到:-
$value = $_POST['ROUTE'];
$value2 = $_POST['ADDRESS'];
$value3 = $_POST['LATITUDE'];
$value4 = $_POST['LONGITUTE'];
$value5 = $_POST['HAZARD'];
$value6 = $_POST['RISK'];
完成后,您需要调用 mysql_query($sql) 来执行查询。
【讨论】:
【参考方案3】:您将所有变量保持相同的名称
$value = $_POST['ROUTE'];
$value = $_POST['ADDRESS'];
$value = $_POST['LATITUDE'];
$value = $_POST['LONGITUTE'];
$value = $_POST['HAZARD'];
$value = $_POST['RISK'];
将它们更改为唯一 ID(如您在 sql 语句中引用的那样)
$value1 = $_POST['ROUTE'];
$value2 = $_POST['ADDRESS'];
$value3 = $_POST['LATITUDE'];
$value4 = $_POST['LONGITUTE'];
$value5 = $_POST['HAZARD'];
$value6 = $_POST['RISK'];
并更改您的查询语句以实际执行
$result = mysql_query("INSERT INTO rmbhazards (ROUTE, ADDRESS, LATITUDE, LONGITUDE, HAZARD, RISK) VALUES ('$value', '$value2',
'$value3', '$value4', '$value5', '$value6')");
【讨论】:
【参考方案4】:只需重命名:
$value = $_POST['ROUTE'];
$value2 = $_POST['ADDRESS'];
$value3 = $_POST['LATITUDE'];
$value4 = $_POST['LONGITUTE'];
$value5 = $_POST['HAZARD'];
$value6 = $_POST['RISK'];
【讨论】:
【参考方案5】:您在这里只为一个变量$value
赋值
$value = $_POST['ROUTE'];
$value = $_POST['ADDRESS'];
$value = $_POST['LATITUDE'];
$value = $_POST['LONGITUTE'];
$value = $_POST['HAZARD'];
$value = $_POST['RISK'];
应该是
$value = $_POST['ROUTE'];
$value2 = $_POST['ADDRESS'];
$value3 = $_POST['LATITUDE'];
$value4 = $_POST['LONGITUTE'];
$value5 = $_POST['HAZARD'];
$value6 = $_POST['RISK'];
同时调用mysql_query($sql);
来运行查询。
【讨论】:
【参考方案6】:快速浏览您的脚本后,您需要致电mysql_query($sql)
$sql = "INSERT INTO rmbhazards (ROUTE, ADDRESS, LATITUDE, LONGITUDE, HAZARD, RISK) VALUES ('$value', '$value2',
'$value3', '$value4', '$value5', '$value6')";
mysql_sql
查询将实际执行查询。
同样$value
应该是唯一的
$value = $_POST['ROUTE'];
$value2 = $_POST['ADDRESS'];
$value3 = $_POST['LATITUDE'];
-----
SUGGESTION 既然你刚刚开始..我建议你试试 mysql_* 只是概念
但是使用mysqli_*
或PDO
.. 你也应该知道sql注入
这里有一些教程可以帮助你
http://php.net/manual/en/security.database.sql-injection.php
http://php.net/manual/en/book.pdo.php
http://php.net/manual/en/book.mysqli.php
【讨论】:
以上是关于从 HTML 表单向 MySQL 数据库添加数据的主要内容,如果未能解决你的问题,请参考以下文章