【问题标题】:Adding Data to a MySQL Database from an HTML Form从 HTML 表单向 MySQL 数据库添加数据
【发布时间】: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();

提前致谢

【问题讨论】:

标签: php html mysql forms


【解决方案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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-03-29
            • 2021-10-14
            • 1970-01-01
            • 2014-04-30
            • 1970-01-01
            • 2015-12-30
            • 2019-01-12
            相关资源
            最近更新 更多