[英]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.