私は、テーブルの名前またはフィールドの数が何であれ、データベースにデータを追加するaddItという関数を持っています。foreach closeのbindParam
この関数は、テーブルの名前、およびフィールド名を取得し、コマンドの文字列を構築し、それは、フォームからのPOST変数をスキャンします。
実行する前にステートメントを使用してbindParamsする必要があります。
foreach($data as $k=>$v){
$stmt->bindParam(':'.$result[$i],$v);
$i++;
}
$データは、すべての$ _POST変数を含むテーブルです。 $ resultはすべてのフィールド名を含むテーブルです
タイトルがテーブルフィールドの名前の場合は ':'、結果は[:title]、$ vとバインドされます== $ _ POST [ 'タイトル'])
例えば、$ vはforeachのは、すべての変数に対して同じプロセスを繰り返すために使用されています。
が、私は問題を抱えている、それはテーブルのフィールドは、最後のPOST変数の値を取得することです。そう
フォームはこれらの変数送信する場合:テーブルのフィールドをします、$ _POST [ 'タイトル'] $ _POST [ 'TEXTE']、およびタイトル= "こんにちは"、texte = "世界"
あなたがクラスコードのフルバージョンを確認したい場合は、タイトルは=「世界」、texte =「世界」
:これらの値をとる
<?php
class add{
/*******************FUNCTION GET FIELDS**********************/
private function getFields($tbl){
try{
require 'global/connection.inc.php';
$cmd='DESCRIBE '.$tbl;
$fields=array();
$i=0;
foreach($pdo->query($cmd) as $r){
if ($r[0]!='views' && $r[0]!='votes'){
$fields[$i]=$r[0];
}
$i++;
}
return $fields;
}
catch(PDOException $e){}
}
/***********************FUNCTION GETDATA************************/
private function getData(){
$data=array();
$i=0;
foreach($_POST as $k){
$data[$i]=$k;
$i++;
}
return $data;
}
/**************************FUNCTION ADDIT************************/
function addIt($tbl){
require 'global/connection.inc.php';
try{
/*********create object add and get Fields names and POST data*****************/
$object=new add();
$result=$object->getFields($tbl);
$data=$object->getData();
/***************Build the sql command*****************************************/
$fields='';
$cmd='INSERT INTO '.$tbl;
$i=0;
foreach($result as $k=>$v){
if ($i<count($result)-1 && $i!=0){
$fields.=$v.',';
}
if ($i==count($result)-1){
$fields.=$v;
}
$i++;
}
$values='';
$i=0;
foreach($result as $k=>$v){
if ($i<count($result)-1 && $i!=0){
$values.=':'.$v.',';
}
if ($i==count($result)-1){
$values.=':'.$v;
}
$i++;
}
$cmd=$cmd.'('.$fields.')VALUES('.$values.')';
echo $cmd.'<br/>';
/**************************bind params and execute command******************************/
$stmt=$pdo->prepare($cmd);
$i=1;
foreach($data as $k=>$v){
$n=$v.'';
$stmt->bindParam(':'.$result[$i],$n); //The problem is here
$i++;
}
$stmt->execute();
}
catch(PDOException $e){echo $e->getMessage();}
}
}
を事前にありがとうございます。
を参照してください。..してみてください:$データ[] = $ K;インクリメントは自動的に行われます。 – John