【问题标题】:Button form submission not submitting NULL按钮表单提交未提交 NULL
【发布时间】:2016-10-24 21:53:03
【问题描述】:

我正在使用一个相当简单的表单,但由于某种原因它没有提交 NULL 结果,而是将它们作为空结果提交。

<div class="span6"> 
    <form action="" method="POST">                                       
        <div class="block-fluid without-head">                        
            <div class="toolbar clearfix">
                <div class="right">
                    <div class="btn-group">
                        <button type="submit" class="btn btn-small btn-warning tip" data-original-title="Submit Aritcle">
                            <span class="icon-ok icon-white"></span>
                        </button>
                        <button type="button" class="btn btn-small btn-danger tip" data-original-title="Delete Article">
                            <span class="icon-remove icon-white"></span>
                        </button>
                    </div>
                </div>
                <div class="left">
                    <div style="font-size: 11pt; font-family: -webkit-body; font-weight: bolder;">Article Exchange Request</div>
                </div>
            </div>                        

            <div class="row-form clearfix">
                <div class="span3">Title</div>
                <div class="span9"><input type="text" name="title" value="" placeholder="main subject title"></div>
            </div>

            <div class="row-form clearfix">
                <div class="span3">First Sentence</div>
                <div class="span9"><input type="text" name="s1" value="" placeholder="Sentence with max of 200 characters"></div>
            </div>

            <div class="row-form clearfix">
                <div class="span3">Second Sentence</div>
                <div class="span9"><input type="text" name="s2" value="" placeholder="Optional sentence with max of 200 characters"></div>
            </div>                                                

            <div class="row-form clearfix">
                <div class="span3">Third Sentence</div>
                <div class="span9"><input type="text" name="s3" value="" placeholder="Optional Sentence with max of 200 characters"></div>
            </div>

            <div class="row-form clearfix">
                <div class="span3">Website Url</div>
                <div class="span9"><input type="text" name="link" value="" placeholder="Url to be included in articles"></div>
            </div>

            <div class="row-form clearfix">
                <div class="span3">Website Url Title</div>
                <div class="span9"><input type="text" name="link_text" value="" placeholder="Url text to be included in articles limit 150 characters"></div> 
            </div>

            <div class="row-form clearfix">
                <div class="span3">Credit Offer</div>
                <div class="span9"><input type="text" name="cost_value" value="" placeholder="Example: 100"></div>
            </div>
        </div>                    
    </form>
</div>

问题是有人可以直接提交表单而不输入任何数据,它仍然提交,并将空结果添加到数据库中的每一列。这意味着没有在数据库中设置 NULL 值。

我的表单处理

<?

if (isset($_POST[cost_value])) {
    $stmt = $db->prepare("SELECT credits from member_credits WHERE username = :username");
    $stmt->bindParam(':username', $username);
    $stmt->execute();
    $row = $stmt->fetch();
    $count = $row[credits];
    if ($count > $_POST[cost_value]) {
        $stmt = $db->prepare('INSERT INTO article_requests (title, s1, s2, s3, link, link_text, offer, username) VALUES (:title, :s1, :s2, :s3, :link, :link_text, :offer, :username)');
        $stmt->bindValue(':title', $_POST[title]);
        $stmt->bindValue(':s1', $_POST[s1]);
        $stmt->bindValue(':s2', $_POST[s2]);
        $stmt->bindValue(':s3', $_POST[s3]);
        $stmt->bindValue(':link', $_POST[link]);
        $stmt->bindValue(':link_text', $_POST[link_text]);
        $stmt->bindValue(':offer', $_POST[cost_value]);
        $stmt->bindValue(':username', $username);
        $stmt->execute();
    }
}
?>

我期望在提交时发生的情况是,如果在表单中没有输入任何值,它应该设置为 NULL……这意味着如果没有设置 $_POST[cost_value],表单将不会提交。就目前而言,它总是看到 $_POST[cost_value] 被设置 - 有时是一个值,例如 $_POST[cost_value] = '100';其他时候 $_POST[cost_value] = '';但在这两种情况下,表单都会提交。同样,我设置了数据库,以便只有 s2 和 s3 的值应该能够为空,但是当所有内容都提交为空而不是空时,这几乎是无用的。

我到底错过了什么?为什么不说 $_POST[cost_value] = NULL;如果用户没有输入值?为什么它提交''?我有一种感觉,它会成为我忽略的基本东西,我只是看不到它....

澄清更新

我知道有很多方法可以解决这个问题。我可以使用 if then 测试,我可以使用临时变量,我可以检查值本身是否不是 ''。我知道解决方法是什么。我不明白为什么需要它们。为什么我一周中的每一天都使用 ifisset 制作表格,并且每天都有效。如果表单没有用户输入的值,则表单不会提交,因为 if isset 返回 false。那么为什么它在这个特定的表单上它正在提交''而不是说!isset 不要处理。

【问题讨论】:

  • 我想我可以使用三元运算符来解决这个问题,我以前从未遇到过这个问题。我一直在制作表单,通常如果有人提交没有数据的表单,则表单不会处理。这就是为什么(我认为)在 POST 表单处理中使用 if(isset) 是相当标准的。
  • 我不建议在 POST 上设置 NULL。我会在数据库中进行设置,这样如果在创建行期间没有输入值,那么它将自动设置为 NULL 而不是字符串文本“NULL”
  • @Levi 就是这样。数据库确实将列设置为 NULL,但是在提交空值时,将设置一个空值,而不是 NULL。这就是我感到困惑的原因。
  • $_POST[title](和所有其他$_POST-params)应该有引号:$_POST['title']。事实上,它应该抛出一个通知:"Use of undefined constant".
  • 对不起布鲁斯,但我想我没有抓住这个问题。我真的希望您找到您正在寻找的解决方案/答案,干杯。希望我能提供更多帮助,祝你好运。

标签: php html forms


【解决方案1】:

// 为帖子分配一个 var。

$DIRTY_Var = $_POST['varinputname'];

// 确保 var 被清理(提交时没有什么有趣的事情)

$CLEAN_Var = filter_var($DIRTY_Var,` FILTER_SANITIZE_STRING);

// 检查 var 是否为空或有值。如果为空,则将 var 设置为 null;

if (!$CLEAN_Var) { return $CLEAN_Var = null; }

    // validate input
    $valid = true;

    // insert data
    if ($valid) {
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO Table ("
                                ."ColumnNames"
                            .")"
            ."VALUES("
            ."?"
            .")";
        $q = $pdo->prepare($sql);
        $q->execute(array($CLEAN_Var));
        // Once INSERT is completed, we will redirect.
        header("Location:" 'link.php'); exit; 
    }

【讨论】:

  • if ( !empty($_POST)) { 将因&lt;button type="submit"&gt; 而失败,因为它被视为 POST 输入/数组。因此,每次按下提交时,都会被视为“非空”。
【解决方案2】:

试试

   If(isset($_POST['cost_value'])  &&    !empty($_POST['cost_value']){

// 你的代码 }

【讨论】:

  • 不应该是 If(isset($_POST['cost_value']) && !empty($_POST['cost_value']){ ?
  • 检查 isset 是否为空? -1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2020-12-03
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
相关资源
最近更新 更多