2017-01-23 5 views
0

このサンプルコードでは、動的フィールドを生成しています。生成された動的フィールドの値をデータベースに挿入する方法

私の問題は、データをデータベースに挿入する方法がわかりません。

私はimplodeを試みましたが、結果は私が望む形式ではありません。

implode (',', $name); 
implode (',', $sweets); 
implode (',', $fruits); 
implode (',', $drinks); 

これは実際に私がいない私は3行を生成する場合には、この

ID | NAME | SWEETS | FRUITS | DRINKS 

1 | mark | cake | apple | 1 

2 | jenny |candy | mango | 2 

3 | randy | choco | ORANGE | 3 

のように挿入されなければならないので、私の列(ID、名前、甘い、フルーツ、ドリンク)

ですこれが可能かどうかを知る。 おかげ

FIDDLE

https://jsfiddle.net/jqj1h4vb/2/

+1

あなたが破を使用することはできません...あなたがループにフォームデータを必要とし、DBに挿入後、マルチINSERTクエリを構築します。 – Naga

+0

IDがプライマリキーであると仮定すると、1,1,1ではなく1,2,3になりますか? – Ultimater

+0

ああ申し訳ありませんが、忘れてしまいました、ありがとう –

答えて

1

は、このコードは、あなたが転がり取得する必要があります。
コードをテストする前に、いくつか注意してください。
フォームフィールド名とデータベース列名に関して調整する必要があるかもしれないし、そうでないかもしれないあなたのコードのいくつかの不一致が気づいた。うまくいけば、私は正しく推測し、コードをコピーしてそれを動作させるためにコードを貼り付けることができます。
。また、私のコードは、フォームデータがPOSTされることを期待しています。フォームデータをクエリ文字列として送信している場合は、さまざまなブラウザでquery string limitsが発生し、ユーザーが一度に送信するデータの量によっては切り捨てられることがあります。
。また、私のコードでは、データベースのプライマリフィールドが自動的に増加すると仮定し、MySQLまたはSQLベースのデータベースを使用しているため、挿入するときにIDを指定する必要はありません。
。また、洪水管理やキャプチャやinvisible captchaなどのようなセキュリティをコードに追加して、1人のユーザーが自分のデータベースの限界に達するまで氾濫しないようにすることを願っています。ここで

はPDOのソリューションです:

<?php 
function getPostArray($v) 
{ 
    if(!isset($_POST[$v]))return []; 
    if(!is_array($_POST[$v]))return [$_POST[$v]]; 
    return $_POST[$v]; 
} 

$n = getPostArray('name'); 
$s = getPostArray('sweet'); 
$f = getPostArray('fruit'); 
$d = getPostArray('drinks'); 

$insertQuery = []; 
$insertData = []; 
foreach($n as $k=>$v) 
{ 
    $insertData[] = array_key_exists($k, $n) ? $n[$k] : ''; 
    $insertData[] = array_key_exists($k, $s) ? $s[$k] : ''; 
    $insertData[] = array_key_exists($k, $f) ? $f[$k] : ''; 
    $insertData[] = array_key_exists($k, $d) ? $d[$k] : ''; 
    $insertQuery[] = '(?, ?, ?, ?)'; 
} 
// assuming your table is named `MyTable` 
$sql = 'INSERT INTO `MyTable` (name, sweets, fruits, drinks) VALUES '; 
if(!empty($insertQuery)) 
{ 
    $sql .= implode(', ', $insertQuery); 

    // assuming you have a valid PDO $db connection open 
    if(isset($db)) 
    { 
     $stmt = $db->prepare($sql); 
     $stmt->execute($insertData); 
    // otherwise you just wanna see the query 
    } else { 
     printf("<pre>$sql\n%s</pre>",print_r($insertData,true)); 
    } 
} 
+0

私はこれを試してみていただきありがとうございます。 –

関連する問題