【问题标题】:prevent insert empty string to database防止将空字符串插入数据库
【发布时间】:2018-12-07 00:11:55
【问题描述】:

我有这个插入语句,我希望防止插入项目值为空的行

<?php
require_once 'app/helpers.php';
session_start();
$error = '';
$link = mysqli_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB);
mysqli_set_charset($link,"utf8");

$id = $_SESSION['user_id'] ;

$type = $_SESSION['user_rule'];

if($_POST) {

    $name = $_POST['name'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $prod = $_POST['prod'];
    $for = $_POST['for'];
    $s_date = $_POST['s_date'];
    $s_time = $_POST['s_time'];
    $e_date = $_POST['e_date'];
    $e_time = $_POST['e_time'];

    $item1 = $_POST['itm1'];
    $item2 = $_POST['itm2'];
    $item3 = $_POST['itm3'];
    $item4 = $_POST['itm4'];
    $item5 = $_POST['itm5'];
    $item6 = $_POST['itm6'];
    $item7 = $_POST['itm7'];
    $item8 = $_POST['itm8'];
    $notes = $_POST['notes'];

    if (empty($prod)) {
        $error = '<div class="alert alert-danger alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> מי מפיק את כל הכיף הזה? בבקשה לרשום  </div>';

    } elseif (empty($for)) {
        $error = '<div class="alert alert-danger alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> כן? למי הציוד הולך בבקשה? </div>';
    } elseif (empty($s_date)) {
        $error = '<div class="alert alert-danger alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> מתי מתחיל כל הכיף הזה?  </div>';
    } elseif (empty($s_time)) {
        $error = '<div class="alert alert-danger alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>  באיזה שעה מתחיל הכיף?</div>';
    } elseif (empty($e_date)) {
        $error = '<div class="alert alert-danger alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>  מתי נגמר הכאב ראש הזה?</div>';
    } elseif (empty($e_time)) {
        $error = '<div class="alert alert-danger alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> באיזה שעה נגמר הכאב ראש? שנדע לקחת כדור </div>';
    } else {
        if (!empty($item1)) {
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item1','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';

        }
        if (!empty($item2)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item2','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }

        if (!empty($item3)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item3','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }
        if (!empty($item4)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item4','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }
        if (!empty($item4)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item4','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }
        if (!empty($item5)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item5','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }
        if (!empty($item6)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item6','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }
        if (!empty($item7)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item7','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }
        if (!empty($item8)){
            $rent = "INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
VALUES 
('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item8','$type','$notes')  ";
            mysqli_query($link, $rent);
            $error = '<div class="alert alert-success alert-dismissable">
					<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';
        }

    }

}
?>

<?= $error ?>

如何防止插入 item1 或 item2 或 item3 值为空的每一行?并仅插入项目值不为空的行?

我现在得到的结果是我的数据库表中有 8 行,项目列中有空单元格

【问题讨论】:

  • 旁注:你让自己对 SQL 注入开放;使用准备好的语句。
  • 这仅用于测试代码,仅用于练习代码
  • if($_POST){ 你一开始就是这样,但之后尝试检查empty()。我会首先摆脱 if($_POST){ 并首先检查空字段,然后查询并且不允许您的数据库中存在空/NULL 值,反之亦然。
  • 你不应该练习糟糕的代码。练习使用准备好的语句
  • 不要养成坏习惯。习惯往往会在以后跟随你,并且可能会在“你知道什么”中咬你;-)

标签: php mysql forms session


【解决方案1】:

我想你需要插入 8 个项目,比如一个细节,对吧?

您可以创建一个函数来在数据库中执行插入操作,这样您就可以在每次项目不为空时调用该函数。

有点像……

<?php
require_once 'app/helpers.php';
session_start();
$error = '';

$link = mysqli_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB);
mysqli_set_charset($link,"utf8");

$id = $_SESSION['user_id'] ;

$type = $_SESSION['user_rule'];

if($_POST){

    $item1 = $_POST['itm1'];
    $item2 = $_POST['itm2'];
    $item3 = $_POST['itm3'];
    $item4 = $_POST['itm4'];
    $item5 = $_POST['itm5'];
    $item6 = $_POST['itm6'];
    $item7 = $_POST['itm7'];
    $item8 = $_POST['itm8'];

if(empty($prod)){
    $error = '<div class="alert alert-danger alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> מי מפיק את כל הכיף הזה? בבקשה לרשום  </div>';

}elseif (empty($for)){
    $error = '<div class="alert alert-danger alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> כן? למי הציוד הולך בבקשה? </div>';
}elseif (empty($s_date)){
    $error = '<div class="alert alert-danger alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> מתי מתחיל כל הכיף הזה?  </div>';
}elseif (empty($s_time)){
    $error = '<div class="alert alert-danger alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>  באיזה שעה מתחיל הכיף?</div>';
}elseif(empty($e_date)){
    $error = '<div class="alert alert-danger alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>  מתי נגמר הכאב ראש הזה?</div>';
}elseif (empty($e_time)){
    $error = '<div class="alert alert-danger alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> באיזה שעה נגמר הכאב ראש? שנדע לקחת כדור </div>';
}else{

    insertItem($item1, $_POST);
    insertItem($item2, $_POST);
    insertItem($item3, $_POST);
    insertItem($item4, $_POST);
    insertItem($item5, $_POST);
    insertItem($item6, $_POST);
    insertItem($item7, $_POST);
    insertItem($item8, $_POST);

    $error = '<div class="alert alert-success alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> הזמנתך בוצעה - עכשיו חכה בסבלנות אל תאכל את הראש </div>';

}


}


?>

    <?= $error ?>

<?php

function insertItem($item, $post) {
    // this should prevent to insert an empty item in the database
    if (!empty($item)) {
        $name = $post['name'];
        $email = $post['email'];
        $tel = $post['tel'];
        $prod = $post['prod'];
        $for = $post['for'];
        $s_date = $post['s_date'];
        $s_time = $post['s_time'];
        $e_date = $post['e_date'];
        $e_time = $post['e_time'];
        $notes = $_POST['notes'];

        $rent = "
        INSERT INTO rent (u_name,u_id,mail,phone,prod,rent_for,start_d,start_t,end_d,end_t,item,user_type,notes)
            VALUES 
        ('$name','$id','$email','$tel','$prod','$for','$s_date','$s_time','$e_date','$e_time','$item','$type','$notes')";
        mysqli_query($link,$rent);
    }
}

顺便说一句:我认为你可以更好地组织你的代码,比如 MVC 左右,好吧,让我知道这是否适合你

问候!

【讨论】:

    【解决方案2】:

    试试这样的:

    if(isset($_POST['name']) && $_POST['name']!=""){
        // do something
    }
    

    【讨论】:

    • 这和 if(!empty($_POST['name'])) 不一样吗?
    • @markmoxx 我认为!empty() 实际上更好,尤其是从可读性的角度来看
    • 语法不是这里的问题;这个答案没有解决实际问题
    • 如果我使用 if(!empty) 并且第一项不会是空的,所以它会停在那里而不继续下一条语句
    • 我已经更新了帖子。有更好的方法吗?是的,我知道我对 SQL 注入持开放态度,我将修复我的编码实践 :)
    猜你喜欢
    • 2018-05-03
    • 2016-03-20
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多