如何在html页面上用用户输入字段执行sql命令,并在同一页面上显示结果

时间:2011-10-17 15:12:57

标签: php javascript html sql ajax

我写了一个命令,或者我从用户输入字段填充参数值。单击按钮,将此命令发送到php并将结果值发送回html进行显示。 例如。在html页面上:

select ___ from ____, 

两个可用输入字段我填写“tablenameone”和“valueone”。然后,结果将打印在同一页面上的html文本字段中。

我所知道的是这些价值可以像这样的格式发送(也许)

$('input[name="talbename"]') 
$('input[name="value"]')
example.com?tablename=tablenameone&value=valueone

从php方面我使用

 $sql="SELECT '$_GET['value']' FROM '$_GET['tablename']';

我不知道的是......我究竟应该如何在点击功能中执行此操作?它确实使用ajax。但我怎样才能生成example.com?tablename=tablenameone&value=valueone 我应该在哪里放$('input [name =“value”]')

提前感谢:D

3 个答案:

答案 0 :(得分:3)

您不得在查询中使用直接输入,因为您将对SQL injection attacks开放。

$sql="SELECT '$_GET['value']' FROM '$_GET['tablename']';

相反,请使用以下内容:

$column = $_GET['value'];
$table = $_GET['tablename'];
$sql = sprintf("SELECT %s FROM %s;",
             mysql_real_escape_string($column),
             mysql_real_escape_string($table));

虽然您仍然通过向人们提供一个告诉他们所有表名和列名的页面来暴露太多“内幕消息”!

无论如何,这是一个完整的例子;

<form method="post" action="">
    <fieldset>
        <legend>Select Data</legend>
        <p><label>Table<br>
        <select name="table">
            <option value="tblStudents">Students</option>
        </select></label></p>
        <p><label>Table<br>
        <select name="column">
            <option value="firstname">First Name</option>
            <option value="lastname">Last Name</option>
        </select></label></p>
        <p><input type="submit" name="submit" value="submit">
    </fieldset>
</form>
<?php
$connection = mysql_connect("servername:3306", "user", "password") or die ('Error connecting to mysql');

mysql_select_db("databasename");  

$column = mysql_real_escape_string($_POST['column']);
$table =  mysql_real_escape_string($_POST['table']);
$sql = sprintf("SELECT %s FROM %s;",
        $column,
        $table);

$result = mysql_query($sql) or die(mysql_error());

echo '<ul>';
while($row = mysql_fetch_array($result)) { 
    echo '<li>' . $row[$column] . '</li>';
}
echo '</ul>';

mysql_close($connection); 
?>

答案 1 :(得分:0)

您确实希望确保自己不会接受SQL注入。

你可以使用mysql编写的语句

使用php函数mysql_real_escape_string($_GET['value'])

阅读此主题: How can I prevent SQL injection in PHP?

我不确定点击功能的含义。

答案 2 :(得分:0)

好像没有人真正回答过这个问题(尽管他们都是好点,我会假设你有这样做的原因),我会回答:

$('form[name=formname]').submit(function(e){
    e.preventDefault;
    var tablename = $('input[name="tablename"]').val();
    var value = $('input[name="value"]').val();
    $.get("example.php?tablename="+tablename+"&value="+value, function(data){
         $('body div').text(data);
    })
});

PHP:

$sql=mysql_query("SELECT '$_GET['value']' FROM '$_GET['tablename']'")or die(mysql_error());
$sqlOutput = mysql_fetch_array($sql);
echo "<pre>";
print_r($sqlOutput);
echo "</pre>";

显然,将formname替换为您的表单名称body div,其中包含您希望输出进入的元素的名称,并替换所有其他标识符。然后更改PHP中的输出以满足您的需要。

同样,请记住有关SQLi的帖子,因为那里有一个非常严重的问题。