我现在正在通过一个简单的Web表单问题练习php。长话短说,我只需要创建一个非常基本的Web表单即可使用二维数组的欧洲城市,这些表单以公里为单位显示距其他欧洲城市的距离。我需要做的就是创建一个网络表单,您可以在其中输入在两维数组中找到的任何城市,并计算起点城市和终点城市之间的距离(即输入“文本字段中的“柏林”和“布拉格”。
我认为我的问题几乎可以解决,但是问题是phpstorm告诉我某些变量是未定义的,即使它们已经在我的函数中定义为该函数之前的变量。如果这个问题看起来微不足道,我深表歉意,但是我现在正在学习摘要php。这是下面的代码。我在一页中包含了html和php代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Distance between European Cities</title>
</head>
<body>
<h1>Distance between European Cities</h1>
<h2>Enter valid European cities from this list: Berlin, Moscow, Paris, Prague, Rome</h2>
<?php
$Distances = array(
"Berlin" => array("Berlin" => 0, "Moscow" => 1607.99, "Paris" => 876.96, "Prague" => 280.34, "Rome" => 1181.67),
"Moscow" => array("Berlin" => 1607.99, "Moscow" => 0, "Paris" => 2484.92, "Prague" => 1664.04, "Rome" => 2374.26),
"Paris" => array("Berlin" => 876.96, "Moscow" => 641.34, "Paris" => 0, "Prague" => 885.38, "Rome" => 1105.76),
"Prague" => array("Berlin" => 280.34, "Moscow" => 1607.99, "Paris" => 885.38, "Prague" => 0, "Rome" => 922),
"Rome" => array("Berlin" => 1181.67, "Moscow" => 2374.26, "Paris" => 1105.76, "Prague" => 922, "Rome" => 0));
$KMtoMiles = 0.62;
$City1 = $_POST['firstCity'];
$City2 = $_POST['secondCity'];
function euDis($City1, $City2, $Distances){
if (empty($City1) || empty($City2)) {
echo "Please input two cities in the required fields.<br />\n";
} elseif (in_array($City1, $Distances) == FALSE || in_array($City2, $Distances) == FALSE) {
echo "You inputted one or more cities that are not in our list.<br />";
} else {
if (isset($_POST['submit'])) {
$City1 = stripslashes($_POST['firstCity']);
$City2 = stripslashes($_POST['secondCity']);
if (isset($Distances[$City1][$City2])) {
echo "<p>The distance from $City1 to $City2 is " . $Distances[$City1][$City2] . " kilometers or " . round((0.62 * $Distances[$City1][$City2]), 2) . " miles.</p>\n";
} else {
echo "<p>$City1 and $City2 are not in this list.</p>\n";
}
}
}
}
?>
<form action= "eudistance.php" method="post">
City 1: <input type="text" name="firstCity" /><br />
City 2: <input type="text" name="secondCity" /><br />
<input type="reset" value="Clear All" />
<input type="submit" name="submit" value="Enter" />
</form>
</body>
</html>
答案 0 :(得分:1)
您的php代码首先执行,因此您会遇到一些错误。只需添加
if(isset($_POST['submit'])){
...
}
在您的php代码中,以便您的php代码仅在提交表单详细信息后才会执行。
$City1 = $_POST['firstCity'];
$City2 = $_POST['secondCity'];
以上两个变量未初始化,它们从表单获取值,因此在执行php代码之前需要提交表单数据。然后应该调用该函数来计算距离。
函数调用:
if(isset($_POST['submit']))
{
$KMtoMiles = 0.62;
$City1 = $_POST['firstCity'];
$City2 = $_POST['secondCity'];
euDis(trim($City1),trim($City2)); //function calling
}
像这样:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Distance between European Cities</title>
</head>
<body>
<h1>Distance between European Cities</h1>
<h2>Enter valid European cities from this list: Berlin, Moscow, Paris, Prague, Rome</h2>
<?php
if(isset($_POST['submit']))
{
$KMtoMiles = 0.62;
$City1 = $_POST['firstCity'];
$City2 = $_POST['secondCity'];
euDis(trim($City1),trim($City2));
}
function euDis($City1, $City2){
$Distances = array(
"Berlin" => array("Berlin" => 0, "Moscow" => 1607.99, "Paris" => 876.96, "Prague" => 280.34, "Rome" => 1181.67),
"Moscow" => array("Berlin" => 1607.99, "Moscow" => 0, "Paris" => 2484.92, "Prague" => 1664.04, "Rome" => 2374.26),
"Paris" => array("Berlin" => 876.96, "Moscow" => 641.34, "Paris" => 0, "Prague" => 885.38, "Rome" => 1105.76),
"Prague" => array("Berlin" => 280.34, "Moscow" => 1607.99, "Paris" => 885.38, "Prague" => 0, "Rome" => 922),
"Rome" => array("Berlin" => 1181.67, "Moscow" => 2374.26, "Paris" => 1105.76, "Prague" => 922, "Rome" => 0));
if (empty(trim($City1)) || empty(trim($City2))) {
echo "Please input two cities in the required fields.<br />\n";
}
else {
if (isset($Distances[$City1][$City2])) {
echo "<p>The distance from $City1 to $City2 is " . $Distances[$City1][$City2] . " kilometers or " . round((0.62 * $Distances[$City1][$City2]), 2) . " miles.</p>\n";}
else {
echo "<p>$City1 and $City2 are not in this list.</p>\n";
} }
}
?>
<form action= "" method="post">
City 1: <input type="text" name="firstCity" /><br />
City 2: <input type="text" name="secondCity" /><br />
<input type="reset" value="Clear All" />
<input type="submit" name="submit" value="Enter" />
</form>
</body>
</html>
答案 1 :(得分:1)
我已经更改了以下内容。
keys
。如果您的变量是数组成员而不是键,则in_array
返回true
。<?php
function euDis($City1, $City2){
$Distances = array(
"Berlin" => array("Berlin" => 0, "Moscow" => 1607.99, "Paris" => 876.96, "Prague" => 280.34, "Rome" => 1181.67),
"Moscow" => array("Berlin" => 1607.99, "Moscow" => 0, "Paris" => 2484.92, "Prague" => 1664.04, "Rome" => 2374.26),
"Paris" => array("Berlin" => 876.96, "Moscow" => 641.34, "Paris" => 0, "Prague" => 885.38, "Rome" => 1105.76),
"Prague" => array("Berlin" => 280.34, "Moscow" => 1607.99, "Paris" => 885.38, "Prague" => 0, "Rome" => 922),
"Rome" => array("Berlin" => 1181.67, "Moscow" => 2374.26, "Paris" => 1105.76, "Prague" => 922, "Rome" => 0));
if (empty(trim($City1)) || empty(trim($City2))) {
echo "Please input two cities in the required fields.<br />";
} elseif ($Distances[$City1] == null || $Distances[$City2] == null) {
echo "You inputted one or more cities that are not in our list.<br />";
} else {
if (isset($Distances[$City1][$City2])) {
echo "<p>The distance from $City1 to $City2 is " . $Distances[$City1][$City2] . " kilometers or " . round((0.62 * $Distances[$City1][$City2]), 2) . " miles.</p>";
} else {
echo "<p>$City1 and $City2 are not in this list.</p>";
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Distance between European Cities</title>
</head>
<body>
<h1>Distance between European Cities</h1>
<h2>Enter valid European cities from this list: Berlin, Moscow, Paris, Prague, Rome</h2>
<?php
if($_POST)
{
euDis($_POST['firstCity'], $_POST['secondCity']);
}
?>
<form action= "" method="post">
City 1: <input type="text" name="firstCity" /><br />
City 2: <input type="text" name="secondCity" /><br />
<input type="reset" value="Clear All" />
<input type="submit" name="submit" value="Enter" />
</form>
</body>
</html>
答案 2 :(得分:0)
代码中有两个问题。首先是在分配后变量之前检查数据是否可用。第二个是距离数组中可用的城市。
解决了您的问题。尝试一次此代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Distance between European Cities</title>
</head>
<body>
<h1>Distance between European Cities</h1>
<h2>Enter valid European cities from this list: Berlin, Moscow, Paris, Prague, Rome</h2>
<?php
$Distances = array(
"Berlin" => array("Berlin" => 0, "Moscow" => 1607.99, "Paris" => 876.96, "Prague" => 280.34, "Rome" => 1181.67),
"Moscow" => array("Berlin" => 1607.99, "Moscow" => 0, "Paris" => 2484.92, "Prague" => 1664.04, "Rome" => 2374.26),
"Paris" => array("Berlin" => 876.96, "Moscow" => 641.34, "Paris" => 0, "Prague" => 885.38, "Rome" => 1105.76),
"Prague" => array("Berlin" => 280.34, "Moscow" => 1607.99, "Paris" => 885.38, "Prague" => 0, "Rome" => 922),
"Rome" => array("Berlin" => 1181.67, "Moscow" => 2374.26, "Paris" => 1105.76, "Prague" => 922, "Rome" => 0));
$KMtoMiles = 0.62;
if(isset($_POST['submit'])){
$City1 = $_POST['firstCity'];
$City2 = $_POST['secondCity'];
if (empty($City1) || empty($City2)) {
echo "Please input two cities in the required fields.<br />\n";
} elseif (is_array($Distances[$City1]) == False || is_array($Distances[$City2])== false ) {
echo "You inputted one or more cities that are not in our list.<br />";
} else {
if (isset($_POST['submit'])) {
$City1 = stripslashes($_POST['firstCity']);
$City2 = stripslashes($_POST['secondCity']);
if (isset($Distances[$City1][$City2])) {
echo "<p>The distance from $City1 to $City2 is " . $Distances[$City1][$City2] . " kilometers or " . round((0.62 * $Distances[$City1][$City2]), 2) . " miles.</p>\n";
} else {
echo "<p>$City1 and $City2 are not in this list.</p>\n";
}
}
}
}
?>
<form action= "" method="post">
City 1: <input type="text" name="firstCity" /><br />
City 2: <input type="text" name="secondCity" /><br />
<input type="reset" value="Clear All" />
<input type="submit" name="submit" value="Enter" />
</form>
</body>
</html>