2017-10-28 112 views
0

我只是想知道如果可能,最好的方法是让用户从Web应用程序中实际输入SQL查询。允许用户键入SQL查询的Web应用程序

到目前为止我有一个非常简单的Web应用程序,允许用户查看数据库表和操纵他们等等等等。

我想给他们实际上是从Web应用程序中太有型的查询选项(SELECT * FROM)..然后将结果显示在表中。 (与搜索栏完全一样,但我不认为这会削减它,是吗?)。

我只使用PHP的那一刻,就是我希望做的可能只有HTML/PHP或者我需要其他语言的帮助?

这对我来说可能过于复杂,但如果有人能给我一个好起点,谢谢。

UPDATE: 从我的理解来回答我的问题,我需要的东西,如:

<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."; 
      } 
    } 
} 



    ?> 

在返回的那一刻一个错误:

Undefined index: Search

这是在谈论在$SEARCH = $_POST['Search'];

但我认为我界定的搜索,因为这是在表单中的搜索?

+6

为什么不给他们访问像phpMyAdmin的东西? – ceejayoz

+0

@ceejayoz我完全理解你的观点:)我知道这是永远不会在现实世界中执行的事情,我很清楚潜在的安全风险,但是我对PHP/SQL相当陌生,只是想到了这一点让我质疑一个人会如何去做,如果你喜欢的话,只需要一个“玩”。 – Tipping44

+0

如果你想要比phpMyAdmin简单一些,以示例/灵感为例,请查看https://github.com/vrana/adminer。 – ceejayoz

回答

3

听起来你正在构建的phpMyAdmin自己的简约版本。这只适用于PHP和HTML。

一个非常基本的实现将是一个标准的HTML表单有一个文本,其提交给执行查询并呈现结果的表的PHP脚本。如果将结果作为关联数组提取,则可以从第一个结果行的数组键中获取所需的表列标题。

你可能(或许我应该说“会”)运行到哪里的用户提供返回百万计的结果的查询情况。输出它们可能会导致浏览器长时间(甚至崩溃)挂起,因此您可能需要实施某种分页并在查询中附加LIMIT子句。

由于用户提供SQL查询自己,他们需要知道他们做了什么错了,所以他们可以纠正它本身以及所以你从MySQL如果查询失败要输出的文本错误消息。

允许用户提供原始的SQL查询为很多潜在的滥用场景打开了大门。如果它是我的应用程序,我不希望用户将此功能用于除SELECT查询以外的其他任何内容,因此我可能会通过MySQL用户执行用户提供的查询,该用户只在应用程序数据库上拥有SELECT权限,而不是单一的其他特权 - 这种方式任何用户试图DROP表将无法。

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代码,也不会产生任何错误。

相关问题