2016-05-31 11 views
1

私は私のデータベースの 'ドメイン'テーブルにドメインを挿入するためのフォームを持っています。PDO配列の値を挿入

フォームの一部には、一連のチェックボックスとして表示され、配列として処理される、そのドメインに対して提供するサービスのリストが含まれています。これらのサービスは、ドメインIDとサービスIDを持つ2つの列を持つmarketing_lookupテーブルに挿入されます。

私はPDOを使用してmysqlのinsert文を書き直そうとしています。

ドメインテーブルにドメインを挿入することができます。

marketing_lookupテーブルにservices配列を挿入するのに役立つ必要があります。私はあなたが:id:serviceidのプレースホルダを作成する必要がありますので。あなたがバインドする必要があります

... 
code inserting the domain into the domain table here 
... 
//start inserting services here 
if ($services == '') $services = array(); 
$services = $_POST['services']; 
$id = $conn->lastInsertId(); //obtained from above 

if (!isset($_POST['services'])): 
echo 'Nothing Selected'; 

else: 
try { 
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $conn->prepare('INSERT IGNORE INTO marketing_lookup SET 
`domain_id` = :id, 
`service_id` = :serviceid') 

foreach ($services as $serviceid) { 
$a = array (':1'=>$serviceid['1'], 
      ':2'=>$serviceid['2']); 

if ($stmt->execute($a)) {   
     //Query succeeded 
      } 
    else { 
       // Query failed. 
       echo $q->errorCode(); 
       }  
// close the database connection 
$conn = null; 
} // end foreach 
    } //end try 

catch(PDOException $e) { 
     echo $e->getMessage(); 
     } 
endif; 
?> 
+0

問題は何ですか? 'var_dump($ services)'を試して、あなたがそこに持っているキーを見たことがありますか? –

答えて

0

をコピー&ペーストし、これまでのところ、これを編集した サービス

私のページのHTMLフォーム

<form ....> 
... 
<input type='checkbox' name='services[]' value='1'>Service 1<br> 
<input type='checkbox' name='services[]' value='2'>Service 2<br> 
... 
</form> 

これを代わりに使用するparam :1 or :2

変更

$a = array (':1'=>$serviceid['1'], 
      ':2'=>$serviceid['2']); 

$a = array (':id'=>$serviceid['1'], 
      ':serviceid'=>$serviceid['2']); 
+0

このように@ Saty? .... foreachの($サービスIDとして$サービス){ $ A =配列( 'ID' => $番号、 \t \t ':のservice_id' => $いるServiceID [ '1']、 \t \t '':service_id '=> $ serviceid [' 2 ']、 .... 構文エラーが発生しました –

+0

構文エラーが発生しました@u_mulder –

+0

構文エラーメッセージを投稿し、 $ serviceid ['2']); $ a = array( ':id' => $ serviceid ['1']、 ':serviceid' – Saty

1

まずに、評価のご注文は間違っています。 POST値が存在するかどうかをチェックする前に、POST値を持つ変数を設定しないでください。その存在を確認し、存在する場合にのみ変数に設定する必要があります。

$id = $conn->lastInsertId(); // obtained from above (*) 

if (!isset($_POST['services'])) { 
    echo 'Nothing Selected'; 
} else { 
    $services = $_POST['services']; // array(0 => 1, 1 => 2, ...) 

第2に、前もって(*)から接続していると仮定しているため、再接続する必要はありません。クエリが短いので、?を使用して、Example #3に示すようにパラメータをバインドすることができます。

try { 
     $stmt = $conn->prepare('INSERT IGNORE INTO marketing_lookup SET domain_id = ?, service_id = ?'); 
     foreach ($services as $serviceId) { 
      $stmt->execute(array($id, $serviceId)); 
     } 
    } catch (PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 

$conn = null; // pointless 

複数の挿入を行っているので、transactionsを調べるとよいでしょう。