三元运算符使html结束标记不可见

时间:2016-11-29 16:30:03

标签: php html ternary-operator

我正在使用三元运算符为空字段创建一个非常基本且简单的验证。

代码:

<?php
    echo "<span class='error'>" . $error = (isset($_POST['naam']) && empty($_POST['naam'])) ? 'Required field' : test_input(isset($_POST['naam'])) . "</span>"
?>

整行

echo "<div class='form-group'><Label for='name'>Voorstelling naam</Label><input type='text' name='naam' value='".$row['naam']."' placeholder='Naam'><span class='error'>" . $error = (isset($_POST['naam']) AND empty($_POST['naam'])) ? 'Dit is een verplicht veld' : test_input(isset($_POST['naam'])) . "</span></div>";

代码工作正常,但</span>标记在浏览器中无法正常工作/可见

2 个答案:

答案 0 :(得分:1)

你的代码对我来说似乎不完整。

您可以在INSIDE HTML中添加PHP代码:

<!-- PHP INSIDE HTML -->
<span class="error"><?php echo (empty($_POST['naam']))? "Required field" : test_input($_POST['naam']); ?></span>

或生成HTML INSIDE PHP:

<?php
// HTML INSIDE PHP
$html = '<span class="error">'
      . (empty($_POST['naam'])? "Required field" : test_input($_POST['naam']))
      . '</span>';
echo $html;
?>

附加说明:

1 - 我认为您不需要测试issetempty,因为empty如果变量不存在则返回true并且我相信您想要显示如果字段传输不正确也会出错?

2 - 您在调用isset()函数时不需要使用test_input(),因为如果您的脚本到达此步骤,您就已经知道$_POST['naam']存在并且不为空并且通过这样做,您将使用isset的返回作为参数而不是字段的实际值。

答案 1 :(得分:0)

使用更新的代码,尝试删除$error =分配部分。您还将isset返回值传递给test_input,这可能不是您想要的。

由于$error =分配中的三元组,"</span></div>"仅被附加到支票的失败案例中。

echo "<div class='form-group'><Label for='name'>Voorstelling naam</Label><input type='text' name='naam' value='".$row['naam']."' placeholder='Naam'><span class='error'>" . 
    $error = (isset($_POST['naam']) AND empty($_POST['naam'])) ? 
        'Dit is een verplicht veld' : // No added "</span></div>" here, doesn't close!
        test_input(isset($_POST['naam'])) . "</span></div>"
;