我如何允许空白字段被我的数据库接受为null?

时间:2014-11-18 04:17:17

标签: php html mysql forms

我有一个简单的html表单和一个php文件。表单工作正常,当填写每个字段时,表单成功将数据提交到我的数据库...但是当我提交一个空白字段的表单时,我收到错误,说明没有收到字段。如何让我的数据库接受空白字段为空?

HTML表格

<form action="/tst/contact_form.php" class="well" id="contactForm" method="post" name="sendMsg" novalidate="">
<table align="center" border="0" cellpadding="1" cellspacing="1" height="75" width="653">
    <tbody>
        <tr>
            <td>
            <div class="control-group">
            <div class="controls"><input class="form-control" data-validation-required-message="Please enter your name" id="name" name="itemname" placeholder="ITEM NAME" required="" type="text" /></div>
            </div>
            </td>
            <td>
            <div class="control-group">
            <div class="controls"><input class="form-control" data-validation-required-message="Please enter your phone number" id="phone" name="qty" placeholder="QTY" required="" type="text" /></div>
            </div>
            </td>
            <td>
            <div class="control-group">
            <div class="controls"><textarea id="txta" cols="25" style="height: 23px;" class="form-control" data-validation-required-message="Please enter your question/concern" id="msg" name="notes" placeholder="NOTES" required="" rows="6" type="msg"></textarea></div>
            </div>
            </td>
            <td>
            <div class="control-group">
            <div class="controls"><input class="form-control" data-validation-required-message="Please enter your email" id="email-address" name="stotal" placeholder="TOTAL" required="" type="text" /></div>
            </div>
            </td>
        </tr>
    </tbody>
</table>

<div class="control-group">
<div class="controls submit-btn"><button class="btn btn-primary" type="submit" value="Submit">Submit</button></div>
</div>
</form>

contact_form.php

<?php

define('DB_NAME', 'xxx');
define('DB_USER', 'xxx');
define('DB_PASSWORD', 'xxx');
define('DB_HOST', 'xxx');

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);

if(!$connection){
die('Database connection failed: ' . mysqli_connect_error());
}

$db_selected = mysqli_select_db($connection, DB_NAME);

if(!$db_selected){
die('Can\'t use ' .DB_NAME . ' : ' . mysqli_connect_error());
}

echo 'Connected successfully';

if($_POST['itemname']){
    $itm = $_POST['itemname'];
}else{
    echo "Item Name not received";
    exit;
}
if($_POST['qty']){
    $qty = $_POST['qty'];
}else{
    echo "Qty not received";
    exit;
}
if($_POST['stotal']){
    $stotal = $_POST['stotal'];
}else{
    echo "Suggested Total not received";
    exit;
}
if($_POST['notes']){
    $notes = $_POST['notes'];
}else{
    echo "notes not received";
    exit;
}

$sql = "INSERT INTO seguin_orders (itemname, qty, stotal, notes) 
        VALUES ('$itm', '$qty', '$stotal', '$notes')";

if (!mysqli_query($connection, $sql)){
die('Error: ' . mysqli_connect_error($connection));
}

http://oi58.tinypic.com/sotwjq.jpg

7 个答案:

答案 0 :(得分:1)

您应该从非空

更改db列
ALTER TABLE supplier
  MODIFY supplier_name
varchar(100) DEFAULT NULL;

答案 1 :(得分:1)

您的数据库字段应允许NULL

OR

如果您没有从表单中获取字段,则应为字段添加一些占位符值。

e.g。

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

并将$notes用于数据库目的。

希望它有效。

答案 2 :(得分:1)

查询:

ALTER TABLE [Table Name]
ALTER COLUMN [column name] varchar(20) DEFAULT NULL

答案 3 :(得分:0)

您必须删除

等语句
if ($_POST['somevar']) {
    $somevar = $_POST['somevar'];
} else {
    echo "somevar not received";
    exit;
}

直接写下

$sql = "INSERT INTO seguin_orders (itemname, qty, stotal, notes) 
        VALUES ('".$_POST['itemname']."', '".$_POST['qty']."', '".$_POST['stotal']."', '".$_POST['notes']."')";

然后每个空var将作为空字符串''

插入数据库中

如果您确切需要NULL

  1. 检查您的列DEFAULT NULL@tlindell says
  2. 使用$somevar = $_POST['somevar'] ? $_POST['somevar'] : 'NULL';

答案 4 :(得分:0)

将数据库设置为允许空值。例如:MEMBER_NAME varchar(50)DEFAULT NULL。

答案 5 :(得分:0)

您明确检查空字段并拒绝它们。您需要更改验证:

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

  // escaped and added quotes
  $notes = "'".mysqli_real_escape_string($connection,$_POST['notes'])."'";
}
else {
  $notes = "NULL;
}

$sql = "INSERT INTO seguin_orders (itemname, qty, stotal, notes) 
    VALUES ($itm, $qty, $stotal, $notes)";

生成查询时,这应该为您提供正确的引用和转义值,或者为NULL关键字。您的数据库架构也应将列设置为接受NULL值。

注意:您应该转义用户输入以避免SQL不正确。实际上,你应该使用准备好的陈述,但这是另一个问题

注意:空字符串''NULL不同。

答案 6 :(得分:0)

这是一个迟到的更新,但我根据这篇文章的测试得出了一些关于此事的新发现。我发现尝试使用设置为null的变量似乎不适用于最新版本的mysql。我正在使用XAMPP作为测试服务器。我试图设置变量,并且所有变量都未能生效。因此,将字段设置为null的最有效方法似乎是编写一个直接执行此操作的查询,例如。

    $query="UPDATE groups
               SET reimbursementamount=NULL,
                   reimbursement=0
               WHERE groupID=:groupID";
    $stmt = $this->db->prepare($query);
    $params = array(':groupID' => $groupID);
    $stmt->execute($params);
    return true;    

使用这种格式,我可以根据字段是否为空以及是否还有一个复选框来成功将字段设置为null。 $ adminrepay是管理员在检查$ adminreimbursement(复选框)时应该收到的金额。

            if($_POST['adminrepay'] == 0.00)
            {
                $reimbursement = 0;
                $adminrepay = 0;
            }
            elseif(empty($_POST['adminreimbursement']))
            {
                $reimbursement = 0;
                $adminrepay = 0;
            }
            elseif(!empty($_POST['adminreimbursement']) OR !empty($_POST['adminrepay']))
            {
                $reimbursement = 1;
                $adminrepay = trim($_POST['adminrepay']);
                $adminrepay = strip_tags($adminrepay);
                $adminrepay = htmlspecialchars($adminrepay);                    
            }

如果未检查$ adminreimbursement,则它将运行上述查询以将该字段设置为null。效率不高但是它完成了这项工作。希望这有助于解决这个问题的任何人。

注意:NULL需要大写,似乎也不接受小写的null。