小编典典

如何通过ajax使用onfocus()函数将值保存到sql数据库

sql

基本上我想做的是,当用户将重点放在另一输入上时,将一个值从表单保存到sql数据库中。我想最好的方法是使用ajax。(希望如此!)这是我的代码:

剧本:

   function storeLocation() {
       location = $("#location").val();
       $.ajax({
           url: 'storeLocation.php',
           type: 'post',
           data: 'feed_id=' + location,
           success: function (result) {}
       });

   }

的HTML:

<form id="profile" action = "index.php" method="post" name="profile">
    <input type="text" name="location" id="location" autocomplete="off">
    <input type="submit" value="submit">
</form>

和StoreLocation.php代码:

<?php 
require 'core.php';
require 'connect.php';

$city = $_POST['feed_id'];
$idPerson = getfield('idPerson','person');

$query = "UPDATE table SET idLocation = '$idLocation' 
WHERE idPerson = '$idPerson'"; 
$query_run = mysql_query($query);
?>

当前,此代码仅将用户移至带有$ city变量的新URL,例如:www.example.com/london。

任何帮助都将是惊人的,因为我在这个问题上坚持了太长时间了:)

请求的额外代码:

    $term=$_GET["term"];


    $query=mysql_query("SELECT * FROM venue WHERE name like '%".$term."%'
     ORDER BY name ");
     $json=array();

        while($name=mysql_fetch_array($query)){
             $json[]=array(
                'value'=> $name["name"],
                'label'=>$name["name"]
                    );
              }

     echo json_encode($json);

    ?>

阅读 196

收藏
2021-04-14

共1个答案

小编典典

我能够获得您想要的功能。我的例子和解释如下:

假设有两个表:

1)状态-> id varchar(2)(AL,MN,FL等。)和状态varchar(32)(阿拉巴马州,明尼苏达州,佛罗里达州等)

2)城市-> id int(5)autoinc,city varchar(64)(移动,斯蒂尔沃特,迈阿密)和state_id
varchar(2)(AL,MN,FL)

链接的表:citys.state_id = states.id

现在让我们看一下表格。

// autocomplete.php

在头中调用您需要的JQuery:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>

<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" />

在身体中建立自己的形式。当焦点移离字段时,州输入将调用javascript函数,届时它将检索与该州关联的城市。

<form action="#">
    <label for="state">State: </label>
    <input type="text" name="state" id="state" onBlur="getCities();"/>

    <label for="city">City: </label>
    <input type="text" id="city" name="city"/>
</form>

__在正文中的表单 下方 ,运行Jquery魔术。我认为如果您要使用自动完成功能,请在用户输入任何位置数据(在本例中为“状态”) 之前
将其设置为可以使用。我们通过将代码封装到函数中来实现此目的。

请记住,正在发生的事情是自动完成功能正在通过GET调用php文件,该文件会返回一个值数组,自动键入内容会在您键入时用于填充列表。

一旦用户在州字段中输入了信息,我们希望首先获取 所有 城市,然后获取与该州关联的所有城市。本质上,我们将两次设置自动完成功能。

在这里,您可以使用-处理自动完成功能:

// set autocomplete
    function setAutocomplete(data) {
        $('#city').autocomplete({
            source: data,
            minLength: 1
        });
    }

现在设置自动完成功能,显示所有城市。

// autocomplete default
    setAutocomplete('getautocomplete.php');

在这一点上,如果您开始在城市输入字段中输入内容,那么您将看到所有城市,无论其状态如何。

现在,我们将处理用户在状态输入中输入状态时发生的情况:

// get cities based on state input    
    function getCities() {
        var state_name = $('#state').val();
        setAutocomplete('getautocomplete.php?state='+state_name);
    }

就是这样!当您输入州名而对该字段失去关注时,它将更改状态输入字段上的自动完成功能,再次调用getautocomplete.php,但这一次是按州名进行过滤。

现在让我们看一下PHP文件。

// getautocomplete.php

从顶部->设置数据库连接:

$mysqli = new mysqli('localhost', 'root', '', 'php_autocomplete');

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

然后设置SQL查询所需的参数。

// get parameters
$term    = isset($_GET['term']) ? $_GET['term'] : NULL;
$state   = isset($_GET['state']) ? $_GET['state'] : NULL;

现在,我们检查是否已设置state参数,因为这确定了我们使用哪个SQL SELECT字符串。

// set query dependant on if state available
if ( $state == NULL ) {
    // get all cities
    $query = 'SELECT city 
              FROM cities 
              WHERE city LIKE "%'.$term.'%" 
              ORDER BY city';
} else {
    // filter by state
    $query = 'SELECT city 
              FROM cities 
              INNER JOIN states ON cities.state_id=states.id 
              WHERE (state="'.$state.'" AND city LIKE "%'.$term.'%") 
              ORDER BY city';
}

最后,我们返回并打印出结果(本质上是一个数组),这是JQuery自动完成将用于填充自动完成列表的内容:

// get results
$results = $mysqli->query($query);
$json    = array();

while ( $city = $results->fetch_array() ) {
    $json[] = array( 'value' => $city['city'], 'label' => $city['city'] );
}

echo json_encode($json);

您不需要使用AJAX。自动完成本质上已经在getautocomplete.php上执行AJAX。我们只是通过添加?state =
state_name为其提供附加参数,然后在PHP中考虑该参数并根据需要编写SQL SELECT语句。

这是这两个文件的完整代码,因此您可以在上下文中看到它,而无需我提供任何评论。我希望这可以帮助您解决问题。您应该能够使用表格和表格来完成这项工作。

//// autocomplete.php

<!doctype html>
<html>
<head>
   <meta charset="utf-8">
   <title>Autocomplete</title>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
   <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
   <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" />
</head>
<body>
   <form action="#">
      <label for="state">State: </label>
      <input type="text" name="state" id="state" onBlur="getCities();"/>
      <label for="city">City: </label>
      <input type="text" id="city" name="city"/>
   </form>
   <script type="text/javascript">
      // set autocomplete
      function setAutocomplete(data) {
          $('#city').autocomplete({
            source: data,
            minLength: 1
          });
      }

      // autocomplete default
      setAutocomplete('getautocomplete.php');

      // get cities based on state input    
      function getCities() {
        var state_name = $('#state').val();
        setAutocomplete('getautocomplete.php?state='+state_name);
      }
  </script>
</body>
</html>

///// getautocomplete.php

<?php

$mysqli = new mysqli('localhost', 'root', '', 'php_autocomplete');

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

// get parameters
$term    = isset($_GET['term']) ? $_GET['term'] : NULL;
$state   = isset($_GET['state']) ? $_GET['state'] : NULL;

// set query dependant on if state available
if ( $state == NULL ) {
    // get all cities
    $query = 'SELECT city 
              FROM cities 
              WHERE city LIKE "%'.$term.'%" 
              ORDER BY city';
} else {
    // filter by state
    $query = 'SELECT city 
              FROM cities 
              INNER JOIN states ON cities.state_id=states.id 
              WHERE (state="'.$state.'" AND city LIKE "%'.$term.'%") 
              ORDER BY city';
}

// get results
$results = $mysqli->query($query);
$json    = array();

while ( $city = $results->fetch_array() ) {
    $json[] = array( 'value' => $city['city'], 'label' => $city['city'] );
}

echo json_encode($json);

?>
2021-04-14