使用php/mysql的结果动态提交javascript/jquery表单

使用php/mysql的结果动态提交javascript/jquery表单,php,javascript,mysql,Php,Javascript,Mysql,我想创建一个搜索页面,允许用户选择多个选项复选框,这些复选框会在SQL语句中创建多个WHERE子句,但不确定如何执行 简单地说,如果我在表单上选中“待定”、“提交”、“处理”复选框,然后点击“提交”,则会创建一条sql语句,它基本上会显示: 从table.tablename中选择*其中pending=Y,submited=Y,processed=Y。。。等等 括号中的项目是动态的,因此sql语句并不总是相同的,值也不一定等于Y。为此,我想在PDO中使用准备好的语句 有什么想法吗 编辑 根据回答,

我想创建一个搜索页面,允许用户选择多个选项复选框,这些复选框会在SQL语句中创建多个WHERE子句,但不确定如何执行

简单地说,如果我在表单上选中“待定”、“提交”、“处理”复选框,然后点击“提交”,则会创建一条sql语句,它基本上会显示:

从table.tablename中选择*其中pending=Y,submited=Y,processed=Y。。。等等

括号中的项目是动态的,因此sql语句并不总是相同的,值也不一定等于Y。为此,我想在PDO中使用准备好的语句

有什么想法吗

编辑 根据回答,似乎有些人认为WHERE子句中的字段名是已知的。正如我在下面的另一条评论中提到的,本条款中可能有2个或2000个字段名,如果选中复选框A,则系统不会提前知道其中任何一个字段名,如果不选中,则包括它,不

从表格中选择*,其中包含$whereclause\u字符串

在哪里


$whereclausestring=unknown\u field1=unknownvalue1,unknown\u field2=unknownvalue2,unknown\u field3=unknownvalue3

我假设这是一个web页面,正如您所说的复选框、搜索和c,并且它用javascript和PHP标记

因此,这些复选框必须是表单的一部分。我认为您需要获取提交的数据,即name=value对,并在构造查询时插入变量

如何实现这一点取决于SQL查询的上下文,但是,我认为最简单的方法(如果不是最安全的话)是在PHP脚本中按如下方式构造查询:

"SELECT * FROM table.tablename WHERE ('pending = ' . $_POST['pending'] . ', submitted = ' . $_POST['submitted'] . ', processed = ' . $_POST['processed']);"
如有必要,“POST”可以用“GET”代替,甚至可以用“COOKIE”或“REQUEST”代替,不过,您可能希望更清楚地知道您得到了什么

同样在安全性方面,为了防止SQL注入,检查这些值是否是您期望的值是非常明智的。您可以通过使用条件循环检查特定条件下的值,并在检查成功时将其分配给局部变量来实现这一点

希望这对你有帮助


使用MySQL连接和查询创建PHP脚本。然后使用jQuery向PHP脚本发出AJAX或JSON请求

PHP:

jQuery:

$('#some-submit-button').click(function(){
    var pending = $('#some-pending-input').val(),
    submitted = $('#some-submitted-input').val(),
    processed = $('#some-processed-input').val();

    $.getJSON('/path/to/script.php?pending=' + pending + '&submitted=' + submitted + '&processed=' + processed,function(data){
        $.each(data,function(i){
            $('#some-block-for-results').append('Getting data from MySQL never been so easy: ' + data[i].some-row-name + ', ' + data[i].some-other-row-name);
        });
    });
    return false;
});

这只是一个简单的例子。根据您的需要更改PHP/jQ。

可能是这样的吗

<?php
// construction
$options = array('foo', 'bar');
foreach ($options as $option)
    printf('%s: <input type="checkbox" value="%s" />%s', $option, $option, PHP_EOL);

// submission
$wheres = array();
foreach ($options as $option)
    if (isset($_POST[$option])) // should only be present if "checked"
        $wheres[] = sprintf('%s = "%s"', $option, mysql_real_escape_string($_POST[$option])); // sanitize!!

$where = implode(', ', $wheres); // foo = "yes", bar = "yes"
?>

编辑:jQuery应该很容易做到这一点,使用诸如“input:checked”之类的选择器来收集所有选中的选项。

您的代码假设我每次都使用挂起、提交等变量。我不一定选择或使用表中的所有变量,因此我的问题的目的是。我想根据表单中选择的参数动态创建SELECT/INSERT/UPDATE语句。对不起。一、 像其他人一样,我误解了这一点。我认为思考未知的_字段将来自何处可能会有所帮助——可能它们与表有关,我猜是列标题。Ken的答案中的$options数组可以通过获取列标题并将其插入数组中来动态生成。也许我的问题的措辞令人困惑,但我只是使用上面变量的Y值作为示例-where语句中的变量可以是2,也可以是200。我希望能够传递整个变量,而不仅仅是未知字段名的值那么,有什么问题吗?我为MySQL编写了一个简单的AJAJ模型。斯凯尔顿。只需修改查询、条件if/else语句和传递变量。我感谢您的帮助,但您基本上为我上面的相同“idea”代码发布了一个循环。我不知道$default的默认字段、值或任何内容。上面的sql命令还假设您基于3个已知的字段名进行搜索—我不会这样做。以我为例,,我假设客户可以按系统中的每个字段名或其中一个字段名进行搜索-这取决于他们的选择,但您的示例代码假设您知道他们将输入什么和/或默认值将是什么,仅出于安全原因,当您只有两个变量的值(如Y或N)时,这些默认值会是什么。如果您想进行独立于值的查询,您需要更改“如果”语句。例如:$submitted=$\u GET['submitted']?'其中submitted='.$\u GET['submitted']':。。。mysql_查询“从“.$submitted”所在的表中选择*;你知道,这只是“为了好玩”。在现实生活中,你需要更多的条件和更多的安全技巧。@ken-让我们假设我尝试运行的唯一“脚本”是上面编辑中的示例-这本质上是我的全部问题,因此在仅修改sql语句时发布完整脚本是没有意义的。我不想运行多个语句,所以在循环中运行任何东西都是不值得的。我喜欢它——我想我会从这里开始。谢谢
<?php
// construction
$options = array('foo', 'bar');
foreach ($options as $option)
    printf('%s: <input type="checkbox" value="%s" />%s', $option, $option, PHP_EOL);

// submission
$wheres = array();
foreach ($options as $option)
    if (isset($_POST[$option])) // should only be present if "checked"
        $wheres[] = sprintf('%s = "%s"', $option, mysql_real_escape_string($_POST[$option])); // sanitize!!

$where = implode(', ', $wheres); // foo = "yes", bar = "yes"
?>