0

我的表单中有四个文本字段,我需要将它们插入到我的数据库中,但是这四个字段是可选的,要么它们应该全部填写,要么只是其中的一部分,我的问题是,如果用户只填写这两个字段字段并将其他两个留空,则应将填充的数据插入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

4 回答 4

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_*函数已被弃用,我们鼓励您使用 themysqli_*PDO函数。

于 2012-10-05T07:00:12.390 回答
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";

}
于 2012-10-05T07:02:55.010 回答
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 值。

于 2012-10-05T07:03:10.213 回答
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);
    }
}
于 2012-10-05T07:10:36.333 回答