单击按钮后使用 PHP 将 HTML 输入到 SQL 查询中

Posted

技术标签:

【中文标题】单击按钮后使用 PHP 将 HTML 输入到 SQL 查询中【英文标题】:HTML input into SQL query using PHP after a button click 【发布时间】:2019-12-26 10:17:27 【问题描述】:

我想通过 html 表单输入字段获取用户输入,然后将此输入发送到 SQL 查询。 我已经尝试了我搜索的方法,但没有选择任何值。 当我直接在 SQL 查询中给出值时,SQL 查询有效。

<body>
  <div class="testbox">
    <form action="train.php" method="POST">

      <div class="item">
        <div class="train-item">
          <p>Departure Station </p>
          <input type="text" name="depart" required />
        </div>

        <div class="train-item">
          <p>Arrival Station</p>
          <input type="text" name="arrive" required />
        </div>

      <div class="btn-block">
        <button type="submit" name="search" href="/">Search</button>
      </div>
  </div>
  </form>
  </div>

    <?php

    if(isset($_POST['search'])) // Fetching variables of the form which travels in URL
      $depart = $_POST["depart"];
      $arrive = $_POST["arrive"];
      $sql = "SELECT ttype.TyName, train.TraNo, a.StaName dsta, c.Time dtime ,b.StaName asta , d.Time atime 
                      FROM (((((ttype RIGHT JOIN train
                      ON ttype.TyNo=train.TyNo)
                      RIGHT JOIN pass c
                      ON train.TraNo=c.TraNo)
                      RIGHT JOIN station a
                      ON a.StaNo=c.StaNo)
                      RIGHT JOIN pass d
                      ON train.TraNo=d.TraNo)
                      RIGHT JOIN station b
                      ON b.StaNo=d.StaNo)      

                      WHERE c.Time < d.Time
                      AND a.StaName='.$depart' 
                      AND b.StaName='.$arrive' ";
            $result = mysqli_query($link, $sql) or die("can't reach" . mysqli_error( ));
            $rows = mysqli_num_rows($result);    
            $cols = mysqli_num_fields( $result); 

            $train_table = "";
            $train_table .= "This query has ". $rows ." data";
        $train_table .= ",and include". $cols ."columns";
        ?>

上面的代码显示“这个查询有0条数据,包括6列。

编辑: 感谢您帮助并告知我有关 SQL 注入的信息。 这是大学课程的学期项目。结果只会显示给我的同学和教授,我是唯一可以访问整个系统的人。再次感谢。

我发布自己的问题的原因是我不熟悉 PHP 或 HTTP 语言,也找不到我的代码的确切问题。换句话说,我不确定问题出在 HTTP 部分还是 PHP 部分。

【问题讨论】:

分享你的数据库结构和你需要的输出。只有这样我们才能为您提供任何建议 请检查我的答案,让我知道您的查询现在是否有效? 这能回答你的问题吗? How to include a PHP variable inside a MySQL statement @Dharman 感谢您提供信息。我发布自己的问题的原因是我不熟悉 PHP 语言并且找不到我的代码的确切问题。换句话说,我不确定问题出在 HTTP 部分还是 PHP 部分。 【参考方案1】:

我不知道您的数据库结构。正如您所说的查询在 MYSQL 中工作,请尝试以下操作:

$sql = "SELECT ttype.TyName, train.TraNo, a.StaName dsta, c.Time dtime ,b.StaName asta , d.Time atime 
FROM (((((ttype RIGHT JOIN train
ON ttype.TyNo=train.TyNo)
RIGHT JOIN pass c
ON train.TraNo=c.TraNo)
RIGHT JOIN station a
ON a.StaNo=c.StaNo)
RIGHT JOIN pass d
ON train.TraNo=d.TraNo)
RIGHT JOIN station b
ON b.StaNo=d.StaNo)      

WHERE c.Time < d.Time
AND a.StaName = '".$depart."' 
AND b.StaName='".$arrive."'";

问题在这里:

AND a.StaName='.$depart' AND b.StaName='.$arrive' ";

您可以在以下位置查看更多详细信息: Concatenating strings having dot(period) in php

上面的代码也不好用,容易发生 SQL 注入。 尝试准备好的语句。你可以在这里获得一个非常基础的教程:

https://www.w3schools.com/php/php_mysql_prepared_statements.asp

【讨论】:

***.com/questions/59483442/… 你好!我在这个问题中提供了一张参考照片。 我明白了。尝试上面的答案并检查它是否有效..只需在我的答案中写的代码中更改您的 SQL 查询.. @naomi 请不要发布仅指出印刷问题或缺少字符的答案。这样的答案不太可能帮助未来的访问者,因为它们特定于 OP 的代码。相反,请根据help center 标记或投票以关闭问题为题外话。【参考方案2】:

在查询中尝试没有点

WHERE c.Time < d.Time
    AND a.StaName='$depart' 
    AND b.StaName='$arrive' ";

【讨论】:

请不要发布仅指出印刷问题或缺少字符的答案。这样的答案不太可能帮助未来的访问者,因为它们特定于 OP 的代码。相反,请根据help center 标记或投票以将问题关闭为题外话。

以上是关于单击按钮后使用 PHP 将 HTML 输入到 SQL 查询中的主要内容,如果未能解决你的问题,请参考以下文章

在按钮单击时将文本添加到现有输入字段

单击html中的提交并运行php代码[关闭]

如何使用ajax将输入文件数据值发送到php页面

单击添加新按钮并使用php-pdo将数据插入数据库时​​如何生成2个新输入字段[关闭]

单击提交按钮时如何将php验证文件调用到html文件

我正在尝试将我的表单链接到我的 PHP 页面,并且我想在用户单击提交按钮时将用户的输入打印到该页面上