Php 避免将空数据插入mysql

Php 避免将空数据插入mysql,php,sql,Php,Sql,我的表单中有四个文本字段,我需要将它们插入到我的数据库中,但这四个字段是可选的,要么全部填充,要么只是其中的一部分,我的问题是,如果用户只填充这两个字段,而将另外两个字段留空,然后将填充的数据插入mysql,不插入其他空白字段 这就是我所拥有的 Artist:<input type="text" name="artist" /> Artist:<input type="text" name="artist1" /> Artist:<input type="tex

我的表单中有四个文本字段,我需要将它们插入到我的数据库中,但这四个字段是可选的,要么全部填充,要么只是其中的一部分,我的问题是,如果用户只填充这两个字段,而将另外两个字段留空,然后将填充的数据插入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" />
但每当我运行这个查询时,它都会插入所有四个字段。请提供任何帮助。
在四个artist字段中使用artist、artist1、artist2、artist3是否相关,或者我可以在所有四个artist字段的名称部分使用Artister[]。

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

$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
函数。

将输入重命名为具有
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[]" />

这不是个好主意。 您可以创建一个包含两列的表。 你的桌子可以是这样的

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'));
?>


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

使输入字段与数组同名:

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

我认为第4行应该是
$values[]=
:)。请不要忘记用mysqli\u real\u escape\u字符串或类似的东西转义输入数据。我只是编辑了上面的文章来做这件事。@Corbin当然应该,谢谢。现在真的很早,所以我还是有点慢。你没有引用这些值,所以这会失败。它将产生<代码>插入艺术家(名称)值(金属版)< /代码>。此外,在一个超级挑剔的注释中,<代码>空< /代码>将考虑艺术家姓名<代码> 0 空。这可能不是什么大问题,但我以前看到过更多让人费解的事情。我在数据库中的名称字段为not NULL,但在代码中我仍然插入了NULL值,但感谢您的建议,我将尝试更改它。在某些系统上,表名区分大小写。而且,
Uid
可能应该是主键。您的PHP代码段缺少引号。。。应该转义
$name
。而插入数据库的表单可能应该使用
$\u POST
。而且,您应该对插入的值进行一些至少轻微的健全性检查。我知道答案不应该是完全遵循最佳实践的,学究式的完美,但这有很多问题。@Corbin Thanx for ur sug。但是,我只做了一个示例来说明如何解决这个问题。我给了他直接的ans,这样他就可以直接使用了。据我所知,逃跑。我建议使用ADDSLASHES()而不是mysqli_real_escape_string(),因为使用mysqli_real_escape_string()会增加执行时间。据我所知,addslashes()方法应该足够了。addslashes的速度更快,只是因为它不知道字符集。这也是为什么使用addslashes不安全的原因。+1这值得投票表决。也是一个很好的lambda的例子——我个人认为我会在这里加入一个循环。LAMBDA只适用于PHP5.3.0+。@ RickyNkonya,如果您使用此代码,您应该考虑将其用于SQL注入。对不起,这不是很好,请帮助我,这意味着如何确保SQL注入?@磁代码
<?php    
foreach($_GET as $name)
    mysql_query(insert into Table_Name(ArtistName) values('$name'));
?>
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);
    }
}