基本上我想做的是,当用户将重点放在另一输入上时,将一个值从表单保存到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); ?>
我能够获得您想要的功能。我的例子和解释如下:
假设有两个表:
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); ?>