2017-02-21 56 views
3

为什么在文本区域生成以下通知?在本地机器上运行php文件之后。为什么在textarea中生成以下通知?

这里是与屏幕截图中的通知: schema

通知在图像中:

通知:未定义变量:USER_INPUT在C:\ XAMPP \ htdocs中\ PhpProject1 \索引。 php on line

这里是我的代码,我在NetBeans我书面方式:

<?php 
    $find= array('alex','billy','dale'); 
    $replace=array('a**x','b***y','d**e'); 
    if(isset($_POST['user_input'])&&!empty($_POST['user_input'])){ 
     $user_input = $_POST['user_input']; 
     $user_input_new= str_ireplace($find, $replace, $user_input); 
     echo $user_input_new; 
    } 
?> 
<hr> 
<form action="index.php" method="POST"> 
    <textarea name="user_input" rows="6" cols="30"> 
    <?php 
     echo $user_input; 
    ?> 
    </textarea><br><br> 
    <input type="submit" value="submit"> 
</form> 

回答

5

您正在收到通知,因为$user_input;未定义,因为未设置POST['user_input']。为了避免通知打印的$user_input;既然你要打印$user_inputtextarea所以印有

+1

在PHP7中,你也可以使用[null coalescing operator](http://php.net/manual/en /migration70.new-features.php#migration70.new-features.null-coalesce-op):'echo $ user_input ?? '';' – Gondrup

+0

是的,这是正确的,但我不知道OP使用的是什么版本,所以我更喜欢用这种方式 – Fabio

+0

同意你的方式是向后兼容的更安全的选择。 – Gondrup

1

试试这个:

<?php 
$find = array('alex', 'billy', 'dale'); 
$replace = array('a**x', 'b***y', 'd**e'); 
if (isset($_POST['user_input']) && !empty($_POST['user_input'])) { 
    $user_input = $_POST['user_input']; 
    $user_input_new = str_ireplace($find, $replace, $user_input); 
    echo $user_input_new; 
} 
?> 
<hr> 

<form action="index.php" method="POST"> 
    <textarea name="user_input" rows="6" cols="30"> 
     <?php 
     if (isset($user_input)) { 
      echo $user_input; 
     } 
     ?> 
    </textarea><br><br> 
    <input type="submit" value="submit"> 
</form> 
0

这是因为$user_input没有在它的价值。在这种情况下,使用isset()来检查是否存在变量。

isset($user_input) 
{ 
    // your code 
} 
1

isset()条件超过$user_input在textarea的使用它之前:

<textarea name="user_input" rows="6" cols="30"> 
     <?php 
     if(isset($user_input)){ 
     echo $user_input; 
     } 
     ?> 
</textarea><br><br> 

,或者你可以做一些这样的

<textarea name="user_input" rows="6" cols="30"> 
     <?=isset($user_input) ? $user_input : "" ?> 
</textarea> 
1

if语句

$find= array('alex','billy','dale'); 
$replace=array('a**x','b***y','d**e'); 
$user_input = ''; 
if(isset($_POST['user_input'])&&!empty($_POST['user_input'])){ 
    $user_input = $_POST['user_input']; 
    $user_input_new= str_ireplace($find, $replace, $user_input); 
    echo $user_input_new; 
} 

// ... 
之前刚刚成立 $user_input
+0

也正确!但更好使用isset条件而不是使用空字符串进行初始化。 –

+0

@Maha Dev够了......但我认为初始化变量并不是一个坏的想法;) –

1

这是因为$ _ POST值未设置错误里面只有已被定义

echo isset($user_input) ? $user_input : ''; 

。如果形式从未受到影响,那就不可能。在形式与ternary operator直接

# checks if the form as been submitted, with the submit input's name 
if (isset($_POST['submit']) { 
    $user_input = $_POST['user_input']; 
} else { 
    # If not, it will write nothing 
    $user_input = ""; 
} 

或者做: 更改条件

<textarea name="user_input" rows="6" cols="30"> 
    <?php 
    echo isset($_POST['submit']) ? $_POST['user_input'] : ""; 
    ?> 
</textarea><br><br> 

编辑由潘卡Makwana(修正):
或者潘卡Makwana的编辑我的答案(这不是关于三元操作符,但是short open tags)。

<textarea name="user_input" rows="6" cols="30"> 
    <?=isset($_POST['user_input']) ? $_POST['user_input'] : "" ?> 
</textarea> 

编辑:PHP7的null coalescing operator方式:
使用我的回答潘卡Makwana的编辑。

<textarea name="user_input" rows="6" cols="30"> 
    <?=$_POST['user_input'] ?? "" ?> 
</textarea> 
0

当您的POST动作发生时,您的变量将填充数据,因此您必须检查它是否为空或它是否被设置!

if (isset($user_input) & !empty($user_input)) { 
    echo $user_input; 
} 
相关问题