使用 sql 数据填充自动完成 jquery vars

Posted

技术标签:

【中文标题】使用 sql 数据填充自动完成 jquery vars【英文标题】:Populate the autocomplete jquery vars with sql data 【发布时间】:2021-03-16 18:13:27 【问题描述】:

对不起,我是菜鸟。 有一种方法可以使用从我的 sql 表中调用的变量填充我的 .autocomplete 下拉列表? 如果我使用var = ['var1','var2'.. 它可以工作。但我需要从我的 sql 表中回调这些变量。

谢谢!

$( "#product_codes" ).autocomplete(
    source: productvar,
    minLength: 0,
).focus(function() 
    $(this).autocomplete("search", "");
);

【问题讨论】:

你用php标记了这个,你有一个获取数据的php脚本吗? 【参考方案1】:

感谢您的回答! 我正在开发一个由前同事制作的现有网站。

有一个 php 页面可以从数据库中获取数据

我会解释我想要什么:

我有一个带有 .autocomplete jquery 的输入文本,但我想在下拉列表中使用数据库表获取的数据来更改它:

<li class="field-container"><label for="pr_code">
                                <span class="field-name"><?php echo $LANG['product_code']; ?></span>
                        
                                <input type="text" value="" id="pr_code" name="pr_code" class="uiStyle text ui-widget-content ui-corner-all" onFocus="showHideTip(this);"> *</label>
                            <div id="pr_codeTip" class="hidden formTip">
                                <?php echo $LANG['purchase_pr_code_tip']; ?>                            </div>
                        </li>

如何使用获取的数据更改下拉列表中的输入文本?

这里是为 .autocomplete 获取数据的 pr.php 代码

<?php require_once("st_inc/session.php"); ?>
<?php confirm_logged_in(); ?>
<?php require_once("st_inc/connection.php"); ?>
<?php require_once("st_inc/functions.php"); ?>
<?php
if(!isset($_GET["term"]))  redirect_to("home.php"); 
$q = strtolower($_GET["term"]);
if (!$q) return;

$query = "SELECT * FROM products";
$results = mysql_query($query, $connection);
confirm_query($results);
$items = array();
while($row = mysql_fetch_array($results))  
  $items[$row['pr_code']] = $row['pr_name'];


/*
$items = array();
while($row = mysql_fetch_array($results)) 
    $items[] = $row['pr_name'];

echo json_encode($items);
*/
function array_to_json( $array )

    if( !is_array( $array ) )
        return false;
    

    $associative = count( array_diff( array_keys($array), array_keys( array_keys( $array )) ));
    if( $associative )

        $construct = array();
        foreach( $array as $key => $value )

            // We first copy each key/value pair into a staging array,
            // formatting each key and value properly as we go.

            // Format the key:
            if( is_numeric($key) )
                $key = "key_$key";
            
            $key = "\"".addslashes($key)."\"";

            // Format the value:
            if( is_array( $value ))
                $value = array_to_json( $value );
             else if( !is_numeric( $value ) || is_string( $value ) )
                $value = "\"".addslashes($value)."\"";
            

            // Add to staging array:
            $construct[] = "$key: $value";
        

        // Then we collapse the staging array into the JSON form:
        $result = " " . implode( ", ", $construct ) . " ";

     else  // If the array is a vector (not associative):

        $construct = array();
        foreach( $array as $value )

            // Format the value:
            if( is_array( $value ))
                $value = array_to_json( $value );
             else if( !is_numeric( $value ) || is_string( $value ) )
                $value = "'".addslashes($value)."'";
            

            // Add to staging array:
            $construct[] = $value;
        

        // Then we collapse the staging array into the JSON form:
        $result = "[ " . implode( ", ", $construct ) . " ]";
    

    return $result;


$result = array();
foreach ($items as $key=>$value) 
    if (strpos(strtolower($key), $q) !== false) 
        array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key)));
    
    if (count($result) > 11)
        break;

echo array_to_json($result);

?>

非常感谢

【讨论】:

【参考方案2】:

好的,我用这个解决了:

<li class="field-container"><label for="pr_code">
                                <span class="field-name"><?php echo $LANG['product_code']; ?></span>
                        
                                <select name="pr_code" id="pr_code" class="uiStyle text ui-widget-content"> 
                                 <?php
    $con=mysqli_connect("localhost","***","","***");
    if (mysqli_connect_errno())
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    $sql="SELECT * FROM products";
    $result = mysqli_query($con, $sql);
    while($row = mysqli_fetch_array($result))
      
    echo '<option value='.$row['pr_code'].'>'.$row['pr_code'].'</option>';
      
?>;
</select>

谢谢!

【讨论】:

以上是关于使用 sql 数据填充自动完成 jquery vars的主要内容,如果未能解决你的问题,请参考以下文章

显示数据库表中的两个字段以填充 jquery 自动完成

如何禁用 chrome / jquery 的自动完成和自动填充

jquery:预填充自动完成字段

从 SQL 填充的 Ajax 自动完成扩展器

jQuery自动完成,通过选择建议选项填充多个字段

您可以使用表格来填充 jQuery 自动完成文本框吗?