避免插入mysql的空数据

时间:2012-10-05 06:53:29

标签: php sql

我的表单中有四个文本字段,我需要将它们插入到我的数据库中,但这四个字段是可选的,要么它们都应该填充,要么只是其中的一部分,我的问题是,如果用户只是填充两个字段并将其他两个字段留空,然后填充的数据应插入到mysql中,其他空白字段不应插入。

这就是我所拥有的。

Artist:<input type="text" name="artist" />

Artist:<input type="text" name="artist1" />

Artist:<input type="text" name="artist2" />

Artist:<input type="text" name="artist3" />

//我的php代码

$sql="INSERT INTO artists (name) VALUES ('$artist'),('$artist1'),('$artist2'),('$artist3')";
mysql_query($sql);

但每当我运行此查询时,它会插入所有四个字段。请帮助。 在四个艺术家领域使用艺术家,艺术家1,艺术家2,艺术家3是否相关,或者我可以使用艺术家[]作为我所有四个艺术家领域的名称部分?

4 个答案:

答案 0 :(得分:1)

您可以配置输入字段以返回数组,迭代该数组并动态创建查询。

$values = array();
foreach($artists AS $artist) {
    if(!empty($artist)) {
        $values[] = "('".mysqli_real_escape_string($artist)."')";
    }
}
if(count($values) > 0) {
    $sql = 'INSERT INTO artists (name) VALUES ' . implode(',', $values);
}

应该有效。 但请注意,mysql_*函数已弃用,建议您使用mysqli_*PDO函数。

答案 1 :(得分:1)

将您的输入重命名为name="artist[]"。不是绝对必要,但更容易。

Artist:<input type="text" name="artist[]" />
Artist:<input type="text" name="artist[]" />
Artist:<input type="text" name="artist[]" />
Artist:<input type="text" name="artist[]" />

然后处理它们并根据需要构建您的查询:

$rawArtists = (isset($_POST['artist']) && is_array($_POST['artist'])) ? $_POST['artist'] : array();

$artists = array();

foreach ($rawArtists as $artist) {
    if (is_string($artist) && strlen($artist)) {
        $artists[] = $artist;
    }
}

if (count($artists)) {

    //This could easily be a loop...  
    //I just enjoy abusing lambdas from time to time :)
    $artistVals = array_map(function ($art) {
        return "('" . mysql_real_escape_string($art) . "')";
    }, $artists);

    $vals = implode(',', $artistVals);

    $query = "INSERT INTO artists (name) VALUES $vals";

}

答案 2 :(得分:0)

这不是一个好的思想。 您可以为其创建一个包含两列的表。 你的表可以像

Create table Table_name(
Uid int(5) Auto_increment,
artistName varchar(20) NOT NULL
)

主键(Uid)

现在,您可以将查询用作:

<?php    
foreach($_GET as $name)
    mysql_query(insert into Table_Name(ArtistName) values('$name'));
?>

将列声明为NOT NULL将不允许插入NULL值。

答案 3 :(得分:0)

使输入字段与数组同名:

Artist:<input type="text" name="artist[]" />
Artist:<input type="text" name="artist[]" />
Artist:<input type="text" name="artist[]" />
Artist:<input type="text" name="artist[]" />

循环你的艺术家

foreach($_POST['artist'] as $artist){
    //insert to db if not null
    if(trim($artist) != null){
        $sql="INSERT INTO artists (name) VALUES ('$artist')";
        mysql_query($sql);
    }
}