Php 为什么会缺少!空($\u GET)是否生成错误?
我的PHP代码是:Php 为什么会缺少!空($\u GET)是否生成错误?,php,Php,我的PHP代码是: <?php if ((!empty($_POST)) && ($_POST['action'] == 'addRunner')) { $fname = htmlspecialchars($_POST['txtFirstName']); $lname = htmlspecialchars($_POST['txtLastName']); $gender = htmlspecialchars($
<?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.');
}
$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;
}
elseif($_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)));
}
?>
而不是
if ((!empty($_POST)) && ($_POST['action'] == 'addRunner'))
但是,原始代码会生成一个错误:
注意:未定义索引:第3行E:\wamp\www\Z\u jquery\ch9\service.php中的操作
我猜这是因为除非生成POST请求,否则$u POST['action']的值没有赋值。对吗?
但是,即使代码不包含检查$\u GET['action']
是否为空的步骤,即使出现POST请求(并且假定$\u GET['action']
为空),代码仍能正常运行。为什么会发生这种情况
为什么以下方法有效:
elseif($_GET['action'] == 'getRunners')
还有,我为什么不写:
elseif((!empty($_GET)) && ($_GET['action'] == 'getRunners'))
请注意,正如预期的那样,生成一个空页面,并且没有警告或错误
我猜这是因为除非生成POST请求,否则$u POST['action']的值不会被赋值。对吗
是的,这是正确的。除非请求是POST请求,否则$\u POST
数组为空
即使发生POST请求(推测$\u GET['action']为空)。为什么会发生这种情况?为什么以下操作有效:
elseif($\u GET['action']=='getRunners')
这是因为如果请求是POST请求,它将进入第一个if
块,而不是实际运行else if
或甚至在进入第一个if
块时尝试由else if
条件进行评估
请注意,正如预期的那样,生成一个空页面,并且没有警告或错误
如果正在查找名为操作的GET参数,则不会生成任何警告。如果运行此命令,
http://localhost/z_jquery/ch9/service.php?mytest=addRunners
由于get数组中不存在参数action
,您将得到一个未定义的索引警告空测试将检查$\u POST是否存在(即,表单已将数据发布到此代码中,而不是仅在浏览器中输入其URL,这不会导致表单包含有效数据)而且,由于您使用的是&
如果$\u POST不存在,它就不会麻烦进行第二次测试,如果$\u POST
不存在,则会产生错误。。我猜这是因为除非生成POST请求,否则$\u POST['action']的值不会被赋值。正确吗?是的。
elseif((!empty($_GET)) && ($_GET['action'] == 'getRunners'))