2011-01-04 22 views
1

特定のフィールドにデータが含まれていると、複数の行をデータベースに挿入する方法を教えてください。複数の行をmysql DBに挿入

register_case = mysql_query ("INSERT INTO cases VALUES 
           ('$case','$p_firstname','$p_lastname','$city'), 
           ('$case','$p2_firstname','$p2_lastname','$city'), 
           ('$case','$p3_firstname','$p3_lastname','$city')" 
          ); 

これにより、姓と名が異なる複数の行が作成されますが、大文字と小文字は同じままです。ただし、エントリが1つだけの場合でも、他の2つの行はまだ作成されています。特定のフィールドにデータが存在する場合のみ、行を作成する方法はありますか?

+0

条件付き演算子を使用して、このクエリを動的に作成しますか? –

答えて

0

だけのようなものだろう、その場合場合は、試すことができます:

if (isset($field)) do thisquery 

または

if ($field != "") do thatquery 
0

を、私は、このフォームから情報を取ることになると仮定?

もしそうなら、$ _POST ['firstname'] [0]のように、名前をfirstname [] ""のように入力してください。 firstname []という名前の3つの入力は、$ _POST ['firstname'] [0]、$ _ POST ['firstname'] [1]、$ _POST ['firstname'] [2]を取得します。私はそれが動作するはずだと思う

$sql = 'INSERT INTO `cases` VALUES '; 

for($i = 0;$i < count($_POST['firstname']);$i++) 
{ 
    $sql .= "('$case','".$_POST['firstname'][$i]."','".$_POST['lastname'][$i]."','$city')"; 
    if($i != count($_POST['firstname']) - 1) 
    { 
     $sql .= ','; //Will insert a comma after each except the last. Count - 1 since $i will equal count - 1 on the last one, since it starts at 0 and not 1. 
    } 
} 

$register_case = mysql_query($sql); 

は、このような何かを行います。

また、foreachを実行して、それぞれに '、'を追加して、終了時に文字列の右端からトリムするか、foreachを実行して、最後に手動で増分する外部カウンタを保持することができます。 2番目の考えでは、どちらも$ _POST ['lastname'] [$ key]を実行することなく、$ key => $ value型のことをしなくてもlastnamesを捕まえることはできませんでした。 ifで空の文字列をチェックする必要もあります。

もちろん、$ _POSTまたは$ _GETの値を直接SQLに渡して、最初に検証し、注入がないことを確認してください。

+0

ANSWERのOMG注入 –

+0

注意を払っていれば、そのようにしたくないと言われましたが、array_mapを使って入力検証関数をタイプしなくても簡単でしたあなたはそれを使用して、私がしたことを説明する。 – Phoenix

関連する問題