我的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.');
}
$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'))
然而
if ($_POST['action'] == 'addRunner')
代替,原來的代碼生成一個錯誤說
聲明:未定義指數:行動E:\ WAMP \ WWW \ Z_jquery \ CH9 \ service.php上線3
我猜這是因爲,除非生成POST請求,$的價值_POST ['action']沒有賦值。那是對的嗎?
但即使代碼不包含檢查$_GET['action']
是否爲空的步驟,即使發生POST請求(大概$_GET['action']
爲NULL),代碼仍可以完美運行。爲什麼會發生?
爲什麼以下工作:
elseif($_GET['action'] == 'getRunners')
和,我爲什麼不都寫:
elseif((!empty($_GET)) && ($_GET['action'] == 'getRunners'))
注意http://localhost/z_jquery/ch9/service.php?action=addRunners產生一個空白頁,符合市場預期,並沒有警告或錯誤。
* ..我猜這是因爲除非產生一個POST請求,$ _POST ['action']的值沒有賦值。這是正確的嗎?*是的。 –