【问题标题】:sending form data to mySQL using get使用 get 将表单数据发送到 mySQL
【发布时间】:2021-01-11 16:45:40
【问题描述】:

我想通过 php 使用 get 将用户输入的表单数据发送到 mysql。

  <form  action="formtosql.php" method="get">
  <div class="row">
  <div class="form-group col-md-4">
    <label for="001">Student name:</label>
    <input type="text" class="form-control" id="001" name="sname">
  </div>
  </div>
  
<div class="row">
<div class="form-group col-md-4">
    <label for="002">Status:</label>
    <input type="text" class="form-control" id="002" name="sstatus">
  </div>
</div>
 

  <button type="submit" class="btn btn-primary">Submit</button>
 
</form>

php 代码如下:

 <?php
    if ($_SERVER['REQUEST_METHOD'] == 'GET'){
        $name = $_GET['sname'];
        $stat = $_GET['sstatus'];
        
        
      
      // Connecting to the Database
      $servername = "localhost";
      $username = "root";
      $password = "";
      $database = "exam";

      // Create a connection
      $conn = mysqli_connect($servername, $username, $password, $database);
      // Die if connection was not successful
      if (!$conn){
          die("Sorry we failed to connect: ". mysqli_connect_error());
      }
      else{ 
       
        $sql = "INSERT INTO `estatus` (`name`, `status`, `date`) VALUES ('$name', '$stat', current_timestamp())";
        $result = mysqli_query($conn, $sql);

    
?>

在 php 中使用 get 时出现错误:

注意:未定义索引:C:\xampp\htdocs\helloworld\formtosql.php 中的 sname
注意:未定义索引:C:\xampp\htdocs\helloworld\formtosql.php 中的 sstatus

如果我使用 Post,则不会出现此错误。

【问题讨论】:

  • 如果您将数据插入到表中,您应该使用“POST”,而不是“GET”,因为您“发布”到数据库,而不是“获取”数据库。既然这对您有用,为什么要尝试切换到“GET”?您还需要查看准备好的语句,而不仅仅是将字符串连接到查询中。此外,如果日期始终是当前时间戳,请在表定义中将其设置为默认值,并将其完全排除在查询之外。
  • 我见过很少的帖子使用 GET() 来发送或打印数据。所以这有点令人困惑,因为我只是一个初学者:(
  • 我不明白为什么要使用 GET 方法而不是 POST,因为 POST 方法比 GET 更安全地向服务器发送数据。
  • 我只是想知道使用 GET 时出现此错误的原因
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!

标签: php html mysql post get


【解决方案1】:

我假设您在同一脚本中同时生成表单和处理提交的值?

如果我使用 Post,则不会出现此错误。

您检查了 REQUEST_METHOD 以确定您是否正在处理该案例,即表单已提交。

当您在表单上使用method="post" 时,您可以这样做 - 加载包含表单的页面的初始请求用于制作 GET 方法,提交它将使用 POST - 因此可以区分这两种情况那个方法。

但是如果你使用method="get",那么这两个请求——一个用于初始加载页面的请求和一个用于提交表单数据的请求——是相同的方法,因此你不能再使用它了,区分这两种情况。

如果您给提交按钮一个名称,那么您可以检查(使用 isset/empty)是否存在相应的参数 - 并使用它来确定您正在处理两种情况中的哪一种。


但正如 cmets 中已经提到的 - 对于在服务器端创建数据的请求,您通常应该使用 POST,而不是 GET。在When do you use POST and when do you use GET? 下你可以找到更深入的解释。

【讨论】:

  • 哦,好点,我从来没想过。因此,消息不是来自表单提交时,而是来自提交之前绘制的时间。
猜你喜欢
  • 1970-01-01
  • 2013-01-02
  • 2011-07-02
  • 2017-01-05
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多