请有人帮忙,我真的坚持了2天:|
我有一个PHP表单,我想通过标题或演员来启用用户选择的电影。 所以,我正在考虑这些值的下拉菜单(moviebyTitle,moviebyActor)。为了按标题选择电影,我使用jQuery自动完成,从我的数据库获取电影标题,它工作正常。
这是我的代码:
<select id="selectType" name="source">
<option value="">MoviesBy</option>
<option value="byTitle">byTitle</option>
<option value="byActor">byActor</option>
</select>
<input type="textbox" name= "tag" id="tags">
<div id="byActor" class="style-sub-1" style="display: none;" name="stylesub1" onchange="ChangeDropdowns(this.value)">
<select name="films[]" multiple="multiple" width="200px" size="10px">
<?php
include('moviedropdown.php');
?>
</select>
这是javascript:
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/minified/jquery-ui.min.css" type="text/css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#tags").autocomplete({
source: "actorsauto.php",
minLength: 2
});
$("#selectType").change(function () {
if ($(this).val() == "byTitle")
$("#tags").autocomplete("option", "source", "filmsauto.php");
else
if ($(this).val() == "byActor")
$("#tags").autocomplete({
source: "actorsauto.php",
minLength: 2,
select: function (event, ui){
var selectedVal = $(this).val(); //this will be your selected value from autocomplete
// Here goes your ajax call.
$.post("actions.php", {q: selectedVal, q2: $("#selectType").val()}, function (response){
// response variable above will contain the option tags. Simply put in the dropdown.
$("#movieImdbId").html(response);
});
}
});
}
});
});
</script>
这是actions.php :(请参阅上面的javascript部分)
<?php
if(isset($_GET['q']) && !empty($_GET['q']) && isset($_GET['q2']) && !empty($_GET['q2']) ){
// Here goes the cleaning code. Never use the variables received from $_GET and $_POST directly before processing it for malicious code.
$q = $_GET['q'];
$q2 = $_GET['q2'];
//$sql = fetchResults($q, $q2); // Some function which will run a database query and return some records in either object collection or arrays etc.
//I added this part to fetch data from DB
include('imdbConnection.php');
$sql = $conn->prepare('SELECT DISTINCT movieImdbId FROM movie_roleNames WHERE castName = :q');
$sql->execute(array(':q' => $q));
$html = "";
while($row = $sql->fetchAll(PDO::FETCH_OBJ)){
$option = '<option value="' . $row->movieImdbId . '">' . $row->movieImdbId . '</option>';
$html = $option;
}
echo $html; // <-- this $html will end up receiving inside that `response` variable in the `$.post` ajax call.
exit;
}
?>
我只是想知道如何根据用户在文本框中输入的值添加下拉列表。例如,如果用户在自动完成文本框中写入“Tom Cruise”,则会添加一个下拉列表,其中显示“Tom Cruise”已播放的电影。 (我在我遇到问题的JavaScript代码中发表了一条评论)
我真的搜索了很多,但所有示例都在哪里动态填充一些下拉列表(like this one,或根据下拉列表中选择的值添加文本框...
请帮助,我真的不是指有人为我编写代码,我只是想找到任何样本或某种方式,我可以学习如何去做。
谢谢,
答案 0 :(得分:1)
您应该拥有以下内容。
您实际需要的是当您输入自动完成框并选择某些内容时,您需要保留该值以供日后使用。之后,您需要使用ajax调用调用服务器(php脚本),并从自动完成框中发送该值以及下拉列表中的值(仅在您需要时)。那个php脚本需要在循环中生成一堆类似下面的内容并将整个html保存在变量中。
<option value='v1'>Value1</option>
<option value='v2'>Value2</option>
之后,将其发送回调用的ajax脚本,然后你需要把它作为你试图填充的下拉内容。
这里有一些关于如何完成javascript部分的示例代码。
<select id="filmsdd" name="films[]" multiple="multiple" width="200px" size="10px">
</select>
<script>
$(document).ready(function () {
$("#tags").autocomplete({
source: "actorsauto.php",
minLength: 2,
select: function (event, ui){
var selectedVal = $(this).val(); //this will be your selected value from autocomplete
// Here goes your ajax call.
$.post("actions.php", {q: selectedVal, q2: $("#selectType").val()}, function (response){
// response variable above will contain the option tags. Simply put in the dropdown.
$("#filmsdd").html(response);
});
}
});
});
<script>
修改强>
path/to/somefile.php
将是与您的其他网站文件一起存储在您的目录中的任何文件。我们称之为actions.php
(我已更新$ .post ajax调用)
当$.post
运行时,它会向actions.php
发送请求以及两个变量q
和q2
。这些变量名称可以是任何名称。
q
包含自动完成框中的选定值。
q2
包含下拉列表中的所选类型。
actions.php
中,您最终会得到类似的结果。
if(isset($_GET['q']) && !empty($_GET['q']) && isset($_GET['q2']) && !empty($_GET['q2']) ){
// Here goes the cleaning code. Never use the variables received from $_GET and $_POST directly before processing it for malicious code.
$q = $_GET['q'];
$q2 = $_GET['q2'];
$sql = fetchResuls($q, $q2); // Some function which will run a database query and return some records in either object collection or arrays etc.
// Initialize a variable that you will send back to your ajax call, its still waiting for this script to be completed.
$html = "";
// Assuming your function returned a list of objects. Loop through the records.
while($row = mysql_fetch_object($sql)){
$option = '<option value="' . $row->property_id . '">' . $row->property_name . '</option>';
$html .= $option;
}
echo $html; // <-- this $html will end up receiving inside that `response` variable in the `$.post` ajax call.
exit;
}
我希望这会有所帮助。
答案 1 :(得分:0)
真正的问题是,第二个下拉框的重点是什么。为什么一旦他们选择了演员,你就不要只在“表格”中显示所有电影。
我建议使用统一的“搜索”框,在PHP端查询你的电影和演员,以这种方式显示所有结果?
如果他们选择一个类型为actor的autoComplete值,则显示所有actor的电影。如果他们选择“电影”类型的自动完成值 - 显示所有电影。
有效 - 你正在取消By Actor或By Movie广播,转而选择更好的搜索栏。