【问题标题】:HTML Form > SQL > Google Map Display - Syntax + LogicHTML 表单 > SQL > Google 地图显示 - 语法 + 逻辑
【发布时间】:2015-05-01 16:36:02
【问题描述】:

我的想法是在 HTML 表单中填写条目,然后将信息保存到数据库 (phpmyadmin)。然后在谷歌地图上显示信息(导出)。

但由于语法和逻辑问题,它不起作用。

我的 HTML 表单:

<html>
<head></head>
<body>
    <form method="POST" action="../BackEnd/ShopSetup.php" name="Setup">
    <td>Name</td>
    <td>
        <input type="text" name="name"></td>
    </tr>
     <tr>
         <td>type</td>
         <td>
             <input type="varchar" name="type"></td>
     </tr>
    <tr>
        <td>Address</td>
        <td>
            <input type="text" name="address"></td>
    </tr>
    <tr>
        <td>Email</td>
        <td>
            <input type="email" name="email"></td>
    </tr>
    <tr>
        <td>Phone Number</td>
        <td>
            <input type="varchar" name="phone"></td>
    </tr>
    <tr>
        <td>longitude</td>
        <td>
            <input type="float" name="long"></td>
    </tr>
    <tr>
        <td>latitude</td>
        <td>
            <input type="float" name="lat"></td>
    </tr>
    <tr>
        <td>Opening Hour</td>
        <td>
            <input type="varchar" name="opening"></td>
    </tr>
    <tr>
        <td>Closing Hour</td>
        <td>
            <input type="varchar" name="closing"></td>
    </tr>
    <tr>
        <td>
            <input id="button" type="submit" name="submit" value="Setup"></td>

    </tr>
    <tr></tr>
    </form>
</body>
</html>

我在后端的 PHP 页面:

  1. ShopSetup.php

         <?php
    
    
         include ("../Connections/Connection.php");
    
    
    
         if (isset($_POST["submit"]))
      {
          $name = $_POST["name"];   
          $type = $_POST["type"];
          $address = $_POST["address"];
          $email = $_POST["email"];
          $phone = $_POST["phone"];
          $long = $_POST["long"];
          $lat = $_POST["lat"];
          $opening = $_POST["opening"];
          $closing = $_POST["closing"];
    
      $sql = "INSERT INTO locations (name, type, address, email, phone, long, lat, opening, closing)
              VALUES('$name', '$type', '$address', '$email', '$phone', '$long', '$lat', '$opening', '$closing')";
    
      $query = mysql_query($sql);
    
      if (!$query)
      {
          die ("Error : " .  mysql_error());
      }
      if(empty($name) || empty($type) || empty($address) || empty($email) || empty($phone) || empty($long) || empty($lat) || empty($opening) || empty($closing))
          {
          echo "You did not fill out the required fields.";
          die();  // Note this
          }
      echo "<center></center>";
      }
    
      ?>
             <h1> Your order is complete!</h1>
                    <p class="intro-text">You will see your shop on the map soon<br></p>
                    <center> 
    
      <h3> <a href="../index.php"> go to home page  </a></h3>
      </center>
    

但是当我提交表单时,我得到:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'long, lat, opening, closing) 附近使用的正确语法 VALUES('', '', '', '', '', '', '', ' ', '')' 在第 1 行

保存打开/关闭时间的最佳 HTML 属性是什么:周数、天数。小时、分钟、秒?

【问题讨论】:

  • 没有正当理由再使用mysql_* API @Misunderstood
  • stop using mysql_* functions。它们不再被维护并且是officially deprecated。改为了解prepared statements,并使用PDO
  • 我还是不明白是什么问题?我的地图正在从 phpmyadmin 数据库中导出信息并将其显示在地图上。但不是手动填写,而是用户应该将其填写为在数据库中存储信息的表单...所以我应该更改列名“长,纬度,关闭,打开”到别的东西? @误解
  • 这里不在美国,但您所遵守的计算机安全法规是否不要求您从不受支持的 PHP 版本升级?
  • 当然,这在一定程度上是合法的。这里的许多海报都无法控制他们的服务器@Misunderstood,我们已经开始看到效果an example where mysql_* functions are removed.。 PDO 没有 具有 MySQLi API 所遭受的漏洞,并且是通常推荐的。不过,将人们称为“SQL 语法纳粹”以提高人们对该问题的认识有点误导。

标签: php html sql forms syntax


【解决方案1】:

您应该在列名周围使用反引号 (`)。像这样:

$sql = "INSERT INTO locations (`name`, `type`, `address`, `email`, `phone`, `long`, `lat`, `opening`, `closing`)
      VALUES('$name', '$type', '$address', '$email', '$phone', '$long', '$lat', '$opening', '$closing')";

建议表名和列名使用反引号,但在使用保留关键字(如long)时是必需的。

查看this discussion了解更多信息。

关于您的第二个问题,请查看 HTML5 datetime 输入类型。请注意it is not supported by all browsers

【讨论】:

  • 我按照你告诉我的@nevos 做了,但我仍然遇到同样的问题... 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“名称”、“类型”、“地址”、“电子邮件”、“电话”、“lng”、“lat”、“opening”附近使用的正确语法, 'closure')' 在第 1 行和上面的每个变量旁边它说:“不要直接访问超全局 $_Post 数组
  • @Naz970:尝试回显您拥有的 SQL,然后直接在您的数据库中运行它(例如在控制台中)。要对其进行调试,请删除除一列之外的所有列,并查看它是否成功(或者至少如果错误发生更改,因为您可能违反了约束)。然后逐列添加,直到找到问题为止。也许你的一个字符串中有一个未转义的撇号?
猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2019-11-28
  • 1970-01-01
  • 2016-06-14
相关资源
最近更新 更多