我在HTML表格中有几十个输入可用于输入数值。按下提交按钮后,所有输入值都将通过post
方法添加到SQL表中的相应列。 <input name="A1>
的值将发送到SQL表中的列A1,<input name="A2>
发送到列A2,依此类推。
我目前正在使用类似的东西(但有几十个参数)在我的表格中插入数据:
$sql = "INSERT INTO all_stats_table (A1, A2, A3) VALUES ($A1, $A2, $A3)";
这种方法的问题是每个输入都需要填充,否则会导致SQL错误。我最初使用php将所有空输入值设置为0,然后将所有内容发送到数据库,但我不认为这种方法是最有效的方法。
我更愿意动态检查哪些输入实际填充并仅将其值发送到表中,而不是将每个空输入值转换为0并且必须将所有内容发送到数据库。
我已经在SQL中将所有默认值设置为0,但我不知道如何只通过SQL发送填充的输入值。我尝试使用php foreach循环,但我无法找到正确的SQL语法。
我正在尝试做什么?如果不是,那么使这个过程更有效率的最佳做法是什么?
感谢您的帮助
编辑:尝试将akash raigade的优秀解决方案改编为非编号SQL列:
HTML:
<input name='name'>
<input name='address'>
<input name='age'>
PHP:
$Field_list = array ('name','address','age');
$field_string = '';
$input_string = '';
foreach ($_POST as $userInfo=>$userInfo_value) {
if (isset($userInfo)) {
if ($field_string == '') {
$field_string = $field_string.$userInfo; //problem here ?
$input_string = $userInfo_value; //problem here ?
}
else {
$field_string = $field_string.','.$userInfo; //problem here ?
$input_string = $input_string.','.$userInfo_value; //problem here ?
}
}
}
$sql = "INSERT INTO protocole_test (".$field_string.") VALUES (".$input_string.")";
echo $sql ; //check query formed
答案 0 :(得分:1)
[升级版]
基本的想法是我们保持INPUT的NAME属性与将要存储的表列名相同。然后在输入标签名称和填充的值的帮助下,我们准备只需要(FILLED)列的SQL语句和价值观。
对于给定的示例,请考虑以下MYSQL表:
sr.no.|name|age|gender
代码[已测试]:
<input name="name" >
<input name="age" >
<input name="gender" >
<input type='submit'>
<?php
$field_string ='';
$input_string='';
foreach ($_POST as $userInfo=>$userInfo_value){
if($userInfo_value !=''){
echo $userInfo."->".$userInfo_value;
if ($field_string == '') {
$field_string = $field_string.$userInfo;
$input_string = $userInfo_value;
}
else {
$field_string = $field_string.','.$userInfo;
$input_string = $input_string.','.$userInfo_value;
}
}
}
$sql = "INSERT INTO protocole_test (".$field_string.") VALUES (".$input_string.")";
echo $sql ; //check query formed
?>
[原始答案]看看以下代码:
<input name='a1' id='input_for_name'>
<input name='a2' id='input_for_class'>
<input name='a3' id='input_for_seat.no'>
.
.
<input name='an' id='input_for_n'>
现在
<?php
//you must be having field list to be inserted i.e
//INSERT INTO all_stats_table >>>(A1, A2, A3)<<< VALUES ($A1, $A2, $A3)
//A1,A2,A3 is field list here
//so save them into an array.
$Field_list = array ('A1','A2','A3',.......'An');
//Now get which input_field is inputted by :
$i=0;
$field_string = '';
$input_string = '';
for($i<n){
if(isset($_POST['a'.$i])){
if ($field_string == ''){
$field_string = $field_string.$Field_list[$i];
$input_string = $_POST['a'.$i];
}
else {
$field_string = $field_string.','.$Field_list[$i];
$input_string = $input_string.','.$_POST['a'$i];
}}}
$sql = "INSERT INTO (".$field_string.") VALUES (".$input_string.")";
//to check query formed
echo $sql ;
?>
说明:
我们检查哪个输入字段是FILLED,如果是字段我们将其FIELD添加到FIELD LIST中,并在INPUT LIST中将ITS VALUE添加到最后我们生成SQL语句。
答案 1 :(得分:0)
检查它们是否未定义或为空,如果是,请定义它们。
if ( (!isset($_POST['A1'])) || (empty($_POST['A1']) ){
$A1 = '0';
} else {
$A1 = $_POST['A1'];
}
答案 2 :(得分:0)
我无法对此进行测试,可能需要进行一些调试,但您可以创建一个函数,然后为每个输入调用该函数。有点像...
function chkinput($input){
if ( (!isset($_POST[$input])) || (empty($_POST[$input]) ){
$$input = '0';
} else {
$$input = $_POST[$input];
}
return $$input;
}
// You could potentially loop through the post array
// but here I just call the function once per input
chkinput('A1');
chkinput('A2');
...
chkinput('A12');
答案 3 :(得分:0)
循环遍历$_POST
数组并检查它是否有值。如果它确实将它连接到变量。像这样:
$fields = "";
$values = "";
foreach($_POST as $key=>$value){
if($value != ''){
if($value != end($_POST)){
$fields .= $key . ", ";
$values .= "'" . $value . "', ";
}else{
$fields .= $key;
$values .= "'" . $value . "'" ;
}
}
}
$sql = INSERT INTO protocole_test ($fields) VALUES ($values) ;
您的SQL看起来像:
INSERT INTO protocole_test (A1, A2, A3) VALUES ('A1', 'A2', 'A3')