为什么我的嵌套if / else语句在我的PHP / html脚本中不起作用?

时间:2014-11-02 05:08:38

标签: php html ping

我正在尝试制作一个可以通过html表单访问的快速PHP脚本。这个想法是让用户输入一个url,PHP脚本应该ping该url,并回显成功或失败。我在Linux薄荷机器上安装Apache,我正在测试// localhost。 在PHP中,我使用的是PEAR的Net_Ping包。

当我对一个url进行硬编码ping时,该脚本在命令行上运行正常,但是当我将其写入html表单时,if else语句失败。

当我输入一个用于ping脚本的url时,它会回显“ping成功” 如果我禁用我的互联网来测试else语句,它仍会回显“ping成功”

<!DOCTYPE html>
<?php
    require("Net/Ping.php");
    $ping = Net_Ping::factory();

    if ($_POST["url"]) {
        $result = $ping->ping($_POST["url"]);
        if ($result) {
            echo "ping was successful\n";
        } else {
            echo "ping was unsuccessful\n";
        } 
    }
?>
<html>
<body>
<p>This is a free web based URL ping service</p>
<p>Input your favorite URL and see if China is blocking it today!</P>
<form action="<?php test33.php ?>" method="POST">
URL: <input type="text" name="url" /> 
<input type="submit" />
</form>
</body>
</html>

4 个答案:

答案 0 :(得分:1)

问题在于:

<form action="<?php test33.php ?>" method="POST">

应该是:

<form action="test33.php" method="POST">

或:

<form action="<?php echo "test33.php"; ?>" method="POST">

或:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">

因此您不必对脚本名称进行硬编码。您也可以将其留空,因为它默认为当前URL:

<form action="" method="POST">

答案 1 :(得分:0)

试试这个:

<!DOCTYPE html>
<?php
    require("Net/Ping.php");
    $ping = Net_Ping::factory();

    if ($_POST["url"]) {
        $result = $ping->ping($_POST["url"]);
        if ($result) {
            echo "ping was successful\n";
        } else {
            echo "ping was unsuccessful\n";
        } 
    }
?>
<html>
<body>
<p>This is a free web based URL ping service</p>
<p>Input your favorite URL and see if China is blocking it today!</P>
<form action="" method="POST">
URL: <input type="text" name="url" /> 
<input type="submit" />
</form>
</body>
</html>

您的表单操作=&#34;&#34;有问题。它在另一页提交。

答案 2 :(得分:0)

如果您想在<?php中使用tag Form,您必须像这样使用它;

  • 使用echo
  • 在quete中使用文件名。否则php将假设为不干扰。

form action就像这里action="<?php test33.php ?>"; test33.php quete <{1}}

使用它周围的quete。喜欢这个

<form action="<?php echo "test33.php" ?>" method="POST">

编辑部分。根据该文档,ping如果error array为空,则返回url,这意味着您的$result永远不会是假的。所以你的代码永远不会运行else语句。要解决这个问题 在!empty声明中使用if

喜欢这个

if (!empty($_POST["url"])) {
        $result = $ping->ping($_POST["url"]);
        if ($result) {
            echo "ping was successful\n";
        } else {
            echo "ping was unsuccessful\n";
        } 
    }

答案 3 :(得分:-1)

我认为因为您的$_POST['url']尚未初始化。您必须签入它存在的if声明

if (isset($_POST["url"] && $_POST["url"])