我的表单中有四个文本字段,我需要将它们插入到我的数据库中,但这四个字段是可选的,要么它们都应该填充,要么只是其中的一部分,我的问题是,如果用户只是填充两个字段并将其他两个字段留空,然后填充的数据应插入到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是否相关,或者我可以使用艺术家[]作为我所有四个艺术家领域的名称部分?
答案 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);
}
}