2015-05-21 2 views
-2

Я делаю интранет.
Только у администратора есть доступ к странице, которую я хочу построить сейчас:
У меня есть страница с текстовым полем. Когда они нажимают кнопку отправки, он отправляется на страницу PHP, чтобы отправить запрос, например "UPDATE ... " или "SELECT ...".
Он может написать запрошенный SQL запрос. Он должен работать.
PHP-код, способный выполнить весь код SQL

Я хочу, чтобы он работал: если это обновление, мне нужно вернуть его, если это нормально, если его выбрать, мне нужно вернуть таблицу.
Но мне это нужно, чтобы иметь возможность EXEC сложный запрос, как:

SELECT numfou, 
(SELECT COUNT(*) 
FROM PROPOSER P 
WHERE P.numfou = F.numfou) AS NB_PROD 
FROM FOURNISSEUR F; 
(net exemple).<br/> 

Знаете ли вы PHP код EXEC любые REQ SQL?

+1

Да я знаю, установить ** PHPMyAdmin ** для них :) Это 'PHP-код ' –

+0

Я не хочу, чтобы они имели доступ к phpmyadmin, я все еще использую его. Моя задача - создать им страницу «SQL» (то же самое в phpmyadmin): D Но спасибо, вы меня понимаете. –

+1

Если бы это было легко сделать на одной странице, все это делали бы. Там много проблем с построением такого. Зачем изобретать колесо? –

ответ

0

Я предлагаю этот код я сделать (Если вы думаете, что может быть обновление сказать: D):

<?php 
function requette($req){ 
    $premierMot = explode(" ", $req)[0]; 
    switch(strtoupper($premierMot)){ 
     case "SELECT": 
      return select($req); 
      break; 
     case "UPDATE": 
     case "DELETE": 
     case "INSERT": 
      return updateDeleteInsert($req); 
      break; 
    } 
} 

function select($req){ 
    $bdd = new PDO('mysql:host=localhost;dbname=spb', 'root', ''); 

    // ON DETERMINE SI LE CLIENT RECHERCHE DANS CHAMPS EN PARTICULIER OU TOUT 
    $explosion = preg_split('/[;, \n]+/', $req); 
    $veuxTout = false; 
    for($cpt=0;$cpt<count($explosion);$cpt++){ 
     if(strtoupper($explosion[$cpt]) == "*"){ 
      $veuxTout = true; 
      break; 
     } 
    } 

    // SI IL NE VEUX PAS TOUT ON PREVOI UN TABLEAU DE DEMANDE 
    $demande = array(); 
    for($cpt=1;$cpt<count($explosion);$cpt++){ 
     if(strtoupper($explosion[$cpt]) == "FROM"){ 
      break; 
     } 
     else{ 
      array_push($demande,$explosion[$cpt]); 
     } 
    } 

    // ON CHERCHE LE NOM DE LA TABLE 
    $table = ""; 
    for($cpt=0;$cpt<count($explosion);$cpt++){ 
     if(strtoupper($explosion[$cpt]) == "FROM"){ 
      $table = $explosion[$cpt+1]; 
      break; 
     } 
    } 

    // ON CHERCHE LES TITRES DE LA TABLE 
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='$table';"; 
    $res = $bdd->query($sql); 
    $titres = array(); 
    while($resultat = $res->fetch()){ 
     array_push($titres,$resultat['COLUMN_NAME']); 
    } 

    $res = $bdd->query($req); 
    $table = "<table>"; 
    while($resultat = $res->fetch()){ 
     $table .= "<tr>"; 
     if($veuxTout == true){ 
      for($cpt=0;$cpt<count($titres);$cpt++){ 
       $table .= "<td>".$resultat[$titres[$cpt]]."</td>"; 
      } 
     } 
     else{ 
      $ok = false; 
      for($cpt1=0;$cpt1<count($titres);$cpt1++){ 
       for($cpt2=0;$cpt2<count($demande);$cpt2++){ 
        if(strtoupper($titres[$cpt1]) == strtoupper($demande[$cpt2])){ 
         $table .= "<td>".$resultat[$titres[$cpt1]]."</td>"; 
         $ok = true; 
        } 
       } 
      } 
     } 
     $table .= "</tr>"; 
    } 
    $table .= "</table>"; 
    return $table; 
} 

function updateDeleteInsert($req){ 
    $bdd = new PDO('mysql:host=localhost;dbname=spb', 'root', ''); 
    try { 
     $req = $bdd->prepare($req); 
     $req->execute(); 
     return "oui"; 
    } 
    catch(PDOException $e){ 
     return "non"; 
    } 
} 

$req = htmlentities($_POST['req']); 
echo requette($req); 
?> 
Смежные вопросы