这可能听起来很奇怪,但希望有人可以找出并帮助我解决这个问题。
我正在从MySql数据库中检索许多值。我的数据库中至少有300行正在导出到我的JavaScript文件中。这些值在我的<option>
输入中显示为<select>
。当我运行我的文件时,<select>
输入未返回任何<option>
值。
我想知道发生了什么,并意识到返回了很多值。所以我对SQL数据进行了限制,我得出结论,如果php代码中没有<select>
函数,WHERE
输入只返回最多13个值,如果有{WHERE
则只返回10个值{1}}功能。
我确实尝试手动放置数据而不从数据库中检索数据,它只接受至少300个值中的25个值。
我的问题是:
<select>
中显示的数据是否真的有限制
输入?如果有,有没有办法绕过它?如果没有,那是什么
可能出错了?以下是您需要的代码。我只是简化并删除了一些数据来形象化我的意思。
HTML
<form action="" method="post" id="demo-form2" data-parsley-validate class="form-horizontal form-label-left">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Search Topic
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="userDropdown" name="tid" class="select2_single form-control col-md-7 col-xs-12"></select>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Description <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="description" name="description" class="form-control col-md-7 col-xs-12" />
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Assigned to <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="assign" name="assign" class="form-control col-md-7 col-xs-12" />
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">Comments: <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="comments" name="comments" class="form-control col-md-7 col-xs-12">
</div>
</div>
<div class="form-group">
<label for="middle-name" class="control-label col-md-3 col-sm-3 col-xs-12">Words</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input id="words" class="form-control col-md-7 col-xs-12" type="text" name="words">
</div>
</div>
</div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<input type="submit" name="submit" class="btn btn-success" value="Update" />
</div>
</div>
JAVASCRIPT
<script>
//sql data...
var data = [ <?php
$req = mysql_query('select * from tasks');
while($dnn = mysql_fetch_array($req))
{
?> {username: '<?php echo $dnn['username'] ?>', tid: '<?php echo $dnn['tid'] ?>', description: '<?php echo $dnn['description'] ?>'},
//this would return at least 300 results
<?php } ?>
];
var dropdown = $('#userDropdown');
dropdown.append('<option value="" >Search for Topic ID</option>');
for(var i = 0; i < data.length; i++){
var item = data[i];
dropdown.append('<option value="' + item.tid + '" >' + item.tid + '-' + item.description + '</option>');
}
$('#userDropdown').change(function(){
var user = this.value;
var dataItem = $.grep(data, function(e){ return e.tid == user; });
if(dataItem.length > 0){
$('#description').val(dataItem[0].description);
$('#assign').val(dataItem[0].assign);
}
});
</script>
代码没有问题。我把它包括在内作为参考。
编辑:删除php脚本上的LIMIT以避免混淆。
答案 0 :(得分:0)
<?php
$data=array();
$req = mysql_query('select * from tasks');
if( $req ){
while( $dnn = mysql_fetch_object( $req ) ){
$data[]=array( 'username'=>$dnn->username, 'tid'=>$dnn->tid, 'description'=>$dnn->description );
}
echo "var data=".json_encode( $data ).";";
}
?>
替代方案,使用mysql_fetch_array
:
<?php
$data=array();
$req = mysql_query('select * from tasks');
if( $req ){
while( $dnn = mysql_fetch_array( $req ) ){
$data[]=array( 'username'=>$dnn['username'], 'tid'=>$dnn['tid'], 'description'=>$dnn['description'] );
}
echo "var data=".json_encode( $data ).";";
}
?>
这是一个经过全面测试的工作示例,包括实际的数据库详细信息
$dbhost = 'localhost';
$dbuser = 'root';
$dbpwd = 'xxx';
$dbname = 'xxx';
/*
create table if not exists `tasks` (
`id` int(10) unsigned not null auto_increment,
`username` varchar(50) not null default '0',
`tid` int(10) unsigned not null default '0',
`description` varchar(50) not null default '0',
primary key (`id`)
) engine=innodb auto_increment=4 default charset=latin1;
insert into `tasks` (`id`, `username`, `tid`, `description`) values
(1, 'fred', 1, 'banana'),
(2, 'joe', 2, 'apple'),
(3, 'bertrum', 3, 'orange');
*/
$conn=mysql_connect( $dbhost, $dbuser, $dbpwd );
mysql_select_db( $dbname, $conn ) or die(mysql_error());
$sql='select * from tasks';
$res=mysql_query( $sql );
if( $res ){
$data=array();
while( $dnn=mysql_fetch_object( $res ) ){
$data[]=array( 'username'=>$dnn->username, 'tid'=>$dnn->tid, 'description'=>$dnn->description );
}
echo "var data=".json_encode( $data ).";";
}
mysql_close( $conn );
var data=[{"username":"fred","tid":"1","description":"banana"},{"username":"joe","tid":"2","description":"apple"},{"username":"bertrum","tid":"3","description":"orange"}];
答案 1 :(得分:0)
存在以下潜在问题:
PHP生成的用于填充数据 Javascript数组的数据可能包含单引号,从而破坏了Javascript代码,然后不会继续填充SELECT
;
数据也可能包含双引号,这会破坏填充SELECT
列表的Javascript代码;
数据中的任何小于或大于标志都可能导致HTML无法正确呈现;
可能存在字符编码问题,因此非UTF-8字符会被解释为这样并产生意外结果。
要解决这些问题,您应该生成JSON并通过DOM方法填充SELECT
列表(通过jQuery&#39; s val()和 text()),而不是通过字符串连接。
以下是您可以尝试使用的代码:
PHP:
<?php
// right after connecting to the DB:
mysql_set_charset('utf8');
// ...
$req = mysql_query('select * from tasks');
$rows = array();
while($dnn = mysql_fetch_assoc($req)) {
$rows[] = $dnn;
}
?>
关注此Javascript:
var data = <?=json_encode($rows)?>;
var dropdown = $('#userDropdown');
dropdown.append('<option value="" >Search for Topic ID</option>');
for(var i = 0; i < data.length; i++){
var item = data[i];
dropdown.append(
$("<option></option>").val(item.id).text(
item.tid + '-' + item.description));
}
$('#userDropdown').change(function(){
// ... etc...
对于与UTF-8相关的问题,还要确保您的PHP文件以UTF-8编码保存。编辑经常可以选择这个。其次,请确保您的HTML head
部分指定了字符集。例如,像这样:
<head>
<meta charset="utf-8"/>
</head>
请注意,mysql_函数已经被弃用了很长时间,并且在PHP 7中不再受支持。您应该切换到mysqli或PDO。
另请注意,您的HTML的结尾</DIV>
太多了,就在上面:
<div class="ln_solid"></div>
答案 2 :(得分:0)
<select>
元素没有限制。更优雅的方法是使用 php 中的 here-doc 语法,如下所示:
var data = [
<?php
$req = mysql_query('select * from tasks');
while($dnn = mysql_fetch_array($req, MYSQL_ASSOC)){
echo <<<DATA
{
username : '{$dnn['username']}',
tid : {$dnn['tid']},
description : '{$dnn['description']}'
}
DATA;
}
?>
];
还要记住:
这个javascript-php片段应该嵌入在解析的视图中 php引擎
你不应该把它放在一个外部资产中,在通过 php &amp;解析视图后加载它通过浏览器加载。