我在检查form element SELECT
的server PHP code
时遇到问题。
我在这里找到了一个相似的link,但在讨论中略有不同。
我的HTML代码是
<body>
<div id="header">
<h1>Please add your landed property to advertise</h1>
</div>
<div id="background">
<form name="advertiseForm" id="advertiseForm" method="post" >
<br /><br /><br />
<select name="stories" id="stories" required="required"/>
<option value="Stories" >Number of stories</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="morethan4">More than 4</option>
<select/>
<label for="stories">Please select for number of stories</label>
<div id="stories-error" class="error-box" style="color:#FF0000"></div>
<br /><br /><br />
<select name="bedrooms" id="bedrooms" required="required"/>
<option value="Bedrooms" >Number of bedrooms</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<select/>
<label for="numbedrooms">Please select for number of bedrooms</label>
<div id="bedrooms-error" class="error-box" style="color:#FF0000"></div>
</form>
</body>
我已经使用
two SELECT elements at my form
使用AJAX将form elements
和data: $("form").serialize(),
发送到服务器。</body>
<script>
function sendtoServer() {
$.ajax({
url: "advertisementdatavalidationatserver.php",
type: "POST",
data: $("form").serialize(),
success: function(ret){
alert(ret.message);
if(ret.error == true){
if(ret.message.indexOf("Storieserror")>=0){
$('#stories-error').css('display', 'block');
$('#stories-error').html('Please enter number of stories at your building');
}else{
$('#stories-error').html('');
}
if(ret.message.indexOf("Bedroomserror")>=0){
$('#bedrooms-error').css('display', 'block');
$('#bedrooms-error').html('Please enter number of bedrooms at your building');
}else{
$('#bedrooms-error').html('');
}
}else{
$('#stories-error').html('');
$('#bedrooms-error').html('');
}
},
error: function(){
// the AJAX request failed as in timed out / bad url etc.
}
});
}
</script>
</html>
我在服务器端进行验证的PHP代码是
<?php
$data = array();
$data['error'] = false;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($_POST['stories'] == "Stories"){
$data['error'] = true;
$data['message'][] = "Storieserror";
}
if ($_POST['bedrooms'] == "Bedrooms"){
$data['error'] = true;
$data['message'][] = "Bedroomserror";
}
}
// then echo the $data array you have built as JSON to use in jquery.
//This will be what is returned in your AJAX request
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($data);
?>
这里的问题是
SELECT for bedrooms
,无论我如何更改option values to 1,2,3,4,..,
,服务器端总是以Bedroomserror
的形式返回,这意味着无论我如何更改其他option values, client side always send 'Bedrooms' value to server.
Stories is working fine
。可能是什么问题呢?
编辑:
现在我发现了问题。我看到序列化的数据为
alert($("form").serialize());
附件中显示了序列化的数据,有趣的是有重复的数据(带下划线)。第一个是
stories=3&bedrooms=2&bathrooms=2
。然后还有一个重复的消息,bedrooms=Bedrooms&bathroom=Bathrooms
,我认为我的PHP代码捕获了第二个消息,并且该值从未更改。最佳答案
在此处重新创建代码进行测试时,我没有遇到您描述的问题。为bedrooms
选择编号选项不会显示错误,并且返回的值正确。
要解决此类问题,建议采取以下措施:
确保由sendToServer
javascript函数序列化的值是您期望的值。通过console.log()
或类似的方式输出它们,以检查您在表单中选择的内容实际上已发送到PHP脚本。
我必须对您提供的代码进行一些更改才能使其正常运行。我在这里的假设是您已经具备了此功能,但是您的问题中并未包含此功能,因此我引用了我在下面所做的更改,因为它们是使测试正常进行所必需的:
将有效的DOCTYPE和head
标记添加到HTML标记中
将input
按钮添加到表单以进行提交
添加一个script
标记,该标记可插入jQuery
在sendToServer
调用中将对$(document).ready(function(){});
函数的调用包装起来,由click
提交元素上的input
事件触发(或者您提交表单)
[可选]我在您的else
语句后检查了if
值后添加了$_POST['bedrooms']
部分,以便可以检查选择的值是什么
希望这可以帮助。