我只是想知道,如果可能的话,允许用户在Web应用程序中实际输入SQL查询的最佳方法。
到目前为止,我有一个非常简单的Web应用程序,允许用户查看数据库表并操纵它们等。
我想给他们一个选项来实际在Web应用程序中输入查询(SELECT * FROM)..然后在表格中显示结果。 (与搜索栏完全相同,但我不认为会削减它,是吗?)。
我目前只使用PHP,我只想用HTML / PHP做些什么,还是需要其他语言的帮助?
这对我来说可能太复杂了,但如果有人能给我一个很棒的起点,谢谢你。
更新 根据我的理解回答我的问题,我需要类似的东西:
<form action= Search.php method="POST">
<input type="text" name="Search">
<input type="submit" name"">
的search.php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$SEARCH = $_POST['Search'];
if (!isset($_POST)) {
$sql = "'%".$_POST['$SEARCH']."%'";
$results = mysqli_query($con, $sql);
echo "<table border ='2'>";
if (mysqli_num_rows($results) !=0) {
while ($row=mysqli_fetch_array($results)) {
echo "<tr><td></td></tr>";
}
echo "</table>";
}else {
echo "Failed! Try another search query.";
}
}
}
?>
目前返回一个错误:
未定义的索引:搜索
它在讨论$SEARCH = $_POST['Search'];
但我认为我正在定义搜索,因为这是表单中的搜索?
答案 0 :(得分:3)
听起来你正在构建自己的简约版phpMyAdmin。只用PHP和HTML就可以完全实现。
一个非常基本的实现是带有textarea的标准HTML表单,它提交给执行查询并呈现结果表的PHP脚本。如果将结果作为关联数组获取,则可以从第一个结果行的数组键中获取所需的表列标题。
您可能(或者我应该说“将”)遇到用户提供返回数百万结果的查询的情况。输出所有这些可能会导致浏览器长时间挂起(甚至崩溃),因此您可能希望实现某种分页并在查询中附加LIMIT
子句。
由于用户自己提供SQL查询,他们需要知道他们做错了什么,这样他们也可以自己更正它,所以如果查询失败,你将需要从MySQL输出文字错误信息。
允许用户提供原始SQL查询为大量潜在的滥用场景打开了大门。如果它是我的应用程序,我不希望用户将此功能用于除SELECT
查询以外的任何其他内容,因此我可能会让只有SELECT
的MySQL用户执行用户提供的查询应用程序数据库上的权限而不是单个其他权限 - 这样任何尝试DROP
表的用户都无法这样做。
答案 1 :(得分:0)
此错误仅在首次执行PHP时显示,因为它只是期望$ _POST中的“搜索”。
$ _ SERVER ['REQUEST_METHOD']检查请求方法是否为POST,但不检查$ _POST中是否有任何发布数据。 (来源:$_POST vs. $_SERVER['REQUEST_METHOD'] == 'POST')
但该页面正在首次加载,因此它在POST中没有任何内容。
您可以通过使用“isset()”方法首次检查页面是否正在加载来避免它。
如果第一次加载只是忽略了php代码的进一步执行,只需显示输入查询的表单。
<?php
if(isset($_POST['Search']))
{
`// Query execution code`.
}
?>
<form action= Search.php method="POST">
<input type="text" name="Search">
<input type="submit" name"">
因此,如果$ _POST中未设置搜索索引,则不会执行php代码,也不会产生任何错误。