我的网站上有一个带有3个下拉框的表格。用户从每个选项中选择一个选项并点击提交后,数据将被发布到外部php文件,这会向MySQL发出查询,然后重新加载页面并发布结果。我想让这更加花哨 - 使用ajax而无需重新加载页面。问题是我完全没胆。我搜索实习并尝试了几个例子但没有结果。这是代码:
HTML FORM:
<form name="showprice" id="showprice" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="country" id="country">
<option value="">Select Country</option>
</select>
<select name="industry" id="industry" onchange="setOptions(document.showprice.industry.options[document.showprice.industry.selectedIndex].value);">
<option value="">Select Industry</option>
</select>
<select name="quality" id="quality">
<option value=" " selected="selected">Select country and industry first.</option>
</select>
<input value="Submit" type="submit" name="submit" id="submit">
</form>
<script type="text/javascript">
var frmvalidator = new Validator("showprice");
frmvalidator.addValidation("country","req","Please select country");
frmvalidator.addValidation("industry","req","Please select industry");
frmvalidator.addValidation("quality","req","Please select quality");
</script>
注意:我已删除了节省空间的选项。
外部view.prices.php:
它在另一个文件夹中,现在我用
调用结果<?php include('includes/view.prices.php'); ?>
现在的代码是:
if(isset($_POST['submit'])) {
include ('config.php');
$con1 = mysql_connect($server, $username, $password);
if (!$con1)
{
die(<b>Could not connect: </b> . mysql_error());
}
echo'<br /><br /><table id="myTable" class="tablesorter" align="center">
<thead>
<tr>
**some table headers (8 columns)**
</tr>
</thead>
<tbody>';
$cou = $_POST['country'];
$ind = $_POST['industry'];
$qua = $_POST['quality'];
$sql = "SELECT * FROM $ind WHERE quality=$qua AND desig=$cou ORDER BY id ASC" or die('<b>Data Insert Error:</b> ' . mysql_error());
echo("<tr>
**Some table results with 8 variables taken from the MySQL database**
</tr>");
if (!mysql_query($sql,$con1))
{
die('Error: ' . mysql_error());
}
}
echo '</tbody>
</table>';
mysql_close($con1);
}}
else {
echo '<div class="grid_9">
<p><b>TIP:</b> Pick country, industry and quality from the drop-down above and hit "Submit" button to view results.</p>
</div>';
}
任何帮助都非常感谢。
答案 0 :(得分:1)
我会调查jQuery。您将要禁用默认处理程序:
e.preventDefault();
然后使用jQuery,您可以执行以下操作:
$.ajax({
type: 'POST',
url: '',
data: $("#showprice").serialize(), dataType: 'json',
success: function(data){
if( data['status'] == 'success' )
{
// Do stuff here
}
}
});
该代码假定您将返回一个json编码的字符串。哪个jQuery可以毫无问题地处理。
答案 1 :(得分:1)
我一直都在使用jQuery。
$(function() {
$('#showprice').sumbit(function() {
$.post('includes/view.prices.php', $(this).serialize(),function(data) {
$('#idoftag').html(data);
})
});
})
答案 2 :(得分:0)
在朋友的帮助下,我设法做到了这一点:
1)在文件的头部,其中是表单add:
<script type="text/javascript" src="path-to-jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var working = false;
$('#id-of-form').submit(function(e){
e.preventDefault();
if(working) return false;
working = true;
//$('#submit').val('Sending..');
$.post('path-to-php-file-to-be-executed',$('#id-of-form').serialize(),function(msg){
working = false;
//$('#submit').val('Submit');
$('#id-of-div-where-result-will-be-outputed').html(msg);
});
});
});
</script>
2)在表单添加输出数据的div
之后<div id="output_div"></div>
3)在路径到php-for-execution中添加:
if(isset($_POST['id-of-form-field-1']) && isset($_POST['id-of-form-field-2']) && isset($_POST['id-of-form-field-3'])) {
// some queries here
}
这就是全部
答案 3 :(得分:0)
在您的表单中,引用您当前的页面作为操作值...例如,如果您的页面是index.php。然后使用action =“index.php”和method =“post”。在你希望数据显示的div中,以正确的格式编写php代码,并用if($ _ POST){ - 你的数据库检索代码 - }?&gt;包含所有这些代码。这意味着您的帖子操作将调用相同的页面,这将使您的代码周围的条件成立,从而执行。希望这会有所帮助,它当时唠叨我但是我的确有效。
答案 4 :(得分:0)
在Notepad ++中,看起来你的{}不匹配。当我在die语句之后删除一个而在else之上删除一个时,它们排成一行。