使用PHP将复选框选择值作为位字段插入数据库

时间:2018-01-04 12:41:11

标签: php html sql-server

我为此经历过一些类似的问题,然而,凭借我的基本知识,我无法找到一个可以直接与我想要实现的目标相联系的答案。

例如,我找到了关于存储多个复选框值的数组的答案。但是,我不确定这是否是我需要的,因为我拥有的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代码,我发表了一些评论,只是显示了哪些是复选框:

<?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(),这正是我现在想要解决的问题。

2 个答案:

答案 0 :(得分:3)

摆脱这整个陈述:

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(),如果他们是&#34;不是&#34;集。

所以,我把它改写成如下:

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
}

答案 1 :(得分:1)

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

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

$portal = $_POST['portal']; 

}else{ 

$portal = 0; 

}

由于某些原因,他原来的答案并没有输入正确的值,但是他建议这样做了。

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