2017-10-28 114 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代碼,也不會產生任何錯誤。

相關問題