【问题标题】:Insert a checkbox selection value into database as Bit field using PHP使用 PHP 将复选框选择值作为位字段插入数据库
【发布时间】:2018-01-04 12:41:11
【问题描述】:

我已经为此遇到了一些类似的问题,但是,根据我的基本知识,我无法找到可以直接与我想要实现的目标联系起来的答案。

例如,我找到了有关存储多个复选框值的数组的答案。但是,我不确定这是否是我需要的,因为我拥有的 3 个复选框中的每一个都用于数据库中的各个列。

这是我目前用于复选框等的 HTML:

<form action="addNewClient.php" method="POST">
          <div class="modal-body">
            <p>Please enter the name of the client you wish to create.</p>
            <textarea id="addSQLNoteName" placeholder="Enter client name..." name="title" maxlength="25"></textarea>
            <p>Teams Packge:</p>
            <select name="package">
              <option value="SBE">SBE</option>
              <option value="Enterprise">Enterprise</option>
            </select>
            <br />
            <input type="checkbox" name="portal" value="1"> Premium Portal
            <br />
            <input type="checkbox" name="replicated" value="1"> Replicated
            <br />
            <input type="checkbox" name="client" value="1"> IT Client
            <br />
            <textarea id="addSQLNoteName" placeholder="Important client info..." name="info" maxlength="25"></textarea>
          </div>
          <div class="modal-footer footer-sqlnotes">
            <button type="submit" class="btn btn-success">Add Client</button>
          </div>
      </form>

这是我当前的 PHP 代码,我做了几个 cmets 只是显示哪些是复选框:

<?php include 'connectionDetails.php'; ?>

<?php

session_start();

if (isset($_POST['title'], $_POST['package'], $_POST['portal'], $_POST['replicated'], $_POST['client'], $_POST['info']))
{
    $title = $_POST['title'];
    $package = $_POST['package']; 
    $portal = $_POST['portal'];         //Checkbox
    $replicated = $_POST['replicated']; //Checkbox
    $client = $_POST['client'];         //Checkbox
    $info = $_POST['info'];

    $stmt = "INSERT INTO Clients (Client, TeamsPackage, Rating, Pos, Neg, PremiumPortal, Replicated, ITClient, ClientInfo) VALUES (?, ?, 0, 0, 0, ?, ?, ?, ?)";
    $params = array($title, $package, $portal, $replicated, $client, $info);

    $stmt = sqlsrv_query($conn, $stmt, $params);

    if ($stmt === false) 
    {
        die( print_r(sqlsrv_errors(), true));
    }

    header('location: clients.php');
}

else
{
    echo "No Data";

}


?>

所以在我的数据库中,我有三个位字段列,如果在提交时选中,它将作为 1 输入,否则它将作为 0 输入。

就像我说的,如果另一个问题确实回答了我的问题,我深表歉意,我似乎无法将它实施到我想要实现的目标。

目前,如果所有 3 个框都被选中,那么它将添加客户端,否则它将失败 isset(),这是我目前正在尝试解决的问题。

【问题讨论】:

  • 会话数组是否包含值?我看不出它们是在哪里设置并分配给某些东西的。
  • 我认为您应该对 isset() 中的数组使用 POST 而不是 SESSION 并且它没有通过那个条件。很难说你想在这里使用/做什么。
  • 抱歉,那些不应该是会话,我现在会改变那些,假装你没看到那一点
  • 我会使用三元运算符来代替所有这些,只需在提交按钮上使用isset(),然后在其中使用三元运算符。使用错误报告并检查查询中的错误。
  • @FunkFortyNiner 我将不得不看一些使用三元运算符的示例,因为我以前没有遇到过。也感谢您的回复。

标签: php html sql-server


【解决方案1】:

去掉整个语句:

if (isset($_POST['title'], $_POST['package'], $_POST['portal'], $_POST['replicated'], $_POST['client'], $_POST['info']))

为您的提交按钮命名:

<button type="submit" class="btn btn-success" name="submit">Add Client</button>

然后将条件更改为:

旁注:请参阅下面的编辑:

if (isset($_POST['submit'])){

    $portal = (isset($_POST['portal'])) ? '0' : $_POST['portal'];
    $replicated = (isset($_POST['replicated'])) ? '0' : $_POST['replicated'];
    $client = (isset($_POST['client'])) ? '0' : $_POST['client'];

    // add your other form elements 

    // Perform your query here
}

三元运算符恕我直言,这里应该使用什么。

使用默认值0

您可以为其他表单元素添加原始帖子中的其他条件。


编辑:

我对三元组的isset() 犯了一个错误。这些应该读作!isset() 检查它们是否“未”设置。

所以,我改写如下:

if (isset($_POST['submit'])){

     $portal = !isset($_POST['portal']) ? '0' : $_POST['portal'];
     $replicated = !isset($_POST['replicated']) ? '0' : $_POST['replicated'];
     $client = !isset($_POST['client']) ? '0' : $_POST['client'];

    // add your other form elements 

    // Perform your query here
}

【讨论】:

  • 这就是我的意思。它更干净,更安全
  • @LuisfelipeDejesusMunoz 这也是我告诉 OP 的。我猜他们可能在 php.net 网站上并试图自己做,或者他们需要轻微的推动 ;-) 干杯
  • 一个观察。复选框在选中时返回 on,因此 $_POST['var_name']; 应该改为 1
  • @LuisfelipeDejesusMunoz 他们只在没有“预设值”的情况下才返回on ;-) 他们现在有。 0 的三元默认值负责这一点。
  • @FunkFortyNiner 我在 HTML 中为复选框设置默认值是什么?
【解决方案2】:

感谢@FunkFortyNiner,他在讨论中给我留下了这个解决方案。

if(isset($_POST['portal'])){ 

$portal = $_POST['portal']; 

}else{ 

$portal = 0; 

}

由于某种原因,他的原始答案没有输入正确的值,但是他建议的这个方法有效。

而不是使用三元运算符,只需在每个复选框上执行一个 isset 语句,如果未选中则将其设置为 0。

【讨论】:

  • 我觉得三元组不起作用真的很奇怪。哦,好吧,如果它现在可以工作;-)
  • 这很奇怪,但就像你说的那样,至少它可以工作。
  • 您是否实际上尝试删除零周围的引号,从 $portal = (isset($_POST['portal'])) ? '0' : $_POST['portal'];$portal = (isset($_POST['portal'])) ? 0 : $_POST['portal']; 并对其他人做同样的事情?
  • 我记得这样做过,但没有解决:(
  • 天哪,卢克,我现在知道我在三元组中犯了什么错误。那些应该读作!isset() 检查它们是否“未”设置。我在 Edit: 下对我的答案进行了编辑。对于那个很抱歉;这是我的疏忽。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2021-04-03
  • 2015-07-19
相关资源
最近更新 更多