用户出现错误消息始终显示

时间:2013-07-15 18:37:17

标签: php if-statement login system

此代码正在尝试验证是否已在浏览器中输入链接,但是,即使不需要,警告消息Please enter the URL to clone仍会显示在页面顶部。任何人都可以提出一种不出现的方法吗?我在下面附上了我的代码。

$posted_radio = (isset($_POST['git']) ? $_POST['git'] : null);
$posted_url = (isset($_POST['clone-url']) ? $_POST['clone-url'] : null);

if($posted_radio == "pull"){
    echo "This would cause a git pull";
}

if (!empty($posted_url)){
    echo "<p>This would post: </p><code>git clone"." ".$posted_url."</code>";
}else{
    echo "Please enter a URL to clone";
}


?>

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

    <input type="radio" name="git" value="clone" id="clone"><label>Clone</label><br>
    <label class="clone-url">Clone URL:</label><input type="url" name="clone-url" class="clone-url"><br>
    <input type="radio" name="git" value="pull"><label>Git Pull</label><br>

    <button class="btn btn-primary">Submit</button>
</form>

3 个答案:

答案 0 :(得分:0)

正如Marc B.所指出的那样,$_POST['clone-url']包含一个空字符串''

改变这个:

$posted_url = (isset($_POST['clone-url']) ? $_POST['clone-url'] : null);

到此:

$posted_url = (isset($_POST['clone-url']) && trim($_POST['clone-url']) !== '') ? $_POST['clone-url'] : null);

答案 1 :(得分:0)

查看您对该问题的评论,似乎$post_url为空。您没有检查$post_url是否为空。将您的代码更改为:

$posted_radio = (isset($_POST['git']) ? $_POST['git'] : null);
$posted_url = (isset($_POST['clone-url']) ? $_POST['clone-url'] : null);

if($posted_radio == "pull" && !empty($posted_url) ){
    echo "This would cause a git pull";
}

if (!empty($posted_url)){ //if url is not empty, print success
    echo "<p>This would post: </p><code>git clone"." ".$posted_url."</code>";
}elseif(!is_null($posted_url)){ //if url is not null, print error
    echo "Please enter a URL to clone";
}

希望这有帮助!

答案 2 :(得分:-1)

您的代码在输入验证之前没有检查POST数据是否已经实际收到,因此它试图验证它没有实际收到的输入,因此抱怨它缺席。要解决此问题,请将PHP代码包装在脚本的顶部:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  # your existing validation code goes here
};

这将导致验证仅在有要验证的输入数据时发生,并消除您现在看到的虚假错误。

您可能还难以使用带有连字符的输入字段名称;我没有看到它应该失败的任何直接原因,但它并不常见,而且可能是这种情况,因为它不能很好地运作。如果在进行上述更改后仍然存在同样的问题,请尝试将clone-url的所有实例更改为clone_url,看看会发生什么。