【问题标题】:Checkbox variable causing error when NOT submitted in form PHP MYSQL未以 PHP MYSQL 表单提交时复选框变量导致错误
【发布时间】:2014-05-31 20:01:54
【问题描述】:

我有一个对应于复选框的 PHP 变量 $admin。当表单被勾选并提交时,值被传递(设置为 1)并且一切都很好,但是如果它没有被勾选,变量会导致未定义的索引错误:

注意:未定义索引:C:...\admin.php 中的 admin

这是查询数据库的表单的 php 部分:

  if($row == 1)
    {
        echo '<div id="errormsg">This username is already taken</div>';
    }
    else

    {
    $add = mysqli_query($dbcon, "INSERT INTO users (id, firstname, lastname, username, password, admin) VALUES
    (null, '$fname', '$lname', '$user', '$pass', '$admin') ") or die ("Can't insert data");
    echo '<div id="create-success">Successfully added user!</div>';
    }

还有 HTML 表单:

  <form action="admin.php" method="post" onSubmit="return validate(this)">
<fieldset>
    <label class="reg">Username *</label> <input type="text" name="user" /><br />
    <label class="reg">Password *</label> <input type="password" name="pass" /><br />
    <label class="reg">Repeat Password *</label> <input type="password" name="rpass" /><br />
    <label class="reg">First name:</label> <input type="text" name="fname" /><br />
    <label class="reg">Last name:</label> <input type="text" name="lname" /><br />
    <label class="reg">Admin?:</label> <input type="checkbox" value="1" name="admin" /><br/>
</fieldset>
    <input type="submit" name="submit" value="Create User" />
</form>

有没有人知道为什么不选中该框会导致特定于 $admin 变量的错误?

【问题讨论】:

  • 我猜当没有选中该框时,它发送 no 或 NULL 值。您应该先拦截 POST,自己手动设置变量。这样你就知道它有一个有效的值。
  • 您应该显示处理$_POST 中处理值的脚本部分。很可能,这就是您的问题所在。如果用户名已被使用,您也可以考虑不告诉用户。从安全角度来看,这被认为是不好的做法。
  • POST 设置为 $admin = $_POST['admin'];等

标签: php html mysql forms checkbox


【解决方案1】:

首先,您必须检查 Post Array 中的 admin 变量。请检查代码。

<?php
if($row == 1)
{
 echo '<div id="errormsg">This username is already taken</div>';
}
else
{
// check is exist in post array
$isAdminCheck = (isset($_POST['admin']) && $_POST['admin'] == 1 )? $_POST['admin']:0;

$add = mysqli_query($dbcon, "INSERT INTO users (id, firstname, lastname, username,   password, admin) VALUES    (null, '$fname', '$lname', '$user', '$pass', '$isAdminCheck') ") or die ("Can't insert data");
echo '<div id="create-success">Successfully added user!</div>';
}
?>

【讨论】:

    【解决方案2】:

    复选框只有在被选中时才会真正传递给脚本。

    所以你需要检查你的 php 代码中是否存在,如下所示:

    if ( $_POST && isset( $_POST['admin'] ) {
        $admin = $_POST['admin'];
    } else {
        $admin = 0;
    }
    

    编辑:

    在你的脚本中我会这样做

    if($row == 1) {
        echo '<div id="errormsg">This username is already taken</div>';
    } else {
        $admin = ( $_POST && isset( $_POST['admin'] ) ? $_POST['admin'] : 0;
        $add = mysqli_query($dbcon, "INSERT INTO users 
                   (id, firstname, lastname, username, password, admin) 
             VALUES(null, '$fname', '$lname', '$user', '$pass', '$admin') ") or die ("Can't insert data");
        echo '<div id="create-success">Successfully added user!</div>';
    }
    

    【讨论】:

    • 我认为这可能与此有关。该代码在哪里适合我的脚本?
    • 在尝试使用 $admin 变量之前的任何地方
    • 我在追求这样的事情,但不幸的是它并没有停止错误
    • 确切的错误信息是什么,并显示它发生在哪一行
    猜你喜欢
    • 1970-01-01
    • 2013-01-21
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多