从 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,因为它们已被弃用,请切换到 PDOmysqli

此外,您已准备好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 数据库添加数据的主要内容,如果未能解决你的问题,请参考以下文章

python向数据库添加数据(添加一条数据)

我想向子表单添加一条新记录,但它总是向主表单添加一条新记录

怎么用java向数据库中添加和删除数据?

如何向Map中添加数据

java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决

java怎么从数据库中查询数据并输出