2016-02-05 2 views
-3

Я знаю, как сделать отображение набора запросов, но мне нужно взять ввод, запустить инструкцию и отобразить результат. Вот что у меня есть:Как отобразить результаты запроса в php

HTML:

<form name="form3" method="post" action="sqlexp.php"> 
    <input name="sqlstatement" type="text" id="sqlstatement" style="width: 340px;"> 
    <input type="submit" name="create" value="Create"> 
</form> 

PHP:

ob_start(); 
$host  = "localhost"; // Host name 
$username = "root";   // Mysql username 
$password = "Passw0rd";  // Mysql password 
$db_name = "time_tracker"; // Database name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password") or die("cannot connect"); 
mysql_select_db("$db_name") or die("cannot select DB"); 

// Define $sqlstatement 
$sqlstatement = $_POST['sqlstatement']; 

// runs statement 
$sql = " $sqlstatement "; 
$result = mysql_query($sql); 
echo $sql; 
echo $result; 
ob_end_flush(); 

Я также хочу, чтобы сделать заявления только для чтения, так никто не может связываться с моими таблицами. им немного нового, мне может понадобиться дополнительное объяснение

+0

Извлечь результат.Вы не должны передавать инструкции SQL через ввод формы, очень небезопасный. http://php.net/manual/en/function.mysql-fetch-array.php Вы должны обновить свой драйвер до 'mysqli' или' pdo', а не 'mysql_ *'. Кроме того, переменные не обязательно должны быть в двойных кавычках. – chris85

+0

, где находится только часть для чтения, и это будет доступно только администраторам –

+0

Возникает вопрос, как выводить результаты запроса или как заставить пользователей выполнять только 'select's? – chris85

ответ

0

Чтобы получить имена столбцов вместе с набором результатов, посмотрите на этот SO вопрос: How to get the columns names along with resultset in php/mysql?

В частности, этот фрагмент кода поможет вам распечатать результаты:

// Print the column names as the headers of a table 
echo "<table><tr>"; 
for($i = 0; $i < mysql_num_fields($result); $i++) { 
    $field_info = mysql_fetch_field($result, $i); 
    echo "<th>{$field_info->name}</th>"; 
} 

// Print the data 
while($row = mysql_fetch_row($result)) { 
    echo "<tr>"; 
    foreach($row as $_column) { 
     echo "<td>{$_column}</td>"; 
    } 
    echo "</tr>"; 
} 

echo "</table>"; 

Теперь, при этом, , пожалуйста, будьте очень осторожны, прежде чем продолжить. Похоже, что вы не знакомы с PHP, и то, что вы пытаетесь, очень опасно, так как оно открывает классическую уязвимость SQL-инъекции: https://xkcd.com/327/

Вы можете ограничить возможность повреждения, ограничив разрешения базы данных на чтение- только для пользователя, которого вы регистрируетесь как ($ username и $ password). НЕ входите в систему как root - никогда!

Если эта форма доступна только для администраторов, почему бы не дать им настоящую SQL-IDE, такую ​​как Toad или SQL Server Management Studio?

+0

Мой первый инстинкт заключался в том, чтобы сказать: «Остановите то, что вы делаете, вы можете принести больше вреда, чем пользы», но иногда мы не можем сказать это нашим боссам. Моя единственная надежда заключается в том, что это не для публичного сайта, и что ваша пользовательская база имеет только хорошие намерения. –

+0

Это внутреннее для компании, в которой я работаю, у меня есть столбец администратора в моей таблице пользователей и проверка, чтобы согласиться с этим. –

+0

Когда я пытаюсь var dump, я получаю 'resource (4) типа (результат mysql)' при запуске 'SELECT * FROM Users' –

0

Здравствуйте, Дорога Пробуйте этот код. Я надеюсь, что это будет работать для вас

<?php 
ob_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password="Passw0rd"; // Mysql password 
$db_name="time_tracker"; // Database name 

// Connect to server and select databse. 
mysql_connect($host, $username,"")or die("cannot connect"); 
mysql_select_db($db_name)or die("cannot select DB"); 

// Define $sqlstatement 
if(isset($_POST['create'])) 
{ 
$sqlstatement=$_POST['sqlstatement']; 
echo $sqlstatement; 
} 

ob_end_flush(); 
?> 

<form name="form3" method="post" action=""> 
<input name="sqlstatement" type="text" value="Test" style="width: 340px;"> 
<input type="submit" name="create" value="Create"> 
</form> 
+0

это то, что у меня уже есть. если бы я должен был поставить оператор sql в текстовое поле, я хочу, чтобы он возвращал запрос –

+0

другим словом, если бы я должен был открыть phpmyadmin и запустить оператор select в таблице, я бы увидел запрос независимо от того, какую таблицу я выбрал. есть ли способ автоматически получить заголовки столбцов на основе запроса, который я запускал? –

+0

Но без запроса вставки, как вставить данные в базу данных и выбрать запрос невозможно, скажите, что вы хотите вставить значение текстового поля в базу данных тоже ... ?? –

0

Первый из вас должен НИКОГДА не передавать инструкции SQL через ввод формы, он очень небезопасен. Второе использование нового mysqli_* или pdo.

Вместо этого вы можете иметь форму, которая позволяет вам что-то сделать, например создать контакт.

Вы можете иметь простую форму, которая выглядит так:

<form method="post" action="link/to/script.php"> 
    <input type="text" name="first_name"/> 
    <input type="text" name="last_name"/> 
    <input type="email" name="email"/> 
    <input type="submit" name="create_contact"/> 
</form> 

Теперь PHP скрипт для создания контакта:

if(isset($_POST['create_contact'])){ // if submit is set, then create contact 
    $firstname=$_POST['first_name']; 
    $lastname=$_POST['last_name']; 
    $email=$_POST['email']; 

    $sql="INSERT INTO contacts (firstname, lastname, email) VALUES (?, ?, ?)"; //query here. The `?` are placeholders 
    $stmt = $connection->prepare($sql); //prepare query 
    $stmt->bind_param("sss", $firstname, $lastname, $email); // In the first argument, `s` stands for string, there is also `i` for integer 
                  // Set paramters 
    $stmt->execute(); //Execute the query               
} 

Теперь, чтобы получить список (массив) контактов в вас базы данных и выводить их.

$sql="SELECT * FROM cotacts"; // SQL statement 
$result=mysqli_query($con,$sql); //Do query 
$row=mysqli_fetch_array($result,MYSQLI_ASSOC); //Fetch array 

//Output array 
foreach($row as $contact){ 
    echo $contact['firstname']; 
    echo $contact['lastname']; 
    echo $contact['email']; 
    } 

Никогда не разрешайте пользователю или кому-либо запускать SQL, который они будут печатать самостоятельно.

0

в Уре базе данных создать столбец privlages, а затем на использование SQL запроса WHERE, и как предложение PDO statments достаточно прост в освоении и более безопасным, чем обычный SQL

$query = "SELECT type, name FROM something WHERE user = :user AND privlages = 2 "; 
$query_params = array(':user' => $user); 
try{$stmt = $db->prepare($query); $yourArgs= $stmt->execute($query_params);} 
catch(PDOException $ex){} 
$stmt->execute(); 
$yourArgs = $stmt->fetchAll(); 
//call array wherever 
foreach($yourArgs as $key => $row){ 
    $type = $row['type']; 
    $name = $row['name']; 
} 

Кстати, чтобы создать соединение PDO

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_PERSISTENT => true); 
try {$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);} 
catch(PDOException $ex) {die("Failed to connect to the database: " . $ex->getMessage());} 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
Смежные вопросы