单击按钮后使用 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 查询中的主要内容,如果未能解决你的问题,请参考以下文章