У меня есть функция addIt, которая добавляет данные в базу данных независимо от имени или количества полей таблицы.bindParam in foreach close
Эта функция получает имя таблицы и имена полей и строит строку команды, затем она сканирует переменные POST, поступающие из формы.
тогда ему необходимо связатьParams с помощью инструкции перед выполнением.
foreach($data as $k=>$v){
$stmt->bindParam(':'.$result[$i],$v);
$i++;
}
$ data - это таблица, содержащая все переменные $ _POST. $ result - это таблица, которая содержит все имена полей
Если название - это имя поля таблицы, то ':'. Result [$ i], будет ': title', для связи с $ v (для например $ v == $ _ POST ['title'])
foreach используется для повторения одного и того же процесса для всех переменных.
, но у меня есть проблема, это то, что поля в таблицах получают значения последней переменной POST.
так, если форма отправляет эти переменные: $ _POST [ 'название'], $ _POST [ '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();}
}
}
Спасибо заранее.
Чтобы добавить элемент в массив все, что вам нужно сделать, это: $ данных [] = $ к; приращение выполняется автоматически. – John