Php 如果没有设置正确的action属性,下面的代码是如何工作的?
我有一个代码,在一个名为Php 如果没有设置正确的action属性,下面的代码是如何工作的?,php,jquery,ajax,Php,Jquery,Ajax,我有一个代码,在一个名为service.php的文件中,它的作用如下: if ((!empty($_POST)) && ($_POST['action'] == 'addRunner')) { // Code to add entry into database } function fail($message) { die(json_encode(array('status' => 'fail', 'message' => $message)))
service.php
的文件中,它的作用如下:
if ((!empty($_POST)) && ($_POST['action'] == 'addRunner'))
{
// Code to add entry into database
}
function fail($message)
{
die(json_encode(array('status' => 'fail', 'message' => $message)));
}
function success($message)
{
die(json_encode(array('status' => 'success', 'message' => $message)));
}
使用AJAX通过POST方法发送数据的文件为:
$("#btnSave").click(function()
{
var data = $("#addRunner :input").serialize();
$.post($("#addRunner").attr('action'), data, function(json)
{
if(json.status == 'fail')
alert(json.message);
if(json.status == 'success')
{
alert(json.message);
clearInputs();
}
},"json");
});
表单#addRunner
的操作属性为:
<form action="service.php" id="addRunner" name="addRunner" method="POST">
<!-- Form Elements -->
</form>
我的jQuery是:
$(document).ready(function(){
var FREQ = 10000 ;
var repeat = true;
function showFrequency(){
$("#freq").html( "Page refreshes every " + FREQ/1000 + " second(s).");
}
function startAJAXcalls(){
if(repeat){
setTimeout( function() {
getDBRacers();
startAJAXcalls();
},
FREQ
);
}
}
function getXMLRacers(){
$.ajax({
url: "finishers.xml",
cache: false,
dataType: "xml",
success: function(xml){
$('#finishers_m').empty();
$('#finishers_f').empty();
$('#finishers_all').empty();
$(xml).find("runner").each(function() {
var info = '<li>Name: ' + $(this).find("fname").text() + ' ' + $(this).find("lname").text() + '. Time: ' + $(this).find("time").text() + '</li>';
if( $(this).find("gender").text() == "m" ){
$('#finishers_m').append( info );
}else if ( $(this).find("gender").text() == "f" ){
$('#finishers_f').append( info );
}else{ }
$('#finishers_all').append( info );
});
getTimeAjax();
}
});
}
function getDBRacers()
{
$.getJSON("service.php?action=getRunners", function(json)
{
if(json.runners.length > 0)
{
$('#finishers_m').empty();
$('#finishers_f').empty();
$('#finishers_all').empty();
$.each(json.runners, function()
{
var info = '<li>Name: ' + this['fname'] + ' ' + this['lname'] + '. Time: ' + this['time'] + '</li>';
if(this['gender'] == 'm')
{
$('#finishers_m').append(info);
}
else if(this['gender'] == 'f')
{
$('#finishers_f').append(info);
}
else {}
$('#finishers_all').append(info);
});
}
});
getTimeAjax();
}
function getTimeAjax(){
var time = "";
$.ajax({
url: "time.php",
cache: false,
success: function(data){
$('#updatedTime').html(data);
}
});
}
$("#btnStop").click(function(){
repeat = false;
$("#freq").html( "Updates paused." );
});
$("#btnStart").click(function(){
repeat = true;
startAJAXcalls();
showFrequency();
});
showFrequency();
getDBRacers();
startAJAXcalls();
$("#btnSave").click(function()
{
var data = $("#addRunner :input").serialize();
$.post($("#addRunner").attr('action'), data, function(json)
{
if(json.status == 'fail')
alert(json.message);
if(json.status == 'success')
{
alert(json.message);
clearInputs();
}
},"json");
});
function clearInputs()
{
$("#addRunner:input").each(function(){
$(this).val('');
});
}
$("#addRunner").submit(function() {
return false;
});
});
$(文档).ready(函数(){
var-FREQ=10000;
var repeat=true;
函数showFrequency(){
$(“#freq”).html(“页面每”+freq/1000+“秒刷新一次”);
}
函数startAJAXcalls(){
如果(重复){
setTimeout(函数(){
getDBRacers();
startAJAXcalls();
},
频率
);
}
}
函数getXMLRacers(){
$.ajax({
url:“finishers.xml”,
cache:false,
数据类型:“xml”,
成功:函数(xml){
$('#finisher_m').empty();
$('#finisher_f')。空();
$(“#finisher_all”).empty();
$(xml).find(“runner”).each(函数(){
var info='Name:'+$(this).find(“fname”).text()++'+$(this).find(“lname”).text()++'.Time:'+$(this.find(“Time”).text()++' ';
if($(this).find(“性别”).text()=“m”){
$('#finisher_m')。附加(信息);
}else if($(this).find(“性别”).text()=“f”){
$('#finisher_f')。附加(信息);
}else{}
$('#finisher_all')。附加(信息);
});
getTimeAjax();
}
});
}
函数getDBRacers()
{
$.getJSON(“service.php?action=getRunners”,函数(json)
{
如果(json.runners.length>0)
{
$('#finisher_m').empty();
$('#finisher_f')。空();
$(“#finisher_all”).empty();
$.each(json.runners,function()
{
var info='名称:'+this['fname']+'+this['lname']+'。时间:'+this['Time']+' ;
如果(这个['gender']='m')
{
$('#finisher_m')。附加(信息);
}
else if(这个['gender']='f')
{
$('#finisher_f')。附加(信息);
}
else{}
$('#finisher_all')。附加(信息);
});
}
});
getTimeAjax();
}
函数getTimeAjax(){
var-time=“”;
$.ajax({
url:“time.php”,
cache:false,
成功:功能(数据){
$('#updatetime').html(数据);
}
});
}
$(“#btnStop”)。单击(函数(){
重复=错误;
$(“#freq”).html(“更新暂停”);
});
$(“#btnStart”)。单击(函数(){
重复=正确;
startAJAXcalls();
showFrequency();
});
showFrequency();
getDBRacers();
startAJAXcalls();
$(“#btnSave”)。单击(函数()
{
var data=$(“#addRunner:input”).serialize();
$.post($(“#addRunner”).attr('action')、数据、函数(json)
{
如果(json.status=='fail')
警报(json.message);
如果(json.status==“成功”)
{
警报(json.message);
clearInputs();
}
}“json”);
});
函数clearInputs()
{
$(“#addRunner:input”)。每个(函数(){
$(this.val(“”);
});
}
$(“#addRunner”).submit(函数(){
返回false;
});
});
最后,Service.php的内容是:
<?php
if ((!empty($_POST)) && ($_POST['action'] == 'addRunner'))
{
$fname = htmlspecialchars($_POST['txtFirstName']);
$lname = htmlspecialchars($_POST['txtLastName']);
$gender = htmlspecialchars($_POST['ddlGender']);
$minutes = htmlspecialchars($_POST['txtMinutes']);
$seconds = htmlspecialchars($_POST['txtSeconds']);
if(preg_match('/[^\w\s]/i', $fname) || preg_match('/[^\w\s]/i', $lname))
{
fail('Invalid name provided.');
}
if( empty($fname) || empty($lname) )
{
fail('Please enter a first and last name.');
}
if( empty($gender) )
{
fail('Please select a gender.');
}
if( empty($minutes) || empty($seconds) ) {
fail('Please enter minutes and seconds.');
}
$time = $minutes.":".$seconds;
$query = "INSERT INTO runners SET first_name='$fname', last_name='$lname', gender='$gender', finish_time='$time'";
$result = db_connection($query);
if ($result)
{
$msg = "Runner: ".$fname." ".$lname." added successfully" ;
success($msg);
}
else
{
fail('Insert failed.');
}
exit;
}
else if($_GET['action'] == 'getRunners')
{
$query = "SELECT first_name, last_name, gender, finish_time FROM runners ORDER BY finish_time ASC";
$result = db_connection($query);
$runners = array();
while($row = mysqli_fetch_array($result))
{
array_push($runners, array('fname' => $row['first_name'], 'lname' => $row['last_name'], 'gender' => $row['gender'], 'time' => $row['finish_time']));
}
echo json_encode(array("runners" => $runners));
exit;
}
function db_connection($query)
{
$dbc = mysqli_connect('127.0.0.1','runner_db_user','runner_db_password','race_info')
or die('Error connecting to Database');
return mysqli_query($dbc,$query);
}
function fail($message)
{
die(json_encode(array('status' => 'fail', 'message' => $message)));
}
function success($message)
{
die(json_encode(array('status' => 'success', 'message' => $message)));
}
?>
它将起作用,原因是操作
是隐藏字段中名称
属性的值。这不是您的表单
标记的操作。如果出于测试目的而想使其失败,则应在表单中将隐藏字段的值更改为其他值,然后再次检查
这是你隐藏的领域
<input type="hidden" id="action" name="action" value="addRunner">
你知道:GET和POST之间的区别吗?@LuciaAngermüller是的,但这并不能解释如何将#addRunner
的action属性从service.php
更改为service.php?action=addRunners
。请解释一下,这是因为你的jquery脚本。我不想把一切都告诉你,但是你可以通过POST将数据发送到GET地址。您应该查看jquery serialize、post等@LuciaAngermüller是否愿意详细说明这到底是如何发生的?如果我错了,请纠正我,但是$(“#addRunner”).attr('action')
表示service.php
的值,不是吗?隐藏字段的相关性如何?在哪里访问它的值?var data=$(“#addRunner:input”).serialize()代码>您正在将此数据传递给ajax。您是对的,上面的jquery显示了service.php
的值。因此,当您使用serialize时,它将获取表单中的所有输入字段和下拉列表。这就是隐藏字段值通过ajax的原因。因此,基本上,当我们编写$\u POST['action']
时,它指的是名为action
的隐藏字段的值,而不是表单元素的action属性,对吗。您的情况就是这样:)
<input type="hidden" id="action" name="action" value="addRunner">
<input type="hidden" id="action" name="action" value="addRunners">
if ((!empty($_POST)) && ($_POST['action'] == 'addRunner'))