如何在带有用户输入字段的HTML页面上执行SQL命令,并在同一页面上显示结果

how to perform sql command on html page with user input field, and show result on the same page

本文关键字:命令 执行 SQL 结果 显示 一页 用户 输入 HTML 字段      更新时间:2023-09-26

我写一个命令,或者我填写用户输入字段的参数值。单击该按钮,将此命令发送到PHP,并将结果值发送回HTML以显示。为例。在HTML页面上:

select ___ from ____, 

两个可用的输入字段,我用"tablenameone"answers"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呢$('input[name="value"]')

D

不要在查询中使用直接输入,否则容易受到SQL注入攻击。

$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); 
?>

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

$('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的帖子,因为你自己在那里有一个非常严重的问题。

你真的需要确保你没有对SQL注入开放。

你可以使用mysql prepared语句

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

阅读这个线程:如何在PHP中防止SQL注入?

我不知道你说的点击功能是什么意思。