繁体   English   中英

动态javascript / jquery表单提交以及php / mysql的结果

[英]dynamic javascript/jquery form submission with results from php/mysql

我想创建一个搜索页面,该页面允许某人选择多个选项(复选框),这些选项又会在SQL语句中创建多个WHERE子句,但不确定如何执行此操作。

简单来说-如果我选中以下复选框:“待处理”,“已提交”,“已处理”,然后在表单上点击“提交”,则会创建一条sql语句,该语句基本上表示:

“ SELECT * FROM table.tablename WHERE(待定=” Y“,已提交=” Y“,已处理=” Y“)...等等。

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

有任何想法吗?

编辑

根据响应,似乎有些人假设WHERE子句中的字段名是已知的。 正如我在下面的另一条评论中提到的,此子句中可能有2或2000个字段名,系统不会提前知道这些字段名(如果选中了复选框A,请包括它,否则请不要...)

SELECT * FROM表WHERE($ whereclause_string)

哪里

$ whereclausestring =“ unknown_field1 =未知值1,unknown_field2 =未知值2,unknown_field3 =未知值3 ...”

我假设这是一个网页(正如您在谈论复选框,搜索&c。并用javascript和PHP标记。)

然后,这些复选框必须是表单的一部分。 我认为您需要收获提交的数据(即“名称=值”对),并在构建查询时插入变量。

如何执行此操作将取决于SQL查询的上下文,但是,我认为最简单的方法(如果不是最安全的话)将按以下方式构造查询(在您的PHP脚本中):

"SELECT * FROM table.tablename WHERE ('pending = ' . $_POST['pending'] . ', submitted = ' . $_POST['submitted'] . ', processed = ' . $_POST['processed']);"

如果需要,可以用“ GET”代替“ POST”,甚至可以用“ COOKIE”或“ REQUEST”代替,尽管您可能想更加确定自己所得到的。

同样在安全性方面,检查值是否符合您的期望是非常明智的,以防止SQL注入。 您可以通过根据特定条件检查值(使用条件循环)并在检查证明成功的情况下将其分配给局部变量来实现。

希望这对您有所帮助。

排骨

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

PHP:

header('content-type:application/json;charset=utf-8');
$defaults = array('pending' => 'Y','submitted' => 'Y','processed' => 'Y');
$pending = ($_GET['pending']) ? $_GET['pending'] : $defaults['pending'];
$submitted = ($_GET['submitted']) ? $_GET['submitted'] : $defaults['submitted'];
$processed = ($_GET['processed']) ? $_GET['processed'] : $defaults['processed'];

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$db = mysql_select_db('foo', $link);
$query = mysql_query('SELECT * FROM table.tablename WHERE (pending="'.$penging.'", submitted="'.$submitted.'", processed="'.$processed.'")');
$result = array();

if (!$link) {
    die('Could not connect: '.mysql_error());
}

if (!$db_selected) {
    die ('Can\'t use foo : '.mysql_error());
}

if (!$result) {
    die('Invalid query: '.mysql_error());
}

$i = 0;
while ($row = mysql_fetch_assoc($result)) {
    $result[$i]['row-name'] = $row['row-name'];
    $i++;
}

mysql_close($link);

return json_encode($result);

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'来收集所有选中的选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM