Wordpress php未定义索引,表单发布到数据库

Posted

技术标签:

【中文标题】Wordpress php未定义索引,表单发布到数据库【英文标题】:Wordpress php undefined index with form posting to db 【发布时间】:2016-04-01 20:32:18 【问题描述】:

我正在为 wordpress 小部件构建一个非常小的表单。该表单只是一个下拉选择输入,允许用户选择他们的业务类型 - 然后将其存储在数据库的 wp_usermeta 表中。

下拉菜单实际上是在注册时选择的,所以这种形式更多的是用户更改值的机会。

这是我用来创建表单的 php

<?php 
$user = wp_get_current_user();        
$selected = get_user_meta( $user->ID, 'i_am_a', true ); 
?>

<form method="post">        
<h3>I am a...</h3>
        <select name="i_am_a" id="i_am_a">
            <option value="musician" autocomplete="off" <?php echo ($selected == "musician")?  'selected="selected"' : '' ?>>Musician/Artist</option>
            <option value="band" autocomplete="off" <?php echo ($selected == "band")?  'selected="selected"' : '' ?>>Band</option>
            <option value="photographer" autocomplete="off" <?php echo ($selected == "photographer")?  'selected="selected"' : '' ?>>Photographer</option>
            <option value="business" autocomplete="off" <?php echo ($selected == "business")?  'selected="selected"' : '' ?>>Small Business</option>
            <option value="other" autocomplete="off" <?php echo ($selected == "other")?  'selected="selected"' : '' ?>>Other</option>
        </select>
<input type="submit" name="submit" value="change" class="button"/>

</form>
<?php
    $i_am_a = $_POST['i_am_a'];
    update_user_meta( $user->ID, 'i_am_a', $i_am_a );
?>

注意:未定义索引:/home/.../layers-whitelabel.php 第 90 行中的 i_am_a

第90行如下:

$i_am_a = $_POST['i_am_a'];

我怎样才能摆脱这个错误?

【问题讨论】:

由于这个表单没有action,我假设如果你提交错误就没有了,对吧?如果是这样,请考虑一下,您正在尝试在尚未发送的表单上使用$_POST,因此,undefined 用于该键... if (!empty($_POST["i_am_a"])) PHP: "Notice: Undefined variable" and "Notice: Undefined index"的可能重复 @FirstOne 是的,一旦提交,错误就会消失。我在表单中添加了 action="" 但仍然显示错误。 @wuno 我该把 sn-p 放在哪里? 【参考方案1】:

试试这个,

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

使用0检查的解释请看this answer。

【讨论】:

此答案已被标记,但我投票保留它,但是,我建议您添加一些关于您的答案在做什么的描述。 (对于可能觉得这个问题有用的人来说,这可能不是那么明显。)【参考方案2】:

声明你的变量。或者使用isset() 在引用它们之前检查它们是否被声明,如:

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

【讨论】:

完美,正是我需要的。我实际上发现提交后页面重新加载时,所选选项不正确 - 我是否也需要在我的选项中使用 isset? 你的意思是选择的选项不正确? 您应该将最后两行移到 $selected 变量行的上方。因为您正在尝试在更新之前获取更新的元值。

以上是关于Wordpress php未定义索引,表单发布到数据库的主要内容,如果未能解决你的问题,请参考以下文章

PHP 表单抛出错误 - 注意:未定义的索引

我填写了表单上的所有值,我的 PHP 仍然返回未定义索引

php javascript表单序列化获取数据未定义索引

PHP会话的未定义索引

PHP邮件不断给我未定义的索引,帮助?

未定义的索引:formSignInEmail [关闭]