【问题标题】:Notice: Undefined index [duplicate]注意:未定义的索引[重复]
【发布时间】:2010-01-31 18:42:04
【问题描述】:

我有一个复选框,可以保护帖子密码-

<p><strong><label for="password">Password protect?</label></strong> <input type="checkbox" name="password" id="password" value="1" /></p>

我的 PHP 尝试发布-

 $password = htmlspecialchars(strip_tags($_POST['password']));

我得到未定义的索引错误。

现在,如果我尝试先检查是否设置了密码,我会得到同样的错误执行-

$sql = "INSERT INTO blog (timestamp,title,entry,password) VALUES ('$timestamp','$title','$entry','$password')";

$result = mysql_query($sql) or print("Can't insert into table blog.<br />" . $sql . "<br />" . mysql_error());

我该如何解决?我必须为标题文本框等每个字段都这样做吗?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    为什么要剥离标签并转义布尔值?你可以这样做:

    $password = (isset($_POST['password']) && $_POST['password'] == 1) ? 1 : 0;
    

    或:

    $password = isset($_POST['password']) ? (bool) $_POST['password'] : 0;
    

    【讨论】:

      【解决方案2】:

      您收到 未定义的索引,因为您访问的是不存在的数组索引。

      您应该在设置之前确保设置了该值:

      if (isset($_POST['password'])) {
         $password = $_POST['password'];
      }
      

      【讨论】:

      • 我觉得老派走 if 语句路线反对条件运算符。 :(
      【解决方案3】:

      您可能第二次收到未定义的变量警告。例如,无论是否设置了 _POST[xyz],您都可以确保设置了 $password。

      $password = isset($_POST['password']) ? $_POST['password'] : '0';
      

      http://docs.php.net/ternary

      【讨论】:

        【解决方案4】:

        如果选择复选框,则只返回复选框值。因此,如果未选中密码复选框,则 password 键在 $_POST 数组中不存在。

        你可以这样做:

        $password = array_key_exists('password', $_POST) ? '1' : '0';
        

        【讨论】:

          猜你喜欢
          • 2016-02-25
          • 2016-04-28
          • 2015-10-17
          • 1970-01-01
          • 1970-01-01
          • 2017-08-26
          • 1970-01-01
          • 2012-10-18
          相关资源
          最近更新 更多