0

フォームに4つのテキストフィールドがあり、データベースに挿入する必要がありますが、4つのフィールドはオプションであり、すべて入力するか、一部だけ入力する必要があります。問題は、ユーザーが2つ入力するだけの場合です。フィールドを作成し、他の2つを空のままにしておくと、入力されたデータが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);

しかし、このクエリを実行すると、4つのフィールドすべてが挿入されます。そして、4つのアーティストフィールドでartist、artist1、artist2、artist3を使用することは適切ですか、それとも、私が持っている4つのアーティストフィールドすべての名前部分にartist []を使用できますか?

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_*関数は非推奨であり、mysqli_*または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

これは良い理想論ではありません。2 つの列を持つテーブルを作成できます。あなたのテーブルは次のようになります

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

入力フィールドを array と同じ名前にします:

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 に答える